본문 바로가기
쿠버네티스/CKA 자격증

[쿠버네티스] CKA 기출 자료_2 [클러스터 업그레이드, 백업] | 데인트리 라이브러리

by 데인트리 2021. 6. 26.

 

 

이 페이지에서는 기출 문제 중 클러스터 업그레이드, 백업 관련 문제를 다룬다.

 

 

 

1. 클러스터 업그레이드

문서 링크: https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

 

문서의 내용을 따라하면 크게 어렵지 않은 문제이다.

업그레이드 순서는 다음의 순서대로 진행한다.

 

1) 마스터 노드 drain

2) 마스터 노드의 kubeadm 업그레이드

3) 마스터 노드의 kubectl, kubelet 업그레이드

4) 마스터 노드 uncordon

5) 워커 노드 drain

6) 워커 노드의 kubeadm 업그레이드

7) 워커 노드의 kubectl, kubelet 업그레이드(kubectl이 없을 경우 kubelet만 업그레이드)

8) 워커 노드 uncordon

 

단계가 많아 보이지만 규칙을 이해하면 크게 복잡하지는 않다.

 

먼저 마스터 노드를 업그레이드 한 후 워커 노드를 업그레이드한다.

모든 노드는 업그레이드 전 drain, 업그레이드 후 uncordon을 실행한다.

 

kubectl drian {노드명} 명령은 노드에서 실행 중인 파드를 다른 노드로 옮기고 새로운 파드의 스케줄링을 막는다. 업그레이드 중인 노드 내부에는 데몬셋을 제외한 파드가 없어야 하고 새로운 파드 생성 시 업그레이드 중인 노드에 스케줄링이 되면 안되기 때문에 업그레이드 전 해당 명령을 수행해야 한다.

 

이후 노드의 kubeadm을 먼저 업그레이드 한 후, kubelet과 kubectl을 업그레이드 한다. kubectl은 단순 클라이언트 도구이기 때문에 워커 노드에 없는 경우도 있다. 이 경우 kubelet만 업그레이드 한다.

 

업그레이드가 종료되면 kubectl uncordon {노드명} 명령을 통해 해당 노드의 스케줄링을 다시 허가한다. 해당 명령은 단순히 스케줄링만 허가하기 때문에, drain시 다른 노드로 배치되었던 파드가 다시 돌아오지는 않는다. 

 

 

[실습]

 

1. 노드 상태 확인

먼저 현재 노드의 상태를 확인한다. (출력은 시험 환경과 차이가 있다.)

controlplane $ kubectl get no
NAME           STATUS   ROLES    AGE   VERSION
controlplane   Ready    master   11m   v1.18.0
node01         Ready    <none>   10m   v1.18.0

 

마스터 노드 1대, 워커 노드 1대로 구성된 클러스터이다. 먼저 마스터 노드를 업그레이드 한 후 워커노드를 업그레이드 한다.

 

 

2. 마스터 노드 drain

controlplane $ kubectl drain controlplane --ignore-daemonsets 
node/controlplane already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-c9h4z, kube-system/kube-keepalived-vip-46r8b, kube-system/kube-proxy-9z5fn
evicting pod kube-system/coredns-66bff467f8-7j9ss
evicting pod kube-system/coredns-66bff467f8-h5wjg
pod/coredns-66bff467f8-7j9ss evicted
pod/coredns-66bff467f8-h5wjg evicted
node/controlplane evicted

 

마스터 노드를 drain한다. --ignore-daemonsets 옵션을 통해 데몬셋 제외 한 파드를 다른 노드에 배치한다.

 

 

3. 마스터 노드의 kubeadm 업그레이드

#현재 버전 확인
controlplane $ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:56:30Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

#apt 업그레이드 수행
controlplane $ apt update
	...

#업그레이드 가능한 kubeadm 버전 확인
controlplane $ apt-cache madison kubeadm
   kubeadm |  1.19.4-00 | http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.19.3-00 | http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.19.2-00 | http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.19.1-00 | http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.19.0-00 | http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   ...

#kubeadm 업그레이드
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.19.0-00 && \
apt-mark hold kubeadm

#업그레이드 된 kubeadm 버전 확인
kubeadm version: &version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:28:32Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}

