!!! 중요 !!!
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
- kubelet 버전 확인
kubelet --version
- kubectl 버전 확인
kubectl version
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
- Install 할 kubadm 버전 확인
yum list --showduplicates kubeadm --disableexcludes=kubernetes
- kubeadm 다운로드
yum install -y kubeadm-1.26.14-150500.1.1 --disableexcludes=kubernetes
- 다운로드된 kubeadm 버전 확인
kubeadm version
만약 kubeadm 버전이 변경이 안된다면 다운로드한 kubeadm과 기존의 kubeadm의 경로가 다를 수 있다.
(yum으로 설치된 kubeadm은 /usr/bin/kubeadm 에 있다.)
kubespray 같은 방법으로 cluster를 설치했다면 /usr/local/bin에 있을 가능성이 높다. (which 명령으로 확인)
이런 경우 기존 kubeadm 바이너리의 이름을 변경하고 세션 재접속을 하면 된다.
추가로 kubeadm이 경로가 다르다면 kubectl과 kubelet도 같은 작업을 할 가능성이 높으므로 미리 하는 게 좋다.
- kubeadm의 upgrade plan을 확인
kubeadm upgrade plan
★ 중간에 command를 Copy한다.
첫 번째 control plane node인 경우
- copy한 command를 입력하여 kubeadm upgrade (몇 분 정도 소요된다.)
kubeadm upgrade apply v1.26.14
[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 명령어로 Node Status에 SchedulingDisabled를 확인하면 된다.
- kubelet & kubectl 다운로드
yum install -y kubelet-1.26.14-150500.1.1 kubectl-1.26.14-150500.1.1 --disableexcludes=kubernetes
- 다운로드한 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
참고 사이트
반응형
'Kubernetes > 실습' 카테고리의 다른 글
[kubernetes] wsl + kind를 사용한 k8s 설치 및 관리하기 (0) | 2025.01.26 |
---|---|
[Kubernetes] 쿠버네티스 구축 총 정리 (containerd) (2) | 2024.11.02 |
[Kubernetes] Worker (slave) node upgrade (0) | 2024.03.22 |
[kubernetes] control-plane(master) node 설치 과정(cri-o) (0) | 2024.03.13 |
[Kubernetes] kubespray 를 사용한 k8s 설치 (2) | 2023.05.15 |