Kubernetes/실습

[Kubernetes] Control plane (master) node upgrade

아무일도없었다 2024. 3. 14. 12:22
!!! 중요 !!!
Kubernetes의 버전은 반드시 순차적으로 Upgrade 해야 한다.
(ex: v1.25의 경우 v1.25 → v1.26 → v1.27 ... 순으로 해야 함)
Control Plane (Master) Node와 Worker Node를 같이 Upgrade 해야한다.
(ex: Worker Node가 v1.25 인 경우 Control Plane은 v1.27 이상으로 하려면 Error 발생)

 

Upgrade 환경 및 버전

  • Rocky Linux 9.3
  • Linux 5.14 el9 x86_64
  • kubeadm v1.25.16
  • kubelet v1.25.16
  • kubectl v1.25.16

 

 


 

1. 설치된 kubernetes version 확인

  • kubeadm 버전 확인
kubeadm version

kubeadm 버전

 

  • kubelet 버전 확인
kubelet --version

kubelet 버전

 

  • kubectl 버전 확인
kubectl version

kubectl 버전

 

2. Kubeadm Upgrade

  • yum repo 등록
    (본 포스팅에서 설치된 kubernetes는 1.25이므로 1.26으로 upgrade 한다. 다른 버전의 경우 baseurl과 gpgkey의 v1.26을 변경하면 된다.)
sudo cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.26/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.26/rpm/repodata/repomd.xml.key
EOF

 

  • Installkubadm 버전 확인
yum list --showduplicates kubeadm --disableexcludes=kubernetes

24.03.13 기준 최신버전 (가장 아래) 1.26.14-150500.1.1 을 선택 !

 

  • kubeadm 다운로드
yum install -y kubeadm-1.26.14-150500.1.1 --disableexcludes=kubernetes

kubeadm 설치

 

  • 다운로드된 kubeadm 버전 확인
kubeadm version

다운로드 된 kubeadm

 

만약 kubeadm 버전이 변경이 안된다면 다운로드한 kubeadm과 기존의 kubeadm의 경로가 다를 수 있다.
(yum으로 설치된 kubeadm은 /usr/bin/kubeadm 에 있다.)

kubespray 같은 방법으로 cluster를 설치했다면 /usr/local/bin에 있을 가능성이 높다. (which 명령으로 확인)

이런 경우 기존 kubeadm 바이너리의 이름을 변경하고 세션 재접속을 하면 된다.

추가로 kubeadm이 경로가 다르다면 kubectl과 kubelet도 같은 작업을 할 가능성이 높으므로 미리 하는 게 좋다.

 

 

  • kubeadm의 upgrade plan을 확인
kubeadm upgrade plan

You can now apply the upgrade by executing the following command

 

 

★ 중간에 command를 Copy한다.

 

 

첫 번째 control plane node인 경우

  • copy한 command를 입력하여 kubeadm upgrade (몇 분 정도 소요된다.)
kubeadm upgrade apply v1.26.14

kubeadm upgrade

 

[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.26.x". Enjoy!

[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

위의 문구가 나오면 성공이다.

 

다른 control plane node인 경우

  • kubeadm upgrade apply 대신 아래 명령어를 사용한다.
kubeadm upgrade node

 

 

 

3. Kubelet & Kubectl Upgrade

버전 호환 및 혹시 모를 문제를 대비해서 위에서 upgrade한 kubeadm 버전과 kubelet & kubectl 버전을 통일하는 것이 정신 건강에 좋다.

 

  • Node Drain
# <NodeName>을 drain하는 node의 이름으로 변경
kubectl drain <NodeName> --ignore-daemonsets

kubectl get nodes 명령어로 확인

 

kubectl get nodes 명령어로 Node StatusSchedulingDisabled를 확인하면 된다.

 

  • kubelet & kubectl 다운로드
yum install -y kubelet-1.26.14-150500.1.1 kubectl-1.26.14-150500.1.1 --disableexcludes=kubernetes

kubelet & kubectl download

 

  • 다운로드한 kubelet & kubectl 버전 확인
kubelet --version

 

kubectl version

 

 

  • kubelet 재시작
systemctl daemon-reload
systemctl restart kubelet

 

 

  • Node uncordon
# <NodeName>을 uncordon하는 node의 이름으로 변경
kubectl uncordon <NodeName>

 

 

4. Kubernetes Upgrade 확인

  • Node 버전 및 상태 확인
kubectl get nodes

control-plane의 버전이 성공적으로 올라갔다. (Ready)

 


참고 사이트

반응형