✍ Posted by Immersive Builder Seong
쿠버네티스 버전 정책(Skew Policy)
쿠버네티스 프로젝트는 평균 4개월에 한 번씩 업스트림 마이너 버전을 릴리스합니다.
그리고 최신 버전을 포함하여 3개의 마이너 버전(v1.29, v1.30, v1.31)을 지원하고 있습니다. (*24.11 기준)
따라서 새로운 마이너 버전이 릴리스되는 시점이 쿠버네티스의 버전을 업그레이드하는 적절한 시기가 됩니다.
참고로 쿠버네티스의 버전은 단계별로 마이너 업그레이드를 진행해야 하며 건너뛸 수 없습니다.
또한, 쿠버네티스의 구성 요소 간에 지원되는 버전 차이는 다음과 같습니다.
- 구성 요소 중에 kube-apiserver의 버전이 가장 최신이어야 합니다. (x.y)
- controller-manager, kube-schedular는 kube-apiserver보다 한 버전 낮게 설정할 수 있습니다. (~>x.y-1)
- kubelet, kube-proxy는 kube-apiserver보다 두 버전 낮게 설정할 수 있습니다. (~>x.y-2)
- kubectl은 kube-apiserver를 기준으로 한 버전 차이 내에서 지원합니다. (x.y+1, x.y, x.y-1)
쿠버네티스 버전 업그레이드
kubeadm을 이용하여 구성한 쿠버네티스 클러스터의 버전을 업그레이드하는 방법입니다.
클러스터의 버전 업그레이드 작업은 Control-Plane, Worker Nodes 순으로 진행합니다.
각 노드별로 업그레이드가 필요한 구성 요소는 아래와 같습니다.
- Control-Plane : kube-apiserver, controller-manager, kube-schedular, kubelet, kube-proxy
- Worker Nodes : kubelet, kube-proxy
OS 별로 지원하는 업그레이드 명령어가 상이합니다. (*공식문서 참조)
아래 내용은 Ubuntu OS를 기준으로 기술한 가이드입니다.
1. Control-Plane 업그레이드
Control-Plane을 업그레이드하는 작업은 주요 구성 요소의 일시적인 중단을 발생시킵니다. 따라서 작업하는 동안은 kubectl 명령어 및 쿠버네티스 API 사용, 파드 생성/변경/삭제, 그리고 파드 실패 시 재생성 프로세스 등이 제한됩니다.
- 쿠버네티스 패키지 레포지토리 변경 (*링크 참조)
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
$ sudo apt-get update
- 마이너 버전의 업그레이드 가능한 최신 패치 목록 조회
$ sudo apt update
$ sudo apt-cache madison kubeadm
- kubeadm 업그레이드
$ sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.31.x-*' && \
sudo apt-mark hold kubeadm
$ kubeadm version
- 업그레이드 계획 검증
$ sudo kubeadm upgrade plan
- Control-Plane 업그레이드
$ sudo kubeadm upgrade apply v1.31.x
# proceed if it is multi-control-plane-nodes
$ sudo kubeadm upgrade node
- CoreDNS 등 파드 축출 (Drain)
$ kubectl drain <control-plane-node> --ignore-daemonsets
- kubelet / kubectl 업그레이드
$ sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.31.x-*' kubectl='1.31.x-*' && \
sudo apt-mark hold kubelet kubectl
- kubelet 재시작
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
- Uncordon
$ kubectl uncordon <control-plane-node>
2. Worker Nodes 업그레이드
Worker Nodes는 한 번에 하나의 노드를 대상으로 업그레이드를 진행합니다.
그리고 목표한 버전에 도달할 때까지 마이너 업그레이드 작업을 노드마다 반복하여 수행합니다.
- 쿠버네티스 패키지 레포지토리 변경 (위와 동일)
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
$ sudo apt-get update
- kubeadm 업그레이드
$ sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.31.x-*' && \
sudo apt-mark hold kubeadm
$ kubeadm version
- Worker Node 업그레이드
$ sudo kubeadm upgrade node
- 워크로드 파드 축출 (Drain)
$ kubectl drain <worker-node-01> --ignore-daemonsets
- kubelet / kubectl 업그레이드
$ sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.31.x-*' kubectl='1.31.x-*' && \
sudo apt-mark hold kubelet kubectl
- kubelet 재시작
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
- Uncordon
$ kubectl uncordon <worker-node-01>
[출처]
1) https://kubernetes.io/releases/version-skew-policy/
2) https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
3) https://kubernetes.io/blog/2023/08/15/pkgs-k8s-io-introduction/
4) https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes/
'K8s > Practices' 카테고리의 다른 글
[K8s] 쿠버네티스 클러스터 재시작 오류 해결하기 (0) | 2024.11.21 |
---|---|
[K8s] K8s 클러스터를 직접 구성해보자 (0) | 2023.08.22 |