본문 바로가기
카테고리 없음

In-place Cluster Upgrade : 1.28 → 1.29 업그레이드 톺아보기

by james_janghun 2025. 4. 5.

도전과제인 In-place Cluster 업그레이드 중 중요한 사항에 대해서 조금 정리해봅니다.

1. Control plane 업그레이드

control plane upgrade (10분 소요)

일단 in-place 업그레이드의 경우 1단계씩밖에 안됨을 명심하자.

# 
cd ~/environment/terraform
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c > 1.26.txt
aws eks describe-cluster --name $EKS_CLUSTER_NAME | egrep 'version|endpoint|issuer|platformVersion'        
terraform apply -auto-approve # 10분 소요


# 확인 : endpoint, issuer 동일, platformVersion 변경!
aws eks describe-cluster --name $EKS_CLUSTER_NAME | egrep 'version|endpoint|issuer|platformVersion'

# 파드 컨테이너 이미지 버전 모두 동일
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c > 1.27.txt
diff 1.27.txt 1.26.txt # 동일함

다음과 같이 기본적인 클러스터 정보를  추출해놓고, 1.27로 업그레이드 시에도 차이가 없다는 것을 확인해볼 수 있습니다.

 

 

클러스터 업그레이드를 진행합니다.

 

이상없이 업그레이드 된것을 알 수 있다.

 

 

[2. 애드온] Upgrading EKS Addons (5분 이내)

클러스터 업그레이드시 kube-proxy 포함 중요한 연계된 add-on들도 버전을 맞춰줘야합니다.

해당 addon을 다음과같이 cli를 통해서 확인하고 기록한 뒤 업그레이드 항목에 같이 넣도록 합니다.

 

일단 먼저 addon항목들을 추출합니다.

#
eksctl get addon --cluster $CLUSTER_NAME
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c

 

addon 버전 확인

사용가능한 addon 버전을 확인합니다.

aws eks describe-addon-versions --addon-name coredns --kubernetes-version 1.27 --output table \
    --query "addons[].addonVersions[:10].{Version:addonVersion,DefaultVersion:compatibilities[0].defaultVersion}"
v1.10.1-eksbuild.18

aws eks describe-addon-versions --addon-name kube-proxy --kubernetes-version 1.27 --output table \
    --query "addons[].addonVersions[:10].{Version:addonVersion,DefaultVersion:compatibilities[0].defaultVersion}"
v1.27.16-eksbuild.19

 

기본버전이 최소라고 보면된다. v1.10.1-eksbuild.4가 기본적으로 사용할 수 있고, 가장 최신버전은 v1.10.1-eksbuild.18 임을 확인할 수 있습니다.

일반적으로 다음과 같이 eks addon 버전을 관리하고 있기 때문에 해당 부분을 업그레이드 해주면 됩니다.

조금 더 고도화 시키면 해당 클러스터 버전의 addon 버전을 추출해서 넣을 수 있도록 해버리면됩니다.

      eks_addons = {
          coredns = {
              version = "v1.10.1-eksbuild.18" # Recommended version for EKS 1.27
          }
          kube_proxy = {
              version = "v1.27.16-eksbuild.19" # Recommended version for EKS 1.27
          }
          vpc-cni = {
              most_recent = true
          }
			    aws-ebs-csi-driver = {
			      service_account_role_arn = module.ebs_csi_driver_irsa.iam_role_arn
			    }
      }

 

이런식으로 addon 상태를 직접적으로 확인할 수 있습니다.

while true; do curl -s $UI_WEB ; date; kubectl get pod -n kube-system -l 'k8s-app in (kube-dns, kube-proxy)'; echo ; sleep 2; done

 

실제로 테라폼 업그레이드를 해봅시다.

 

잘 업그레이드 됩니다.

[3.1-1 데이터부 - 관리형노드그룹 : 인플레이스 업그레이드] In-Place Managed Node group Upgrade

테라폼 코드는 일반적으로 managed_node_groups를 사용하고 기본적으로 control plane의 노드를 따르게 됩니다.

 

노드 그룹 또한 이렇게 while문을 통해서 업그레이드 상태를 확인할 수 있습니다.

while true; do aws autoscaling describe-auto-scaling-groups --query 'AutoScalingGroups[*].AutoScalingGroupName' --output json | jq; echo ; kubectl get node -L eks.amazonaws.com/nodegroup; echo; date ; echo ; kubectl get node -L eks.amazonaws.com/nodegroup-image | grep ami; echo; sleep 1; echo; done