본문으로 건너뛰기

Kubeadm으로 Kubernetes Cluster 업그레이드하기

사전 준비 사항​

업그레이드할 버전을 선택합니다. Kubernetes / Version Skew Policy에 따라 minor 버전 1 증가 또는 patch 버전 증가만 가능합니다.

Kubernetes GitHub / CHANGELOG를 읽고 어떤 기능이 추가되고 제거되었는지 확인합니다.

팁

kubent는 Kubernetes 클러스터에 deprecated된 API를 사용하는지 확인하는 도구입니다. mise로 런타임 버전 관리하기를 참고하여 kubent를 설치합니다.

아래 명령어를 실행하여 deprecated된 API를 사용하는지 확인합니다.

kubent

Control Plane Node 업그레이드​

팁

control plane component들을 업그레이드하기 전에 drain을 먼저 실행하여 Pod을 모두 축출하고, kubelet 업그레이드까지 완료한 후에 uncordon을 실행해도 됩니다.

한 번에 하나씩, 첫 번째 Node부터 업그레이드를 진행해야 합니다.

타겟 버전의 kubeadm을 설치한 후 아래 명령어를 실행하여 업그레이드 계획을 확인합니다.

kubeadm upgrade plan [<version>]
sudo kubeadm upgrade apply <version> [<flag> ...]
  • --config=<file>: UpgradeConfiguration 설정 파일을 지정합니다.
  • --ignore-preflight-errors=all

위 명령어가 실행되면

  • 클러스터가 업그레이드 가능한 상태인지 확인합니다.
  • Version Skey Policy를 따르는지 확인합니다.
  • control plane component들의 이미지가 있는지 또는 pull 가능한지 확인합니다.
  • control plane component들의 설정이 업그레이드가 필요한 경우 생성하거나 유저가 제공한 설정을 사용합니다.
  • control plane component들을 업그레이드합니다. 실패하면 롤백합니다.
  • 새로운 CoreDNS, kube-proxy manifest를 적용하고, 필요한 RBAC 설정을 생성합니다.
  • apiserver의 인증서 만료가 180일 이내인 경우 인증서를 갱신합니다.

kubelet을 업그레이드하기 전에 해당 노드의 Pod을 모두 축출합니다.

kubectl drain \
--ignore-daemonsets \
--delete-emptydir-data \
<node>
sudo systemctl stop kubelet

타겟 버전의 kubelet/kubectl을 설치하고 kubelet을 재시작합니다.

sudo systemctl daemon-reload
sudo systemctl start kubelet

업그레이드된 Node를 다시 스케줄 가능 상태로 변경합니다.

kubectl uncordon <node>

Worker Node 업그레이드​

타겟 버전의 kubeadm을 설치한 후 아래 명령어를 실행합니다.

sudo kubeadm upgrade node

위 명령어가 실행되면

  • 클러스터에서 ClusterConfiguration을 가져옵니다.
  • kubelet 설정을 업그레이드합니다.

kubelet을 업그레이드하기 전에 해당 노드의 Pod을 모두 축출합니다.

kubectl drain \
--ignore-daemonsets \
--delete-emptydir-data \
<node>
sudo systemctl stop kubelet

타겟 버전의 kubelet/kubectl을 설치하고 kubelet을 재시작합니다.

sudo systemctl daemon-reload
sudo systemctl start kubelet

업그레이드된 Node를 다시 스케줄 가능 상태로 변경합니다.

kubectl uncordon <node>