개요
Kubernetes는 보안 패치 및 기능 개선을 위해 Kubernetes cluster upgrade를 주기적으로 수행해야 합니다. Kubernetes 업그레이드는 한 번에 한 개의 minor 버전씩만 가능하며, 예를 들어 1.32에서 1.35로 올리려면 1.32 → 1.33 → 1.34 → 1.35 순서로 각 버전을 단계별로 진행해야 합니다.
업그레이드 도구는 kubeadm이며, 진행 순서는 반드시 Control Plane 노드 먼저, 이후 Worker 노드 순차적으로 진행해야 합니다. Control Plane 노드가 여러 개인 HA 구성에서는 각 master 노드를 한 번에 하나씩 업그레이드합니다.
노드 업그레이드 전후에는 kubectl drain과 kubectl uncordon으로 해당 노드의 스케줄링을 일시 중지하고, 업그레이드 완료 후 다시 활성화합니다. Ubuntu 환경에서는 apt-mark hold로 kubeadm, kubelet, kubectl 패키지를 고정해 두었다가 업그레이드 시점에만 해제하는 방식을 권장합니다.
이 가이드는 Ubuntu 24.04 기반의 단일 Control Plane 클러스터(master 1대, worker 2대)에서 1.32.x → 1.33.7 업그레이드를 진행한 절차를 기록합니다. kubeadm upgrade plan으로 가능한 업그레이드 대상 버전을 확인하고, kubeadm upgrade apply로 Control Plane을 업그레이드한 뒤, 각 Worker 노드에서 kubelet과 kubectl을 교체합니다.
Kubernetes는 기능적/보안적인 이유로 주기적인 Cluster upgrade가 필연적입니다.
현재 버전인 1.32.*에서 1.33.* 버전으로 Upgrade가 목표이며 만일 1.35.* 같은 몇 단계 상위 버전 Upgrade를 계획하더라도 1.33, 1.34, 1.35 버전을 단계별로 순차 진행해야 되는 것은 동일합니다.
Master node가 이중화된 환경은 추가 과정이 있지만 과정 숙달을 목표로 메뉴얼을 기반하여 기본적인 순서로 진행해보겠습니다.
Master Node (Control Plane) 업그레이드
Control Plane 노드에서 kubeadm을 먼저 업그레이드하고, kubeadm upgrade plan으로 가능한 버전을 확인합니다. 이후 kubeadm upgrade apply로 API 서버, etcd, CoreDNS 등 핵심 컴포넌트를 일괄 업그레이드하고, kubelet/kubectl도 새 버전으로 교체합니다.
# 사용 명령어 echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg sudo apt update sudo apt-cache madison kubeadm sudo apt-mark unhold kubeadm && \ sudo apt-get update && sudo apt-get install -y kubeadm='1.33.7-*' && \ sudo apt-mark hold kubeadm kubeadm version sudo kubeadm upgrade plan sudo kubeadm upgrade apply v1.33.7 kubectl drain--ignore-daemonsets sudo apt-mark unhold kubelet kubectl && \ sudo apt-get update && sudo apt-get install -y kubelet='1.33.7-*' kubectl='1.33.7-*' && \ sudo apt-mark hold kubelet kubectl sudo systemctl daemon-reload sudo systemctl restart kubelet kubectl uncordon
# Log test@:~$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ / test@ :~$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg File '/etc/apt/keyrings/kubernetes-apt-keyring.gpg' exists. Overwrite? (y/N) y test@ :~$ sudo apt update Hit:1 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:4 https://download.docker.com/linux/ubuntu noble InRelease Hit:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Building dependency tree... Done Reading state information... Done 230 packages can be upgraded. Run 'apt list --upgradable' to see them. test@ :~$ sudo apt-cache madison kubeadm kubeadm | 1.33.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages test@ :~$ sudo apt-mark unhold kubeadm && \ > sudo apt-get update && sudo apt-get install -y kubeadm='1.33.7-*' && \ > sudo apt-mark hold kubeadm kubeadm was already not on hold. Hit:1 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:4 https://download.docker.com/linux/ubuntu noble InRelease Hit:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubeadm' The following packages will be upgraded: kubeadm 1 upgraded, 0 newly installed, 0 to remove and 229 not upgraded. Need to get 12.7 MB of archives. After this operation, 3,600 kB of additional disk space will be used. Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubeadm 1.33.7-1.1 [12.7 MB] Fetched 12.7 MB in 0s (33.8 MB/s) (Reading database ... 196041 files and directories currently installed.) Preparing to unpack .../kubeadm_1.33.7-1.1_amd64.deb ... Unpacking kubeadm (1.33.7-1.1) over (1.32.7-1.1) ... Setting up kubeadm (1.33.7-1.1) ... kubeadm set on hold. test@ :~$ kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"33", EmulationMajor:"", EmulationMinor:"", MinCompatibilityMajor:"", MinCompatibilityMinor:"", GitVersion:"v1.33.7", GitCommit:"a7245cdf3f69e11356c7e8f92b3e78ca4ee4e757", GitTreeState:"clean", BuildDate:"2025-12-09T14:41:01Z", GoVersion:"go1.24.11", Compiler:"gc", Platform:"linux/amd64"} test@ :~$ sudo 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-file' to re-upload it. [upgrade] Running cluster health checks [upgrade] Fetching available versions to upgrade to [upgrade/versions] Cluster version: 1.32.7 [upgrade/versions] kubeadm version: v1.33.7 I0113 17:54:44.730671 2116008 version.go:261] remote version is much newer: v1.35.0; falling back to: stable-1.33 [upgrade/versions] Target version: v1.33.7 [upgrade/versions] Latest version in the v1.32 series: v1.32.11 Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply': COMPONENT NODE CURRENT TARGET kubelet v1.32.7 v1.32.11 kubelet v1.32.7 v1.32.11 kubelet v1.32.7 v1.32.11 Upgrade to the latest version in the v1.32 series: COMPONENT NODE CURRENT TARGET kube-apiserver v1.32.7 v1.32.11 kube-controller-manager v1.32.7 v1.32.11 kube-scheduler v1.32.7 v1.32.11 kube-proxy 1.32.7 v1.32.11 CoreDNS v1.11.3 v1.12.0 etcd 3.5.16-0 3.5.24-0 You can now apply the upgrade by executing the following command: kubeadm upgrade apply v1.32.11 _____________________________________________________________________ Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply': COMPONENT NODE CURRENT TARGET kubelet v1.32.7 v1.33.7 kubelet v1.32.7 v1.33.7 kubelet v1.32.7 v1.33.7 Upgrade to the latest stable version: COMPONENT NODE CURRENT TARGET kube-apiserver v1.32.7 v1.33.7 kube-controller-manager v1.32.7 v1.33.7 kube-scheduler v1.32.7 v1.33.7 kube-proxy 1.32.7 v1.33.7 CoreDNS v1.11.3 v1.12.0 etcd 3.5.16-0 3.5.24-0 You can now apply the upgrade by executing the following command: kubeadm upgrade apply v1.33.7 _____________________________________________________________________ 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 _____________________________________________________________________ test@ :~$ sudo kubeadm upgrade apply v1.33.7 [upgrade] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"... [upgrade] Use 'kubeadm init phase upload-config --config your-config-file' to re-upload it. [upgrade/preflight] Running preflight checks [upgrade] Running cluster health checks [upgrade/preflight] You have chosen to upgrade the cluster version to "v1.33.7" [upgrade/versions] Cluster version: v1.32.7 [upgrade/versions] kubeadm version: v1.33.7 [upgrade] Are you sure you want to proceed? [y/N]: y [upgrade/preflight] Pulling images required for setting up a Kubernetes cluster [upgrade/preflight] This might take a minute or two, depending on the speed of your internet connection [upgrade/preflight] You can also perform this action beforehand using 'kubeadm config images pull' [upgrade/control-plane] Upgrading your static Pod-hosted control plane to version "v1.33.7" (timeout: 5m0s)... [upgrade/staticpods] Writing new Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests3418553132" [upgrade/staticpods] Preparing for "etcd" upgrade [upgrade/staticpods] Renewing etcd-server certificate [upgrade/staticpods] Renewing etcd-peer certificate [upgrade/staticpods] Renewing etcd-healthcheck-client certificate [upgrade/staticpods] Moving new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backing up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2026-01-13-17-57-46/etcd.yaml" [upgrade/staticpods] Waiting for the kubelet to restart the component [upgrade/staticpods] This can take up to 5m0s [apiclient] Found 1 Pods for label selector component=etcd [upgrade/staticpods] Component "etcd" upgraded successfully! [upgrade/etcd] Waiting for etcd to become available [upgrade/staticpods] Preparing for "kube-apiserver" upgrade [upgrade/staticpods] Renewing apiserver certificate [upgrade/staticpods] Renewing apiserver-kubelet-client certificate [upgrade/staticpods] Renewing front-proxy-client certificate [upgrade/staticpods] Renewing apiserver-etcd-client certificate [upgrade/staticpods] Moving new manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backing up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2026-01-13-17-57-46/kube-apiserver.yaml" [upgrade/staticpods] Waiting for the kubelet to restart the component [upgrade/staticpods] This can take up to 5m0s [apiclient] Found 1 Pods for label selector component=kube-apiserver [upgrade/staticpods] Component "kube-apiserver" upgraded successfully! [upgrade/staticpods] Preparing for "kube-controller-manager" upgrade [upgrade/staticpods] Renewing controller-manager.conf certificate [upgrade/staticpods] Moving new manifest to "/etc/kubernetes/manifests/kube-controller-manager.yaml" and backing up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2026-01-13-17-57-46/kube-controller-manager.yaml" [upgrade/staticpods] Waiting for the kubelet to restart the component [upgrade/staticpods] This can take up to 5m0s [apiclient] Found 1 Pods for label selector component=kube-controller-manager [upgrade/staticpods] Component "kube-controller-manager" upgraded successfully! [upgrade/staticpods] Preparing for "kube-scheduler" upgrade [upgrade/staticpods] Renewing scheduler.conf certificate [upgrade/staticpods] Moving new manifest to "/etc/kubernetes/manifests/kube-scheduler.yaml" and backing up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2026-01-13-17-57-46/kube-scheduler.yaml" [upgrade/staticpods] Waiting for the kubelet to restart the component [upgrade/staticpods] This can take up to 5m0s [apiclient] Found 1 Pods for label selector component=kube-scheduler [upgrade/staticpods] Component "kube-scheduler" upgraded successfully! [upgrade/control-plane] The control plane instance for this node was successfully upgraded! [upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace [kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster [upgrade/kubeconfig] The kubeconfig files for this node were successfully upgraded! W0113 18:01:48.219276 2117131 postupgrade.go:117] Using temporary directory /etc/kubernetes/tmp/kubeadm-kubelet-config1781268223 for kubelet config. To override it set the environment variable KUBEADM_UPGRADE_DRYRUN_DIR [upgrade] Backing up kubelet config file to /etc/kubernetes/tmp/kubeadm-kubelet-config1781268223/config.yaml [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [upgrade/kubelet-config] The kubelet configuration for this node was successfully upgraded! [upgrade/bootstrap-token] Configuring bootstrap token and cluster-info RBAC rules [bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes [bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials [bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token [bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy [upgrade] SUCCESS! A control plane node of your cluster was upgraded to "v1.33.7". [upgrade] Now please proceed with upgrading the rest of the nodes by following the right order. test@ :~$ kubectl drain --ignore-daemonsets node/ cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-km28t, kube-system/kube-proxy-ghl52 evicting pod kube-system/calico-kube-controllers-6d5bc68bd-vv654 pod/calico-kube-controllers-6d5bc68bd-vv654 evicted node/ drained test@ :~$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME Ready,SchedulingDisabled control-plane 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 test@ :~$ sudo apt-mark unhold kubelet kubectl && \ sudo apt-get update && sudo apt-get install -y kubelet='1.33.7-*' kubectl='1.33.7-*' && \ sudo apt-mark hold kubelet kubectl Canceled hold on kubelet. Canceled hold on kubectl. Hit:1 https://download.docker.com/linux/ubuntu noble InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:4 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Hit:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubelet' Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubectl' The following package was automatically installed and is no longer required: conntrack Use 'sudo apt autoremove' to remove it. The following packages will be upgraded: kubectl kubelet 2 upgraded, 0 newly installed, 0 to remove and 227 not upgraded. Need to get 27.6 MB of archives. After this operation, 7,115 kB of additional disk space will be used. Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubectl 1.33.7-1.1 [11.7 MB] Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubelet 1.33.7-1.1 [15.9 MB] Fetched 27.6 MB in 1s (51.6 MB/s) (Reading database ... 196041 files and directories currently installed.) Preparing to unpack .../kubectl_1.33.7-1.1_amd64.deb ... Unpacking kubectl (1.33.7-1.1) over (1.32.7-1.1) ... Preparing to unpack .../kubelet_1.33.7-1.1_amd64.deb ... Unpacking kubelet (1.33.7-1.1) over (1.32.7-1.1) ... Setting up kubectl (1.33.7-1.1) ... Setting up kubelet (1.33.7-1.1) ... kubelet set on hold. kubectl set on hold. test@ :~$ sudo systemctl daemon-reload test@ :~$ sudo systemctl restart kubelet test@ :~$ kubectl uncordon node/ uncordoned test@ :~$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME Ready control-plane 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3
Worker Node 업그레이드 (#1)
Worker 노드 업그레이드는 Control Plane에서 kubectl drain으로 해당 Worker 노드를 비운 뒤 진행합니다. Worker 노드에서 kubeadm/kubelet/kubectl을 새 버전으로 교체하고, kubelet 재시작 후 Control Plane에서 kubectl uncordon으로 복귀시킵니다. 노드가 여러 개인 경우 동일 절차를 반복합니다.
# 사용 명령어 echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg sudo apt update sudo apt-cache madison kubeadm sudo apt-mark unhold kubeadm && \ sudo apt-get update && sudo apt-get install -y kubeadm='1.33.7-*' && \ sudo apt-mark hold kubeadm kubeadm version kubectl drain\ --ignore-daemonsets \ --delete-emptydir-data \ --grace-period=60 \ --timeout=15m sudo apt-mark unhold kubelet kubectl && \ sudo apt-get update && sudo apt-get install -y kubelet='1.33.7-*' kubectl='1.33.7-*' && \ sudo apt-mark hold kubelet kubectl sudo systemctl daemon-reload sudo systemctl restart kubelet kubectl uncordon
# Log test@:~$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ / test@ :~$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg File '/etc/apt/keyrings/kubernetes-apt-keyring.gpg' exists. Overwrite? (y/N) y test@ :~$ sudo apt update Hit:1 https://download.docker.com/linux/ubuntu noble InRelease Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease [1,230 B] Get:3 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb Packages [11.3 kB] Hit:4 http://kr.archive.ubuntu.com/ubuntu noble InRelease Get:5 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB] Get:6 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB] Get:7 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Get:8 http://kr.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [1,693 kB] Get:9 http://kr.archive.ubuntu.com/ubuntu noble-updates/main Translation-en [313 kB] Get:10 http://kr.archive.ubuntu.com/ubuntu noble-updates/main amd64 Components [175 kB] Get:11 http://kr.archive.ubuntu.com/ubuntu noble-updates/main amd64 c-n-f Metadata [15.9 kB] Get:12 http://kr.archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [2,426 kB] Get:13 http://kr.archive.ubuntu.com/ubuntu noble-updates/restricted Translation-en [554 kB] Get:14 http://kr.archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Components [212 B] Get:15 http://kr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [1,510 kB] Get:16 http://kr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Components [377 kB] Get:17 http://kr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 c-n-f Metadata [31.4 kB] Get:18 http://kr.archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Components [940 B] Get:19 http://kr.archive.ubuntu.com/ubuntu noble-backports/main amd64 Components [7,300 B] Get:20 http://kr.archive.ubuntu.com/ubuntu noble-backports/restricted amd64 Components [216 B] Get:21 http://kr.archive.ubuntu.com/ubuntu noble-backports/universe amd64 Components [10.5 kB] Get:22 http://kr.archive.ubuntu.com/ubuntu noble-backports/multiverse amd64 Components [212 B] Get:23 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1,404 kB] Get:24 http://security.ubuntu.com/ubuntu noble-security/main Translation-en [228 kB] Get:25 http://security.ubuntu.com/ubuntu noble-security/main amd64 Components [21.5 kB] Get:26 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [2,302 kB] Get:27 http://security.ubuntu.com/ubuntu noble-security/restricted Translation-en [527 kB] Get:28 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Components [208 B] Get:29 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Components [71.4 kB] Get:30 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Components [208 B] Fetched 12.1 MB in 3s (3,513 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 241 packages can be upgraded. Run 'apt list --upgradable' to see them. test@ :~$ sudo apt-cache madison kubeadm kubeadm | 1.33.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages test@ :~$ sudo apt-mark unhold kubeadm && \ sudo apt-get update && sudo apt-get install -y kubeadm='1.33.7-*' && \ sudo apt-mark hold kubeadm Canceled hold on kubeadm. Hit:1 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:4 https://download.docker.com/linux/ubuntu noble InRelease Hit:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubeadm' The following packages will be upgraded: kubeadm 1 upgraded, 0 newly installed, 0 to remove and 240 not upgraded. Need to get 12.7 MB of archives. After this operation, 3,600 kB of additional disk space will be used. Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubeadm 1.33.7-1.1 [12.7 MB] Fetched 12.7 MB in 0s (28.4 MB/s) (Reading database ... 196036 files and directories currently installed.) Preparing to unpack .../kubeadm_1.33.7-1.1_amd64.deb ... Unpacking kubeadm (1.33.7-1.1) over (1.32.7-1.1) ... Setting up kubeadm (1.33.7-1.1) ... kubeadm set on hold. test@ :~$ kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"33", EmulationMajor:"", EmulationMinor:"", MinCompatibilityMajor:"", MinCompatibilityMinor:"", GitVersion:"v1.33.7", GitCommit:"a7245cdf3f69e11356c7e8f92b3e78ca4ee4e757", GitTreeState:"clean", BuildDate:"2025-12-09T14:41:01Z", GoVersion:"go1.24.11", Compiler:"gc", Platform:"linux/amd64"} test@ :~$ kubectl drain \ --ignore-daemonsets \ --delete-emptydir-data \ --grace-period=60 \ --timeout=15m node/ cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-fdff8, kube-system/kube-proxy-2rz9d evicting pod kube-system/coredns-674b8bbfcf-7jxkk pod/coredns-674b8bbfcf-7jxkk evicted node/ drained test@ :~$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME Ready control-plane 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready,SchedulingDisabled <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 test@ :~$ sudo apt-mark unhold kubelet kubectl && \ sudo apt-get update && sudo apt-get install -y kubelet='1.33.7-*' kubectl='1.33.7-*' && \ sudo apt-mark hold kubelet kubectl Canceled hold on kubelet. Canceled hold on kubectl. Hit:1 https://download.docker.com/linux/ubuntu noble InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:4 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:5 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubelet' Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubectl' The following package was automatically installed and is no longer required: conntrack Use 'sudo apt autoremove' to remove it. The following packages will be upgraded: kubectl kubelet 2 upgraded, 0 newly installed, 0 to remove and 238 not upgraded. Need to get 27.6 MB of archives. After this operation, 7,115 kB of additional disk space will be used. Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubectl 1.33.7-1.1 [11.7 MB] Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubelet 1.33.7-1.1 [15.9 MB] Fetched 27.6 MB in 1s (49.7 MB/s) (Reading database ... 196036 files and directories currently installed.) Preparing to unpack .../kubectl_1.33.7-1.1_amd64.deb ... Unpacking kubectl (1.33.7-1.1) over (1.32.7-1.1) ... Preparing to unpack .../kubelet_1.33.7-1.1_amd64.deb ... Unpacking kubelet (1.33.7-1.1) over (1.32.7-1.1) ... Setting up kubectl (1.33.7-1.1) ... Setting up kubelet (1.33.7-1.1) ... kubelet set on hold. kubectl set on hold. test@ :~$ sudo systemctl daemon-reload test@ :~$ sudo systemctl restart kubelet test@ :~$ dpkg -l | grep kube hi kubeadm 1.33.7-1.1 amd64 Command-line utility for administering a Kubernetes cluster hi kubectl 1.33.7-1.1 amd64 Command-line utility for interacting with a Kubernetes cluster hi kubelet 1.33.7-1.1 amd64 Node agent for Kubernetes clusters ii kubernetes-cni 1.6.0-1.1 amd64 Binaries required to provision kubernetes container networking test@ :~$ kubectl uncordon node/ uncordoned test@ :~$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME Ready control-plane 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3
Worker Node 업그레이드 (#2)
Worker 노드 #1과 동일한 절차를 Worker 노드 #2에 반복합니다. Control Plane에서 kubectl drain <worker-node-02>로 노드를 비우고, Worker 노드에서 kubeadm/kubelet/kubectl을 업그레이드한 뒤 kubectl uncordon으로 복귀시킵니다. 모든 Worker 노드 업그레이드 완료 후 kubectl get nodes -o wide로 전체 노드 버전이 동일한지 확인합니다.
# 사용 명령어 echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg sudo apt update sudo apt-cache madison kubeadm sudo apt-mark unhold kubeadm && \ sudo apt-get update && sudo apt-get install -y kubeadm='1.33.7-*' && \ sudo apt-mark hold kubeadm kubeadm version kubectl drain\ --ignore-daemonsets \ --delete-emptydir-data \ --grace-period=60 \ --timeout=15m sudo apt-mark unhold kubelet kubectl && \ sudo apt-get update && sudo apt-get install -y kubelet='1.33.7-*' kubectl='1.33.7-*' && \ sudo apt-mark hold kubelet kubectl sudo systemctl daemon-reload sudo systemctl restart kubelet kubectl uncordon
# Log test@:~$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ / test@ :~$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg File '/etc/apt/keyrings/kubernetes-apt-keyring.gpg' exists. Overwrite? (y/N) y test@ :~$ sudo apt update Hit:1 https://download.docker.com/linux/ubuntu noble InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble InRelease Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease [1,230 B] Get:4 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB] Get:5 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB] Get:6 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Get:7 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb Packages [11.3 kB] Get:8 http://kr.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [1,693 kB] Get:9 http://kr.archive.ubuntu.com/ubuntu noble-updates/main Translation-en [313 kB] Get:10 http://kr.archive.ubuntu.com/ubuntu noble-updates/main amd64 Components [175 kB] Get:11 http://kr.archive.ubuntu.com/ubuntu noble-updates/main amd64 c-n-f Metadata [15.9 kB] Get:12 http://kr.archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [2,426 kB] Get:13 http://kr.archive.ubuntu.com/ubuntu noble-updates/restricted Translation-en [554 kB] Get:14 http://kr.archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Components [212 B] Get:15 http://kr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [1,510 kB] Get:16 http://kr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Components [377 kB] Get:17 http://kr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 c-n-f Metadata [31.4 kB] Get:18 http://kr.archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Components [940 B] Get:19 http://kr.archive.ubuntu.com/ubuntu noble-backports/main amd64 Components [7,300 B] Get:20 http://kr.archive.ubuntu.com/ubuntu noble-backports/restricted amd64 Components [216 B] Get:21 http://kr.archive.ubuntu.com/ubuntu noble-backports/universe amd64 Components [10.5 kB] Get:22 http://kr.archive.ubuntu.com/ubuntu noble-backports/multiverse amd64 Components [212 B] Get:23 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1,404 kB] Get:24 http://security.ubuntu.com/ubuntu noble-security/main Translation-en [228 kB] Get:25 http://security.ubuntu.com/ubuntu noble-security/main amd64 Components [21.5 kB] Get:26 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [2,302 kB] Get:27 http://security.ubuntu.com/ubuntu noble-security/restricted Translation-en [527 kB] Get:28 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Components [208 B] Get:29 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Components [71.4 kB] Get:30 http://security.ubuntu.com/ubuntu noble-security/universe amd64 c-n-f Metadata [19.7 kB] Get:31 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Components [208 B] Fetched 12.1 MB in 4s (3,410 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 229 packages can be upgraded. Run 'apt list --upgradable' to see them. test@ :~$ sudo apt-cache madison kubeadm kubeadm | 1.33.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages kubeadm | 1.33.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.33/deb Packages test@ :~$ sudo apt-mark unhold kubeadm && \ sudo apt-get update && sudo apt-get install -y kubeadm='1.33.7-*' && \ sudo apt-mark hold kubeadm Canceled hold on kubeadm. Hit:1 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:4 https://download.docker.com/linux/ubuntu noble InRelease Hit:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubeadm' The following packages will be upgraded: kubeadm 1 upgraded, 0 newly installed, 0 to remove and 228 not upgraded. Need to get 12.7 MB of archives. After this operation, 3,600 kB of additional disk space will be used. Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubeadm 1.33.7-1.1 [12.7 MB] Fetched 12.7 MB in 1s (23.5 MB/s) (Reading database ... 196021 files and directories currently installed.) Preparing to unpack .../kubeadm_1.33.7-1.1_amd64.deb ... Unpacking kubeadm (1.33.7-1.1) over (1.32.7-1.1) ... Setting up kubeadm (1.33.7-1.1) ... kubeadm set on hold. test@ :~$ kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"33", EmulationMajor:"", EmulationMinor:"", MinCompatibilityMajor:"", MinCompatibilityMinor:"", GitVersion:"v1.33.7", GitCommit:"a7245cdf3f69e11356c7e8f92b3e78ca4ee4e757", GitTreeState:"clean", BuildDate:"2025-12-09T14:41:01Z", GoVersion:"go1.24.11", Compiler:"gc", Platform:"linux/amd64"} test@ :~$ kubectl drain \ --ignore-daemonsets \ --delete-emptydir-data \ --grace-period=60 \ --timeout=15m node/ cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-drhtt, kube-system/kube-proxy-hpkd8 evicting pod kube-system/coredns-674b8bbfcf-f6txf evicting pod kube-system/calico-kube-controllers-6d5bc68bd-7mppz pod/calico-kube-controllers-6d5bc68bd-7mppz evicted pod/coredns-674b8bbfcf-f6txf evicted node/ drained test@ :~$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME Ready control-plane 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready,SchedulingDisabled <none> 166d v1.32.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 test@ :~$ sudo apt-mark unhold kubelet kubectl && \ sudo apt-get update && sudo apt-get install -y kubelet='1.33.7-*' kubectl='1.33.7-*' && \ sudo apt-mark hold kubelet kubectl Canceled hold on kubelet. Canceled hold on kubectl. Hit:1 http://kr.archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:4 https://download.docker.com/linux/ubuntu noble InRelease Hit:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb InRelease Hit:6 http://security.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubelet' Selected version '1.33.7-1.1' (isv:kubernetes:core:stable:v1.33:pkgs.k8s.io [amd64]) for 'kubectl' The following package was automatically installed and is no longer required: conntrack Use 'sudo apt autoremove' to remove it. The following packages will be upgraded: kubectl kubelet 2 upgraded, 0 newly installed, 0 to remove and 226 not upgraded. Need to get 27.6 MB of archives. After this operation, 7,115 kB of additional disk space will be used. Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubectl 1.33.7-1.1 [11.7 MB] Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.33/deb kubelet 1.33.7-1.1 [15.9 MB] Fetched 27.6 MB in 1s (47.2 MB/s) (Reading database ... 196021 files and directories currently installed.) Preparing to unpack .../kubectl_1.33.7-1.1_amd64.deb ... Unpacking kubectl (1.33.7-1.1) over (1.32.7-1.1) ... Preparing to unpack .../kubelet_1.33.7-1.1_amd64.deb ... Unpacking kubelet (1.33.7-1.1) over (1.32.7-1.1) ... Setting up kubectl (1.33.7-1.1) ... Setting up kubelet (1.33.7-1.1) ... kubelet set on hold. kubectl set on hold. test@ :~$ sudo systemctl daemon-reload test@ :~$ sudo systemctl restart kubelet test@ :~$ dpkg -l | grep kube hi kubeadm 1.33.7-1.1 amd64 Command-line utility for administering a Kubernetes cluster hi kubectl 1.33.7-1.1 amd64 Command-line utility for interacting with a Kubernetes cluster hi kubelet 1.33.7-1.1 amd64 Node agent for Kubernetes clusters ii kubernetes-cni 1.6.0-1.1 amd64 Binaries required to provision kubernetes container networking test@ :~$ kubectl uncordon node/ uncordoned test@ :~$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME Ready control-plane 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3 Ready <none> 166d v1.33.7 x.x.x.x <none> Ubuntu 24.04.2 LTS 6.14.0-37-generic docker://28.3.3
업그레이드 주의사항
Kubernetes 클러스터 업그레이드 시 주의해야 할 사항을 정리합니다.
- 버전 건너뛰기 불가 — minor 버전은 반드시 한 단계씩 업그레이드해야 합니다. 예를 들어 1.31 → 1.33으로 직접 업그레이드할 수 없습니다.
- etcd 백업 선행 — Control Plane 업그레이드 전 etcd 스냅샷을 백업해 두면 문제 발생 시 롤백이 가능합니다.
- drain 전 PodDisruptionBudget 확인 —
kubectl drain시 PDB(PodDisruptionBudget)에 의해 eviction이 차단될 수 있습니다.--delete-emptydir-data와--grace-period옵션을 적절히 설정합니다. - CNI 플러그인 호환성 확인 — Calico, Flannel 등 CNI 플러그인이 업그레이드 대상 Kubernetes 버전과 호환되는지 릴리스 노트를 미리 확인합니다.
- HA 클러스터 — master 노드가 여러 개인 경우 한 번에 하나씩 업그레이드하며, 각 master 업그레이드 후 etcd quorum이 유지되는지 확인합니다.
참고
관련 포스트:
참고 문서: kubeadm upgrade 공식 문서 (kubernetes.io) · Kubernetes 패키지 저장소 변경 가이드