#컴포넌트 업그레이드 가능 버전 확인
kubeadm upgrade plan
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
kubelet     2 x v1.18.0   v1.19.12

Upgrade to the latest stable version:

COMPONENT                 CURRENT   AVAILABLE
kube-apiserver            v1.18.0   v1.19.12
kube-controller-manager   v1.18.0   v1.19.12
kube-scheduler            v1.18.0   v1.19.12
kube-proxy                v1.18.0   v1.19.12
CoreDNS                   1.6.7     1.7.0
etcd                      3.4.3-0   3.4.9-1

#업그레이드 진행
kubeadm upgrade apply v1.19.0
[upgrade/version] You have chosen to change the cluster version to "v1.19.0"
[upgrade/versions] Cluster version: v1.18.0
[upgrade/versions] kubeadm version: v1.19.0
[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y
...
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.0". Enjoy!

kubeadm은 쿠버네티스 클러스터를 관리하는 관리 도구이다. kubeadm을 먼저 업그레이드 한 후 kubeadm upgrade plan 명령을 실행하면 업그레이드 가능한 쿠버네티스 버전과 각 컴포넌트들의 버전을 확인할 수 있다. 이후 kubeadm upgrade apply를 적용하여 업그레이드를 진행한다.

 

 

4. 마스터 노드의 kubelet, kubectl 업그레이드

#kubelet, kubectl 업그레이드
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.19.0-00 kubectl=1.19.0-00 && \
apt-mark hold kubelet kubectl

#kubelet 재시작
sudo systemctl daemon-reload
sudo systemctl restart kubelet

#kubelet, kubectl 버전 확인
controlplane $ kubelet --version
Kubernetes v1.19.0
controlplane $ kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:23:04Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}

 

5. 마스터 노드 uncordon

controlplane $ kubectl uncordon controlplane 
node/controlplane uncordoned

 

6. 워커 노드 접속 및 kubeadm 업그레이드

#노드 확인
controlplane $ kubectl get no
NAME           STATUS   ROLES    AGE     VERSION
controlplane   Ready    master   8m49s   v1.19.0
node01         Ready    <none>   8m22s   v1.18.0

#업그레이드 할 노드 drain
kubectl drain node01 --ignore-daemonsets
node/node01 evicted

#노드 접속
controlplane $ ssh node01

#노드의 kubeadm 버전 확인
node01 $ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:56:30Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

#kubeadm 업그레이드
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.19.0-00 && \
apt-mark hold kubeadm

#노드 업그레이드
kubeadm upgrade node
...
[upgrade] The configuration for this node was successfully updated!

 

7. kubelet 및 kubectl 업그레이드

#kubelet 및 kubectl 업그레이드
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.19.0-00 kubectl=1.19.0-00 && \
apt-mark hold kubelet kubectl

#kubelet 재시작
systemctl daemon-reload
systemctl restart kubelet

 

8. 노드 uncordon 및 노드 업그레이드 상태 확인

node01 $ exit
logout
Connection to node01 closed.
controlplane $ kubectl uncordon node01
node/node01 uncordoned
controlplane $ kubectl get no
NAME           STATUS   ROLES    AGE   VERSION
controlplane   Ready    master   18m   v1.19.0
node01         Ready    <none>   18m   v1.19.0

업그레이드가 완료된 것을 확인할 수 있다.

 

2. 클러스터 백업

문서 링크: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/

 

문제에서 인증서 관련 파일이 주어지기 때문에 어렵지 않게 수행할 수 있다.

root@controlplane $ ETCDCTL_API=3 etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" \
--cert="/etc/kubernetes/pki/etcd/server.crt" \
--key="/etc/kubernetes/pki/etcd/server.key" \
snapshot save /opt/snapsho.db

Snapshot saved at /opt/snapsho.db

 

 

CKA 자격증 정보 및 문제 풀이 연관 글

[쿠버네티스] CKA 자격 시험 접수 및 후기 (202105) | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_1 [RBAC, Node] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_2 [클러스터 업그레이드, 백업] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_3 [파드, 디플로이먼트] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_4 [PV, PVC] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_5 [네트워킹] | 데인트리 라이브러리

 

 

 

내용에 오류가 있거나 질문이 있으면 댓글로 소통해주세요

언제나 환영합니다

 

댓글