DevOps

CKA 예제 리마인더 - 39. Lightning Lab - Cluster Upgrade

Vince_rf 2025. 1. 15. 04:42

컨트롤 플레인 노드에서:

Kubernetes apt 저장소를 정의하는 파일을 수정

 

vim /etc/apt/sources.list.d/kubernetes.list

 

URL의 버전을 다음 사용 가능한 마이너 릴리스인 v1.31로 업데이트한다.

 

deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /

 

controlplane을 업그레이드하기 전에 drain 진행 및 kubernetes 패키지 확인

kubectl drain controlplane --ignore-daemonsets
apt update

 

apt-cache madison kubeadm

35 packages can be upgraded. Run 'apt list --upgradable' to see them.
   kubeadm | 1.31.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.31/deb Packages
   kubeadm | 1.31.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.31/deb Packages
   kubeadm | 1.31.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.31/deb Packages
   kubeadm | 1.31.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.31/deb Packages
   kubeadm | 1.31.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.31/deb Packages

 

확인된 버전은 1.31.0-1.1, 바로 설치해준다

 

apt-get install kubeadm=1.31.0-1.1

 

설치가 끝나면 kubeadm을 업그레이드하고 apply 해준다

 

kubeadm upgrade plan v1.31.0
kubeadm upgrade apply v1.31.0

 

이제 Kubelet의 버전을 업그레이드하고 재시작한다. controlplane 노드를 스케줄 가능 상태로 표시한다.

apt-get install kubelet=1.31.0-1.1
systemctl daemon-reload
systemctl restart kubelet
kubectl uncordon controlplane

 

Node01을 드레인하기 전에 업그레이드 중 컨트롤 플레인 노드에 태인트가 추가되었다면 이를 제거해야 한다.

 

# 태인트를 확인한다.
kubectl describe node controlplane | grep -i taint

# "kubectl taint" 명령어를 사용해 태인트를 제거한다.
kubectl taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule-

# 태인트가 성공적으로 제거되었는지 확인한다.
kubectl describe node controlplane | grep -i taint

 

node01 drain 진행

kubectl drain node01 --ignore-daemonsets

Node01 노드에서:

vim /etc/apt/sources.list.d/kubernetes.list

 

마찬가지로 1.31로 내용 수정

deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /

 

패키지 확인

apt update
apt-cache madison kubeadm

 

apt-get install kubeadm=1.31.0-1.1
# 노드를 업그레이드한다.
kubeadm upgrade node

 

apt-get install kubelet=1.31.0-1.1
systemctl daemon-reload
systemctl restart kubelet

 

컨트롤 플레인 노드로 돌아와서:

kubectl uncordon node01
kubectl get pods -o wide | grep gold  # 해당 파드가 노드에 스케줄되었는지 확인한다.