[K8S] kubeadm 업그레이드 하는 방법

HYEOB KIM·2022년 7월 11일
2

kubernetes

목록 보기
8/14

쿠버네티스 클러스터 업그레이드

  • kubeadm, kubelet, kubectl을 1.22.4에서 1.23.3 버전으로 업그레이드하기

Master node 업그레이드

kubernetes 공식 문서 - kubeadm upgrade를 참고하세요.

% kubectl config use-context hk8s
Switched to context "hk8s".

% kubectl get nodes
NAME      STATUS     ROLES                  AGE    VERSION
hk8s-m    Ready      control-plane,master   167d   v1.22.4
hk8s-w1   Ready      <none>                 167d   v1.22.4
hk8s-w2   NotReady   <none>                 158d   v1.22.4

OS를 확인합니다.

% sudo cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

이제부터 OS에 맞는 명령어로 명령을 수행합니다.
(저는 CentOS이므로 yum 명령을 사용합니다)

쿠버네티스의 가장 최근 패치 버전에 대한 리스트를 불러옵니다.

% sudo yum list --showduplicates kubeadm --disableexcludes=kubernetes
...
kubeadm.x86_64                                                                                      1.21.4-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.21.5-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.21.6-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.21.7-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.21.8-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.21.9-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.0-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.1-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.2-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.3-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.4-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.5-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.22.6-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.23.0-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.23.1-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.23.2-0                                                                                       kubernetes
kubeadm.x86_64                                                                                      1.23.3-0                                                                                       kubernetes

불러온 리스트의 제일 마지막 줄의 버전을 이용해 업그레이드를 진행합니다.

% sudo yum install -y kubeadm-1.23.3-0 --disableexcludes=kubernetes

kubeadm 버전을 확인합니다. GitVersion의 값을 확인합니다.

% kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:24:08Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"linux/amd64"}

업그레이드 계획을 확인합니다.
(Master node에서만 실행하는 내용입니다)

% sudo kubeadm upgrade plan v1.23.3

업그레이드를 적용합니다.
(Master node에서만 실행하는 내용입니다)

% sudo kubeadm upgrade apply v1.23.3
...
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.23.3". Enjoy!

[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

노드를 드레인합니다. kubeletkubectl을 업그레이드하기 위해서 Master node에 작동하고 있는 파드들을 드레인 명령으로 싹 비워줍니다.

% sudo kubectl drain hk8s-m --ignore-daemonsets

kubeletkubectl를 업그레이드합니다.

% sudo yum install -y kubelet-1.23.3-0 kubectl-1.23.3-0 --disableexcludes=kubernetes

kubelet을 재시작합니다.

% sudo systemctl daemon-reload
% sudo systemctl restart kubelet

uncordon 명령을 실행해 중단시켰던 Master node의 파드들을 다시 실행시킵니다.

% kubectl uncordon hk8s-m
node/hk8s-m uncordoned

Master node가 업그레이드 되었는지 확인합니다.

% kubectl get nodes
NAME      STATUS     ROLES                  AGE    VERSION
hk8s-m    Ready      control-plane,master   167d   v1.23.3
hk8s-w1   Ready      <none>                 167d   v1.22.4
hk8s-w2   NotReady   <none>                 158d   v1.22.4

worker node 업그레이드

hk8s-w1 워커 노드로 접속합니다.

% ssh hk8s-w1

최신 버전의 kubeadm을 설치합니다.

% sudo yum install -y kubeadm-1.23.3-0 --disableexcludes=kubernetes

노드를 업그레이드합니다.

% sudo kubeadm upgrade node
...
[upgrade] The configuration for this node was successfully updated!
[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.

노드를 드레인합니다. kubeletkubectl을 업그레이드하기 위해서 worker node드레인 명령으로 스케줄링이 불가능하도록 중단합니다.

% sudo kubectl drain hk8s-w1 --ignore-daemonsets

hk8s-w1의 노드가 SchedulingDisabled인 상태인 것으로 보아 드레인이 정상적으로 이루어졌습니다.

% sudo kubectl get nodes
NAME      STATUS                     ROLES                  AGE    VERSION
hk8s-m    Ready                      control-plane,master   167d   v1.23.3
hk8s-w1   Ready,SchedulingDisabled   <none>                 167d   v1.22.4
hk8s-w2   NotReady                   <none>                 158d   v1.22.4

kubeletkubectl를 업그레이드합니다.

% sudo yum install -y kubelet-1.23.3-0 kubectl-1.23.3-0 --disableexcludes=kubernetes

kubelet을 재시작합니다.

% sudo systemctl daemon-reload
% sudo systemctl restart kubelet

uncordon 명령을 실행해 중단시켰던 worker node를 다시 스케줄링이 가능한 온라인 상태로 만듭니다.

% $ sudo kubectl uncordon hk8s-w1
node/hk8s-w1 uncordoned

worker node가 업그레이드 되었는지 확인합니다.

% sudo kubectl get nodes
NAME      STATUS     ROLES                  AGE    VERSION
hk8s-m    Ready      control-plane,master   167d   v1.23.3
hk8s-w1   Ready      <none>                 167d   v1.23.3
hk8s-w2   NotReady   <none>                 158d   v1.22.4

CKA 시험 유형

  • 작업 클러스터: k8s
    마스터 노드의 모든 Kubernetes control plane및 node 구성 요소를 버전 1.23.3으로 업그레이드합니다. 마스터 노드를 업그레이드하기 전에 드레인하고 업그레이드 후에 uncordon해야 합니다.
profile
Devops Engineer

0개의 댓글