developerworks/K8s

2장. k8s (kubeadm 클러스터) 업그레이드

수상한 김토끼 2024. 3. 5. 16:51

안녕하세요.

'수상한 김토끼' 입니다.

이번 장에서는 1장에서 만들었던 k8s 환경을 업그레이드하는 과정을 알아가는 시간을 갖도록 하겠습니다.

 

이번 장 진행에 참고한 k8s 공식 문서입니다.

https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

 

kubeadm 클러스터 업그레이드

이 페이지는 kubeadm으로 생성된 쿠버네티스 클러스터를 1.28.x 버전에서 1.29.x 버전으로, 1.29.x 버전에서 1.29.y(여기서 y > x) 버전으로 업그레이드하는 방법을 설명한다. 업그레이드가 지원되지 않는

kubernetes.io

진행에 문제가 있거나 추가적인 내용은 위 문서를 참조해 주세요.

 

이 블로그 글은 미들웨어 경험이 없으신 분들도 쉽게 따라 하실 수 있도록 쉽게 작성하는 것이 목표입니다.

설명을 보고 진행하시다가 궁금하신 내용은 댓글로 문의하시면 가능한 범위 내에서 알려 드리도록 하겠습니다.


1. 버전 확인 및 업그레이드할 버전 결정

우선 1-1장. k8s 저장소 변경내역 업데이트를 참조하여 K8s 저장소 패키지 변경 후 아래 내용을 진행해 주세요.

기존 구글 저장소를 활용하는 경우 v1.28.2 버전이상은 설치가 불가능하며 v1.28.3 및 그 이상(ex. v1.29.x)을 설치하기 위해서는 저장소 변경이 필요합니다.

 

현재 kubeadm 버전을 확인하고 업그레이드할 버전을 결정합니다.

$ kubeadm version

 

확인결과 1.28.2 버전을 사용 중인 상태입니다.

1
2
kami@k8s-master:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", GitCommit:"89a4ea3e1e4ddd7f7572286090359983e0387b2f", GitTreeState:"clean", BuildDate:"2023-09-13T09:34:32Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}
cs

 

업그레이드할 버전을 확인하고 결정하기 위해 OS (예제에서는 Ubuntu) 패키지 관리자를 사용하여 최신 패치 버전을 찾아줍니다.

$ apt update
$ apt-cache madison kubeadm
# 목록에서 최신 버전(1.28)을 찾는다
# 1.28.x-00과 같아야 한다. 여기서 x는 최신 패치이다.

 

작성일 기준으로 확인결과 아래와 같이 1.28.7-1.1이 사용가능합니다.

1
2
3
4
5
6
7
8
9
root@k8s-master:~# apt-cache madison kubeadm
   kubeadm | 1.28.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
   kubeadm | 1.28.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.28/deb  Packages
cs

 

이번 포스팅에서는 1.28.7-1.1로 업그레이드를 진행하도록 하겠습니다.


2. 컨트롤 노드 업그레이드

다음 명령어를 사용하여 kubeadm 업그레이드를 수행합니다.

# 1.28.x-1.1에서 x를 최신 패치 버전으로 바꾼다.
 apt-mark unhold kubeadm && \
 apt-get update && apt-get install -y kubeadm=1.28.7-1.1 && \
 apt-mark hold kubeadm

kubeadm=1.28.7-1.1 부분에 업그레이드를 하고자 하는 버전을 작성해 주시면 됩니다.

 

