kubeadm으로 쿠버네티스 클러스터 업그레이드하기
Drain과 Cordon 개념부터 kubeadm, kubelet, kubectl을 Master Node와 Worker Node 순서로 업그레이드하는 절차를 정리한다.
시리즈 · Kubernetes3 / 4
- 쿠버네티스 기본 오브젝트: Pod, ReplicaSet, Deployment, Service
- 쿠버네티스 Volume: PV, PVC, StorageClass
- kubeadm으로 쿠버네티스 클러스터 업그레이드하기
- CKA 2025 개정 시험 합격 후기
kubeadm으로 구성한 클러스터의 kubeadm, kubelet, kubectl 버전을 업그레이드하는 방법을 정리한다. 버전별 상세 절차는 공식 문서를 참조하면 된다.
Drain과 Cordon
Node를 업그레이드하는 동안 그 Node에서 애플리케이션이 실행 중이면 서비스 다운타임이 발생한다. 다운타임을 최소화하기 위해 Drain과 Cordon을 사용한다.
Drain
- Node를 스케줄링 불가 상태로 만들어 새로운 Pod가 할당되지 않게 한다.
- 실행 중인 Pod를 Node에서 내보낸다. ReplicaSet 등 컨트롤러가 관리하는 Pod는 다른 Node에 다시 생성된다.
- Node를 비울 때 사용한다.
kubectl drain <node-name>
Cordon
- Node에 NoSchedule Taint를 적용해 새로운 Pod가 할당되지 않게 한다.
- 실행 중인 Pod는 그대로 유지된다.
- Node 점검 시 활용한다.
kubectl cordon <node-name>
Uncordon
- Node에 적용된 NoSchedule Taint를 제거해 다시 스케줄링이 가능하게 한다.
kubectl uncordon <node-name>

그림 출처: passwd.tistory.com
Master Node 업그레이드
Master Node부터 업그레이드한다. kube-apiserver의 버전은 kubectl을 제외한 control plane의 다른 모든 컴포넌트보다 높거나 같아야 한다는 점에 주의한다.
먼저 설치 가능한 버전을 조회한다.
sudo apt update
sudo apt-cache madison kubeadm
원하는 버전의 kubeadm을 설치한다.
sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.32.x-*' && \
sudo apt-mark hold kubeadm
버전을 찾을 수 없다는 오류가 날 때
E: Version '1.32.0-*' for 'kubeadm' was not found 오류가 발생한다면, APT 리포지토리 설정이 이전 마이너 버전을 가리키고 있기 때문이다. 패키지 리포지토리 변경 문서를 따라 수정해야 한다.
/etc/apt/sources.list.d/kubernetes.list를 열어 보면 다음과 같이 되어 있다.
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /
여기서 v1.31을 v1.32로 변경하면 된다.
업그레이드 진행
sudo kubeadm upgrade apply v1.32.x
kubectl drain <node-to-drain> --ignore-daemonsets
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.32.x-*' kubectl='1.32.x-*' && \
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon <node-to-uncordon>
Worker Node 업그레이드
Master Node가 끝나면 Worker Node를 진행한다. 절차는 동일하고 두 가지만 다르다.
kubeadm upgrade apply v1.32.x대신kubeadm upgrade node를 실행한다.kubectl drain과kubectl uncordon은 Worker Node가 아니라 Master Node에서 실행해야 한다.