[CKS] 23. Kubernetes Version Upgrade Demo
Kubeadm을 활용한 쿠버네티스 클러스터 업그레이드 가이드입니다. Control Plane부터 Worker Node까지 단계별로 안전하게 최신 버전을 적용하세요.
개요
Kubeadm을 통해 클러스터 업그레이드를 진행하는 방법을 확인합니다.
공식 문서는 다음과 같습니다.
Package Repository 업데이트(참고)
쿠버네티스 패키지가 app.kubernetes.io
와 yum.kubernetes.io
에서 호스팅되었지만, v1.28부터 해당 리포지토리들은 더 이상 사용되지 않습니다. 이제 kubectl
및 kubeadm
과 같은 도구의 최신 버전을 다운로드하려면 packages.k8s.io
를 사용해야 합니다.
OS 확인
# 각 노드의 OS를 확인합니다.
kubectl get nodes
# 다음 명령어도 확인할 수 있습니다.
cat /etc/*release
# OS에 따라 각 저장소의 맞는 코드를 실행합니다.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core/stable/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 패키지 목록 업데이트
sudo apt-get update
버전 확인
설치가능한 버전과 버전의 저장소를 확인합니다.
sudo apt-cache madison kubeadm
----------------------------------
kubeadm | 1.29.3-1 | https://pkgs.k8s.io/core/stable/v1.29/deb Packages
kubeadm | 1.29.2-1 | https://pkgs.k8s.io/core/stable/v1.29/deb Packages
kubeadm | 1.29.1-1 | https://pkgs.k8s.io/core/stable/v1.29/deb Packages
kubeadm | 1.29.0-1 | https://pkgs.k8s.io/core/stable/v1.29/deb Packages
Controlplane 업그레이드
1. kubeadm 업그레이드
버전 문자열을 최신 버전(예: 1.29.3-1.1)으로 변경합니다.
sudo apt-mark unhold kubeadm && \
sudo apt-get update && \
sudo apt-get install -y kubeadm='1.29.3-1.1' && \
sudo apt-mark hold kubeadm
kubeadm version: &version.Info{Major:"1", Minor:"29", GitVersion:"v1.29.3", GitCommit:"6813625b7cd706db5c7388921be03071e14a294", GitTreeState:"clean", BuildDate:"2024-03-15T00:06:16Z", GoVersion:"go1.21.8", Compiler:"gc", Platform:"linux/amd64"}
2. upgrade plan
업그레이드를 위해 모의 실행을 수행 가능합니다.
자동으로 업그레이드되는 구성 요소와 수동 업데이트가 필요한 구성 요소(예: kubelet)를 간략하게 출력합니다.
sudo kubeadm upgrade plan
kubelet은 반드시 별도로 업그레이드 해야합니다.
3. upgrade apply
Controlplane에 대한 업그레이드 프로세스를 수행합니다.
인증서 갱신, Static Pod의 Manifest 업데이트 등 진행상황을 확인할 수 있습니다.
sudo kubeadm upgrade apply v1.29.3
노드 버전을 확인할 때 kubectl get nodes
표시되는 버전은 kubelet에 해당하기 때문에 업그레이드가 완전 완료될 때까지 v1.28.0이 계속 표시됩니다.
다른 Controlplane 노드가 존재한다면 위 과정은 같지만 upgrade apply
명령어가 달라집니다.
sudo kubeadm upgrade node
# or
sudo kubeadm upgrade apply
3.5 CNI Provider plugin(참고)
다른 CNI 플러그인을 사용하는 경우 해당 플러그인을 업그레이드해야합니다.
해당 자료에서는 Cluster Upgrade 과정만 확인하므로 각 CNI 플러그인 별 자료를 확인해야합니다.
4. kubelet, kubectl upgrade
kubelet을 업그레이드 하기 전 Controlplane을 비워 중단 시간을 최소화합니다.
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && \
sudo apt-get install -y kubelet='1.29.3-1.1' kubectl='1.29.3-1.1' && \
sudo apt-mark hold kubelet kubectl
kubelet은 재시작되어야합니다.
sudo systemctl daemon-reload
sudo systemctl restart kubelet
업그레이드가 완료되었다면 버전을 확인하고 스케줄링을 다시 허용해야합니다.
kubectl get nodes
kubectl uncordon controlplane
Worker Node 업그레이드
작업은 유사합니다. kubeadm → kubelet, kubectl 업그레이드
1. kubeadm upgrade & apply
sudo apt-mark unhold kubeadm && \
sudo apt-get update && \
sudo apt-get install -y kubeadm='1.29.3-1.1' && \
sudo apt-mark hold kubeadm
sudo kubeadm upgrade node
2. Worker node upgrade
중단 시간 최소화를 위해 동일하게 워커 노드를 비워 다른 노드로 스케줄합니다.
kubectl drain <node-name> --ignore-daemonsets
kubelet & kubectl 업데이트
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && \
sudo apt-get install -y kubelet='1.29.3-1.1' kubectl='1.29.3-1.1' && \
sudo apt-mark hold kubelet kubectl
kubelet 서비스를 다시 시작합니다.
sudo systemctl daemon-reloadsudo systemctl restart kubelet
kubectl uncordon <node-name>
마지막으로 모든 노드가 업그레이드되었는지 확인해야합니다.
kubectl get nodes