수행결과 아래와 같이 설치가 완료되는 것을 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
root@k8s-master:~#  apt-mark unhold kubeadm && \
>  apt-get update && apt-get install -y kubeadm=1.28.7-1.1 && \
>  apt-mark hold kubeadm
Hit:1 https://download.docker.com/linux/ubuntu focal InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  InRelease
Hit:4 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:5 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:6 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  kubeadm
1 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 10.0 MB of archives.
After this operation, 2,568 kB disk space will be freed.
Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  kubeadm 1.28.7-1.1 [10.0 MB]
Fetched 10.0 MB in 5s (1,832 kB/s)
(Reading database ... 109176 files and directories currently installed.)
Preparing to unpack .../kubeadm_1.28.7-1.1_amd64.deb ...
Unpacking kubeadm (1.28.7-1.1) over (1.28.2-00) ...
dpkg: warning: unable to delete old directory '/etc/systemd/system/kubelet.service.d': Directory not empty
Setting up kubeadm (1.28.7-1.1) ...
kubeadm set on hold.
cs

 

다음 명령으로 업그레이드하려는 버전이 잘 받아졌는지 확인해 줍니다.

kubeadm version

 

수행결과 정상적으로 다운로드된 것이 확인됩니다.

1
2
root@k8s-master:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.7", GitCommit:"c8dcb00be9961ec36d141d2e4103f85f92bcf291", GitTreeState:"clean", BuildDate:"2024-02-14T10:39:01Z", GoVersion:"go1.21.7", Compiler:"gc", Platform:"linux/amd64"}
cs

 

다음 명령으로 업그레이드 계획을 확인해 줍니다.

kubeadm upgrade plan

 

아래와 같은 결과가 나오면 성공입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
root@k8s-master:~# kubeadm upgrade plan
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[preflight] Running pre-flight checks.
[upgrade] Running cluster health checks
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.28.2
[upgrade/versions] kubeadm version: v1.28.7
I0305 07:11:41.787882    4910 version.go:256] remote version is much newer: v1.29.2; falling back to: stable-1.28
[upgrade/versions] Target version: v1.28.7
[upgrade/versions] Latest version in the v1.28 series: v1.28.7
 
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       TARGET
kubelet     3 x v1.28.2   v1.28.7
 
Upgrade to the latest version in the v1.28 series:
 
COMPONENT                 CURRENT   TARGET
kube-apiserver            v1.28.2   v1.28.7
kube-controller-manager   v1.28.2   v1.28.7
kube-scheduler            v1.28.2   v1.28.7
kube-proxy                v1.28.2   v1.28.7
CoreDNS                   v1.10.1   v1.10.1
etcd                      3.5.9-0   3.5.10-0
 
You can now apply the upgrade by executing the following command:
 
        kubeadm upgrade apply v1.28.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
_____________________________________________________________________
cs

로그에 표시된 것처럼 kubeadm upgrade apply v1.28.7 명령을 입력하여 업그레이드를 진행합니다.

kubeadm upgrade apply v1.28.7

 

아래와 같이 업그레이드가 완료되었습니다.

중간에 '[upgrade] Are you sure you want to proceed? [y/N]' 항목에서 y를 입력해야 설치가 진행됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
root@k8s-master:~# kubeadm upgrade apply v1.28.7
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[preflight] Running pre-flight checks.
[upgrade] Running cluster health checks
[upgrade/version] You have chosen to change the cluster version to "v1.28.7"
[upgrade/versions] Cluster version: v1.28.2
[upgrade/versions] kubeadm version: v1.28.7
[upgrade] Are you sure you want to proceed? [y/N]: y
[upgrade/prepull] Pulling images required for setting up a Kubernetes cluster
[upgrade/prepull] This might take a minute or two, depending on the speed of your internet connection
[upgrade/prepull] You can also perform this action in beforehand using 'kubeadm config images pull'
W0305 07:15:20.916901    4966 checks.go:835] detected that the sandbox image "registry.k8s.io/pause:3.6" of the container runtime is inconsistent with that used by kubeadm. It is recommended that using "registry.k8s.io/pause:3.9" as the CRI sandbox image.
[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.28.7" (timeout: 5m0s)...
[upgrade/etcd] Upgrading to TLS for etcd
[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] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2024-03-05-07-15-40/etcd.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 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] Writing new Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests595102317"
[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] Moved new manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2024-03-05-07-15-40/kube-apiserver.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 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] Moved new manifest to "/etc/kubernetes/manifests/kube-controller-manager.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2024-03-05-07-15-40/kube-controller-manager.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 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] Moved new manifest to "/etc/kubernetes/manifests/kube-scheduler.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2024-03-05-07-15-40/kube-scheduler.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 5m0s)
[apiclient] Found 1 Pods for label selector component=kube-scheduler
[upgrade/staticpods] Component "kube-scheduler" upgraded successfully!
[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] Backing up kubelet config file to /etc/kubernetes/tmp/kubeadm-kubelet-config3614048453/config.yaml
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[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/successful] SUCCESS! Your cluster was upgraded to "v1.28.7". Enjoy!
 
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
cs

 

