✍ 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/
Version Skew Policy
The maximum version skew supported between various Kubernetes components.
kubernetes.io
2) https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
Upgrading kubeadm clusters
This page explains how to upgrade a Kubernetes cluster created with kubeadm from version 1.30.x to version 1.31.x, and from version 1.31.x to 1.31.y (where y > x). Skipping MINOR versions when upgrading is unsupported. For more details, please visit Versio
kubernetes.io
3) https://kubernetes.io/blog/2023/08/15/pkgs-k8s-io-introduction/
pkgs.k8s.io: Introducing Kubernetes Community-Owned Package Repositories
On behalf of Kubernetes SIG Release, I am very excited to introduce the Kubernetes community-owned software repositories for Debian and RPM packages: pkgs.k8s.io! The new package repositories are replacement for the Google-hosted package repositories (apt.
kubernetes.io
4) https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes/
Upgrading Linux nodes
This page explains how to upgrade a Linux Worker Nodes created with kubeadm. Before you begin You need to have shell access to all the nodes, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run th
kubernetes.io
'K8s > Practices' 카테고리의 다른 글
[K8s] 쿠버네티스 클러스터 재시작 오류 해결하기 (0) | 2024.11.21 |
---|---|
[K8s] K8s 클러스터를 직접 구성해보자 (0) | 2023.08.22 |