[kubernetes] kubeadm 에서 클러스터 버전 업그레이드

728x90

클러스터 버전 업그레이드

1.22.8 → 1.22.9 버전으로 업그레이드 한다.

  1. Control Plane 의 kubeadm 업그레이드
  2. Control Plane 의 kubeadm 으로 api, cm, sched 업그레이드
  3. Control Plane 의 kubelet, kubectl 업그레이드
  4. Worker Node 의 kubeadm 업그레이드
  5. Worker Node 의 kubeadm 으로 업그레이드
  6. Worker Node 의 kubelet, kubectl 업그레이드

Control Plane

sudo apt-mark unhold kubeadm
sudo apt update
sudo apt upgrade kubeadm=1.22.9-00 -y
sudo apt-mark hold kubeadm
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.22.9
sudo apt-mark unhold kubelet kubectl
sudo apt upgrade kubectl=1.22.9-00 kubelet=1.22.9-00 -y
sudo apt-mark hold kubelet kubectl
kubelet --version
kubectl version

아래 두 작업은 빠져있다. 아래 두 작업은 반드시 이뤄질 필요는 없다.

하지만, kubelet 을 제외하고 쿠버네티스 클러스터의 모든 구성 요소들은 컨테이너로 구성되어 있고 구성 요소들의 버전을 업그레이드 한다는 것은 이미지를 교체하는 것이기 때문에 모든 컨테이너를 종료하고 교체한 이미지로 컨테이너를 띄워야 하기 때문에 쿠버네티스에 다운 타임이 발생한다.

이 다운 타임이 발생하는 것을 방지하기 위해 drain, cordon 을 실행하는 것이다.

drain: 노드 관리를 위해서 지정된 노드에 있는 포드들을 다른곳으로 이동시키는 명령이다. 자동으로 cordon 도 실행된다. cordon 은 지정된 노드에 더이상 포드들이 스케쥴링되서 실행되지 않도록하는 명령이다.

uncordon: 노드에 포드들이 스케쥴링되도록 한다.

Work Node

sudo apt-mark unhold kubeadm
sudo apt update
sudo apt upgrade kubeadm=1.22.9-00 -y
sudo apt-mark hold kubeadm
sudo kubeadm upgrade node
sudo apt-mark unhold kubelet kubectl
sudo apt upgrade kubectl=1.22.9-00 kubelet=1.22.9-00 -y
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubelet --version
kubectl version

아래 두 작업은 빠져있다.

drain

uncordon

728x90