쿠버네티스 버전 업그레이드

쿠버네티스는 버전 업이 잦은 편이라, 클러스터 업그레이드는 운영에서 자주 하게 되는 작업입니다. 핵심은 마스터 먼저, 그다음 워커를 한 대씩 순차적으로 올리는 것이에요.

마스터 노드 업그레이드

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

워커 노드 업그레이드

워커는 노드마다 아래를 반복합니다.

  1. 해당 노드 drain
  2. 마스터와 동일하게 저장소 버전 수정 후 새 kubeadm 설치
  3. 마스터와 달리 kubeadm upgrade node 실행
  4. kubelet 업그레이드 후 재시작
  5. kubectl uncordon 으로 파드가 다시 올라올 수 있게 함
  6. 마스터에서 버전 확인 → 다음 노드로

팁: 버전 호환성

예전에 겪었던 사례인데, 특정 시점에는 containerd 버전이 kubelet과 안 맞아 CRI 인식이 실패하는 경우가 있었습니다. 업그레이드 전에는 쿠버네티스 버전과 컨테이너 런타임 버전의 호환성을 릴리스 노트에서 한 번 확인하고 진행하는 게 안전합니다. 한 마이너 버전씩 순서대로 올리는 것도 중요하고요(건너뛰기 금지).