쿠버네티스는 버전 업이 잦은 편이라, 클러스터 업그레이드는 운영에서 자주 하게 되는 작업입니다. 핵심은 마스터 먼저, 그다음 워커를 한 대씩 순차적으로 올리는 것이에요.
마스터 노드 업그레이드
1. Drain
업그레이드할 노드의 파드를 다른 노드로 비웁니다.
kubectl drain [마스터노드명] --ignore-daemonsets
2. 업그레이드 계획 확인
kubeadm upgrade plan
3. 저장소 버전 수정 후 kubeadm 설치
마이너 버전을 올릴 때(예: 1.30 → 1.31)는 pkgs.k8s.io 저장소 경로의 버전을 먼저 바꿔야 합니다.
# /etc/apt/sources.list.d/kubernetes.list 의 v1.30 → v1.31 로 수정
apt-get update
apt-cache madison kubeadm # 설치 가능한 버전 확인
apt-mark unhold kubeadm
apt-get install -y kubeadm=1.31.0-1.1
apt-mark hold kubeadm
4. 마스터 업그레이드 적용
kubeadm upgrade apply v1.31.0
5. kubelet 업그레이드
apt-mark unhold kubelet
apt-get install -y kubelet=1.31.0-1.1
apt-mark hold kubelet
systemctl daemon-reload
systemctl restart kubelet
6. 되돌리기(uncordon)와 확인
kubectl uncordon [마스터노드명]
kubectl get nodes -o wide
워커 노드 업그레이드
워커는 노드마다 아래를 반복합니다.
- 해당 노드
drain - 마스터와 동일하게 저장소 버전 수정 후 새
kubeadm설치 - 마스터와 달리
kubeadm upgrade node실행 kubelet업그레이드 후 재시작kubectl uncordon으로 파드가 다시 올라올 수 있게 함- 마스터에서 버전 확인 → 다음 노드로
팁: 버전 호환성
예전에 겪었던 사례인데, 특정 시점에는 containerd 버전이 kubelet과 안 맞아 CRI 인식이 실패하는 경우가 있었습니다. 업그레이드 전에는 쿠버네티스 버전과 컨테이너 런타임 버전의 호환성을 릴리스 노트에서 한 번 확인하고 진행하는 게 안전합니다. 한 마이너 버전씩 순서대로 올리는 것도 중요하고요(건너뛰기 금지).