Cluster의 버전을 업데이트하는 방법에 대해 알아보자.
kubeadm, kubectl, kubelet 버전을 업데이트 할거임.
우선 버전별로 업데이트 하는 방법은 공식문서를 참조하면 된다.
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
업데이트 하기 전 Drain과 Cordon에 대해 알아야 한다.
특정 node를 업데이트하는데, 해당 node에서 Application이 실행 중이면 서비스 다운타임이 발생한다.
다운타임을 최소화하기 위해 Drain과 Cordon을 사용한다.
kubectl drain <node-name>
kubectl cordon <node-name>
kubectl uncordon <node-name>
이해하기 쉬운짤이 있어 퍼왔습니다. ( 출처 )

그럼 이제 Upgrade하는 과정을 시작해보자.
우선 Master Node를 Upgrade 해야 한다.
주의할 점은 kube-apiserver의 버전은 controle-plane의 kubectl를 제외한 다른 모든 버전보다 높거나 같아야 한다
sudo apt update
sudo apt-cache madison 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 오류가 발생한다면 다음 과정을 거쳐야 한다.
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/change-package-repository/
APT 리포지토리 설정에 적혀있는 주소에서는 1.32.0이 없기 때문에 그렇다.
nano /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>
Master Node의 업데이트가 끝났다면, Worker Node를 시작해야 한다.
Worker Node는
kubeadm upgrade apply v1.32.x 대신에 kubeadm upgrade node를 하면 된다.
drain은 Master Node에서 해야 한다!
이후는 동일함