로그 아래 Success! 부분을 참조하시면 정상적으로 설치되었는지 확인하실 수 있습니다.

 

kubeadm에 이어 kubelet과 kubectl도 아래와 같은 명령으로 업그레이드를 진행해 줍니다.

# 1.28.x-1.1의 x를 최신 패치 버전으로 바꾼다
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.28.7-1.1 kubectl=1.28.7-1.1 && \
apt-mark hold kubelet kubectl

 

수행결과는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
root@k8s-master:~# apt-mark unhold kubelet kubectl && \
> apt-get update && apt-get install -y kubelet=1.28.7-1.1 kubectl=1.28.7-1.1 && \
> apt-mark hold kubelet kubectl
Canceled hold on kubelet.
Canceled hold on kubectl.
Hit:1 https://download.docker.com/linux/ubuntu focal InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  InRelease
Get:4 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Hit:5 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:6 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease
Get:7 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1,171 kB]
Get:8 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [280 kB]
Fetched 1,565 kB in 3s (517 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  kubectl kubelet
2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 29.8 MB of archives.
After this operation, 1,548 kB disk space will be freed.
Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  kubectl 1.28.7-1.1 [10.3 MB]
Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  kubelet 1.28.7-1.1 [19.5 MB]
Fetched 29.8 MB in 4s (7,668 kB/s)
(Reading database ... 109180 files and directories currently installed.)
Preparing to unpack .../kubectl_1.28.7-1.1_amd64.deb ...
Unpacking kubectl (1.28.7-1.1) over (1.28.2-00) ...
Preparing to unpack .../kubelet_1.28.7-1.1_amd64.deb ...
Unpacking kubelet (1.28.7-1.1) over (1.28.2-00) ...
Setting up kubectl (1.28.7-1.1) ...
Setting up kubelet (1.28.7-1.1) ...
kubelet set on hold.
kubectl set on hold.
cs

 

업그레이드가 완료되었으므로 다음 명령으로 kubelet을 다시 시작해 줍니다.

sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

kubelet 다시 시작 후 kubectl get no 명령으로 현재 상태를 확인해 봅니다.

1
2
3
4
5
6
7
root@k8s-master:~# sudo systemctl daemon-reload
root@k8s-master:~# sudo systemctl restart kubelet
root@k8s-master:~# kubectl get no
NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   333d   v1.28.7
k8s-node1    Ready    <none>          333d   v1.28.2
k8s-node2    Ready    <none>          333d   v1.28.2
cs

 

k8s-master 노드의 버전이 v1.28.7로 업그레이드된 것을 확인할 수 있습니다.


3. 워커 노드 업그레이드

컨트롤 노드 업그레이드와 같은 버전을 사용하여 다음 명령을 수행하여 워크 노드 업그레이드를 진행해 줍니다.

# 1.28.x-1.1의 x를 최신 패치 버전으로 바꾼다
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.28.7-1.1 && \
apt-mark hold kubeadm

 

아래와 같이 수행이 완료되었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
root@k8s-node1:~# apt-mark unhold kubeadm && \
> apt-get update && apt-get install -y kubeadm=1.28.7-1.1 && \
> apt-mark hold kubeadm
Canceled hold on kubeadm.
Hit:1 https://download.docker.com/linux/ubuntu focal InRelease
Hit:2 http://kr.archive.ubuntu.com/ubuntu focal InRelease
Get:3 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Hit:5 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease
Get:6 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:7 http://kr.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [3,129 kB]
Get:8 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1,171 kB]
Get:9 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [280 kB]
Get:10 http://kr.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [2,752 kB]
Get:11 http://kr.archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [946 kB]
Get:12 http://kr.archive.ubuntu.com/ubuntu focal-security/universe Translation-en [198 kB]
Hit:4 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  InRelease
Fetched 8,704 kB in 6s (1,560 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  kubeadm
1 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 10.0 MB of archives.
After this operation, 2,568 kB disk space will be freed.
Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  kubeadm 1.28.7-1.1 [10.0 MB]
Fetched 10.0 MB in 1s (7,448 kB/s)
(Reading database ... 109176 files and directories currently installed.)
Preparing to unpack .../kubeadm_1.28.7-1.1_amd64.deb ...
Unpacking kubeadm (1.28.7-1.1) over (1.28.2-00) ...
dpkg: warning: unable to delete old directory '/etc/systemd/system/kubelet.service.d': Directory not empty
Setting up kubeadm (1.28.7-1.1) ...
kubeadm set on hold.
cs

 

다음 명령을 사용하여 kubelet과 kubectl 업그레이드를 진행합니다.

# 1.28.x-1.1의 x를 최신 패치 버전으로 바꾼다
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.28.7-1.1 kubectl=1.28.7-1.1 && \
apt-mark hold kubelet kubectl

 

아래와 같이 수행이 완료되었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@k8s-node1:~# apt-mark unhold kubelet kubectl && \
> apt-get update && apt-get install -y kubelet=1.28.7-1.1 kubectl=1.28.7-1.1 && \
> apt-mark hold kubelet kubectl
Canceled hold on kubelet.
Canceled hold on kubectl.
Hit:1 https://download.docker.com/linux/ubuntu focal InRelease
Hit:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu focal InRelease
Hit:4 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:5 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:6 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  kubectl kubelet
2 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 29.8 MB of archives.
After this operation, 1,548 kB disk space will be freed.
Get:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  kubectl 1.28.7-1.1 [10.3 MB]
Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  kubelet 1.28.7-1.1 [19.5 MB]
Fetched 29.8 MB in 3s (9,344 kB/s)
(Reading database ... 109180 files and directories currently installed.)
Preparing to unpack .../kubectl_1.28.7-1.1_amd64.deb ...
Unpacking kubectl (1.28.7-1.1) over (1.28.2-00) ...
Preparing to unpack .../kubelet_1.28.7-1.1_amd64.deb ...
Unpacking kubelet (1.28.7-1.1) over (1.28.2-00) ...
Setting up kubectl (1.28.7-1.1) ...
Setting up kubelet (1.28.7-1.1) ...
kubelet set on hold.
kubectl set on hold.
cs

 

컨트롤 노드와 동일하게 다음 명령을 실행하여 kubelet을 다시 시작해 줍니다.

sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

컨트롤 노드에서 kubectl get no 명령으로 업그레이드를 진행한 워커노드의 버전을 확인해 줍니다.

1
2
3
4
5
root@k8s-master:~# kubectl get no
NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   333d   v1.28.7
k8s-node1    Ready    <none>          333d   v1.28.7
k8s-node2    Ready    <none>          333d   v1.28.2
cs

 

k8s-node1 워커 노드도 v1.28.7로 업그레이드 된 것을 확인할 수 있습니다.

 

나머지 노드들도 같은 방법으로 업그레이드를 진행해 주시면 전체 노드에 대한 업그레이드가 완료됩니다.

 

k8s 마이너 버전 업그레이드는 이것으로 마무리하고 다음 장에서는 메이저 버전(v1.28.7 --> v1.29.1) 업그레이드에 대해 포스팅해 보겠습니다.