들어가며
EKS 기반으로 쿠버네티스 환경을 구축하고 Karpenter를 도입하여 효율적인 노드 오토스케일링이 되도록 구축한 후 팀 내에서 Prometheus, Grafana를 도입하는 역할을 맡아 아래처럼 대시보드를 구성해서 팀에 제공했다.
그러나 직접 모니터링 환경을 구축하지 않은 팀원들에겐 클러스터, 노드, 파드 등 메트린 관찰 대상이 많아 낯설게 느껴질 것 같다고 생각했다.
ECS 기반으로 진행하기보다 복잡한 쿠버네티스 환경에서 아키텍처를 구축하며 경험을 기르고자 결심을 했으니 쿠버네티스가 제공하는 기능을 주체적으로 관리하고 싶었다.
다른 팀원들이 맡은 부분을 개발하고 테스트하는 기간에 우선적으로 파드 및 노드의 생성과 삭제에 관련된 메트릭인 Cpu, Memory, Status, Age를 시각적으로 보여줄 수 있는 Kube-Ops-View을 도입하게 된다면 팀원들의 작업 효율성이 상당히 좋아질 것 같아 고려하게 되었다.
설치 과정
AWS Load Balancer Controller 설치
공식문서
Helm를 사용하여 AWS Load Balancer Controller 설치 - Amazon EKS
AWS Management Console에서 정책을 보는 경우 콘솔에 ELB 서비스에 대한 경고는 표시되지만 ELB v2 서비스에 대한 경고는 표시되지 않습니다. 이는 정책의 작업 중 일부가 ELB v2에는 있지만 ELB에는 없기
docs.aws.amazon.com
설치
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=$CLUSTER_NAME \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
우리 프로젝트에서 진행이 안되는 부분이었는데 VPC ID를 추가해서 성공적으로 해결할 수 있었다.
External DNS 설치
MyDomain=$MY_DOMAIN
MyDnzHostedZoneId=$(aws route53 list-hosted-zones-by-name --dns-name "$MY_DOMAIN." --query "HostedZones[0].Id" --output text)
echo $MY_DOMAIN, $MY_DNS_HOSTED_ZONE_ID
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/aews/externaldns.yaml
MyDomain=$MyDomain MyDnzHostedZoneId=$MY_DNS_HOSTED_ZONE_ID envsubst < externaldns.yaml | kubectl apply -f -
Kube-Ops-View 설치
설치 과정과 도메인 연결
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set env.TZ="Asia/Seoul" --namespace kube-system
kubectl patch svc -n kube-system kube-ops-view -p '{"spec":{"type":"LoadBalancer"}}'
kubectl annotate service kube-ops-view -n kube-system "external-dns.alpha.kubernetes.io/hostname=kubeopsview.$MY_DOMAIN"
echo -e "Kube Ops View URL = http://kubeopsview.$MY_DOMAIN:8080/#scale=1.5"
테스트 클러스터에선 도메인 연결 명령은 제외하고 설치하고 주어지는 주소에 따로 Route 53에서 라우팅만 설정했다.
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set env.TZ="Asia/Tokyo" --namespace kube-system
kubectl patch svc -n kube-system kube-ops-view -p '{"spec":{"type":"LoadBalancer"}}'
Kube-Ops-View 삭제
helm uninstall kube-ops-view --namespace kube-system
시연
애플리케이션 파드가 올라가는 노드 세 개의 노드로 이루어진 클러스터와 CI/CD 및 오픈소스 파드가 올라가는 두 개의 노드로 이루어진 클러스터를 운영 중이었다.
부하 테스트 과정에서 파드가 늘어나는 과정에서 애플리케이션 클러스터의 노드에만 파드가 늘어나는 것을 확인할 수 있었고, 파드가 들어갈 노드가 부족할 시 노드가 확장되어 파드가 늘어나는 과정을 정상적으로 확인할 수 있었다.
성과
이처럼 직접 CLI 명령어로 파드 및 노드의 상태를 확인하는 팀원들의 번거로움을 줄이도록 시각화 보드를 제공하여 팀원들의 만족을 이끌어낼 수 있었다.
데브옵스 엔지니어로서 상황에 적절한 오픈소스를 활용해서 개발 프로세스에서 팀의 작업 효율성에 크게 기여할 수 있던 경험이었고, 맡은 역할에 충실하면서도 팀원의 이해도를 고려하며 협업을 잘 해나갈 수 있는 엔지니어가 될 수 있었던 경험이었다.