kubeadm으로 Kubernetes 1.15.4까지 올린 작업 메모
Kubernetes 1.14에서 1.15.4로 올리며 남긴 명령 메모입니다. apt를 사용하는 당시 환경의 패키지 이름과 버전 표기이므로, 다른 배포판이나 현재 버전의 설치 명령과 구분해야 합니다.
작업은 kubeadm 갱신, control plane 업그레이드, 각 노드의 kubelet·kubectl 갱신으로 나뉘었습니다.
작업 전 확인
kubectl get nodes -o wide
kubeadm version대상 클러스터와 현재 버전, 패키지 저장소에서 받을 수 있는 버전을 먼저 확인합니다. apt-mark hold는 패키지 자동 갱신을 막는 설정이지, 선택한 버전의 호환성을 검증하는 기능은 아닙니다.
운영 워크로드가 있다면 노드별 배출과 재배치 조건도 따로 준비해야 합니다. 복제본과 PodDisruptionBudget, 여유 자원과 로컬 데이터에 따라 drain의 결과가 달라질 수 있습니다. 아래 명령 목록만으로 무중단 업그레이드를 보장하지는 않습니다.
kubeadm 패키지 갱신
각 노드의 작업 시점에 kubeadm을 목표 버전으로 맞췄습니다.
sudo apt-cache policy kubeadm
sudo apt-mark unhold kubeadm
sudo apt-get update
sudo apt-get install -y kubeadm=1.15.4-00
sudo apt-mark hold kubeadm
kubeadm version1.15.4-00은 당시 패키지 버전입니다. 지금 같은 저장소에서 받을 수 있다는 뜻은 아니므로, 과거 환경을 재현할 때도 패키지 출처와 보관 상태를 확인해야 합니다.
Control Plane 업그레이드
첫 control plane 노드에서는 계획을 확인하고 목표 버전을 적용했습니다.
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.15.4계획 출력에서 변경할 컴포넌트와 사전 확인 결과를 읽고 진행합니다. 여러 control plane 노드를 운영한다면 첫 노드와 추가 노드의 절차도 구분해야 합니다.
워커 노드 설정 갱신
워커에서는 kubeadm 패키지를 맞춘 뒤 다음 명령으로 노드 설정을 갱신했습니다.
sudo kubeadm upgrade node그 뒤 해당 노드의 kubelet과 kubectl을 올리고 kubelet을 다시 시작했습니다.
sudo apt-mark unhold kubelet kubectl
sudo apt-get update
sudo apt-get install -y kubelet=1.15.4-00 kubectl=1.15.4-00
sudo apt-mark hold kubelet kubectl
sudo systemctl restart kubeletControl plane 노드에서도 kubeadm 작업과 별도로 로컬 kubelet·kubectl 패키지를 맞추는 과정이 필요합니다.
작업 이후 확인
kubectl get nodes -o wide
kubectl get pods -n kube-system -o wide노드별 버전과 상태를 확인하고 DNS·네트워크·실제 워크로드를 점검합니다. 작업 전에 스케줄링을 막았다면 확인이 끝난 노드를 다시 사용할 수 있도록 전환해야 합니다.
노드 상태를 확인한 뒤에도 애플리케이션의 응답과 데이터 처리가 정상인지 확인해야 합니다.