공식 문서 : https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

출처 : kodekloud
kube-apiserver 보다 높은 버전을 사용할 순 없다Controller-manager와 kube-scheduler는 한 버전은 더 낮출 수 있다kubelet이나 kube-proxy는 두 버전 이상 낮을 수 있다kubectl은 kube-apiserver 보다 한 버전 더 높을 수 있다

👉🏻 프로덕션 환경이라 가정
pod들이 영향을 받지 않는다 kubectl 또는 다른 K8S API를 이용해 클러스터에 액세스 할 수 없다.controller-manager도 동작하지 않음 👉🏻 pod가 다운되면 자동으로 생성되지 않음
1). 한 꺼번에 모든 워커노드를 업그레이드 한다

2). 한번에 노드를 하나씩 업그레이드 한다

3). 클러스터에 새로운 소프트웨어 버전을 가진 노드를 추가한다

controlplane:~$ kubeadm upgrade plan
[preflight] Running pre-flight checks.
[upgrade/config] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"...
[upgrade/config] Use 'kubeadm init phase upload-config --config your-config.yaml' to re-upload it.
[upgrade] Running cluster health checks
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: 1.32.1 // 현재 클러스터의 버전 정보
[upgrade/versions] kubeadm version: v1.32.1 // 현재 kubeadm 의 버전 정보
I0612 02:52:03.294691 10439 version.go:261] remote version is much newer: v1.33.1; falling back to: stable-1.32
[upgrade/versions] Target version: v1.32.5
[upgrade/versions] Latest version in the v1.32 series: v1.32.5 // 최신 버전과 안정 버전에 대한 정보
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT NODE CURRENT TARGET
kubelet controlplane v1.32.1 v1.32.5
kubelet node01 v1.32.1 v1.32.5
// 수동으로 업그레이드 해야하는 kubele에 대한 버전 정보
Upgrade to the latest version in the v1.32 series:
// 업그레이드 가능한 controllplane의 구성 요소에 대한 버전 정보
COMPONENT NODE CURRENT TARGET
kube-apiserver controlplane v1.32.1 v1.32.5
kube-controller-manager controlplane v1.32.1 v1.32.5
kube-scheduler controlplane v1.32.1 v1.32.5
kube-proxy 1.32.1 v1.32.5
CoreDNS v1.11.3 v1.11.3
etcd controlplane 3.5.16-0 3.5.16-0
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.32.5
Note: Before you can perform this upgrade, you have to update kubeadm to v1.32.5.
_____________________________________________________________________
The table below shows the current state of component configs as understood by this version of kubeadm.
Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
upgrade to is denoted in the "PREFERRED VERSION" column.
API GROUP CURRENT VERSION PREFERRED VERSION MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io v1alpha1 v1alpha1 no
kubelet.config.k8s.io v1beta1 v1beta1 no
_____________________________________________________________________
kubectl이 아니고 kubeadm이다!controlplane의 구성 요소 현재 버전이 표시되고 업그레이드 가능한 버전의 정보도 얻을 수 있다controllplane 구성 요소를 업글 한 뒤에 노드에서 수동(manually)으로 kubelet 버전을 업그레이드 해야 한다kubeadm은 kubelet의 버전을 절대 업그레이드 하지 않는다kubeadm 도구부터 업그레이드 한다kubeadm 툴은 K8S와 같은 소프트웨어 사용
kubeadm과 클러스터를 업그레이드kubectl get node 명령어로 조회된 버전은 kube-apiserver 자체의 버전이 아닌 kubelet의 버전임kubelet 을 수동으로 업그레이드 해야함kubelet이 실행될 수도 아닐 수도 있음 kubeadm으로 배포된 클러스터에는 마스터노드에 kubelet 이 존재한다.kubelet을 설치하고 재기동 하면 kubectl get nodes 명령어로 조회시 해당 노드의 버전이 업그레이드 되어있음을 확인kubectl drain node01 명령어로 해당 노드의 모든 pod를 안전하게 종료한다$ apt-get upgrade -y kubeadm-1.12.0-00
$ apt-get upgrade -y kubelet-1.12.0-00
$ kubeadm upgrade node config --kubelet-version v1.12.0
$ systemctl restart kubelet
$ kubectl uncordon node01
pod가 바로 노드로 돌아올 필요는 없고 스케줄이 가능하다고 만 표시되어 있을것임