본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Kubernetes

[Kubernetes] 1-20. 클러스터 업그레이드 및 클러스터 조인

by bluefriday 2022. 5. 11.
반응형

클러스터에 속해 있지 않는 노드(worker2번이라고 가정) 의 버전을 확인하고 해당 노드를 클러스터에 join 해본다

먼저 현재 클러스터의 상태를 확인한다.

kubectl get node
NAME      STATUS     ROLES                  AGE    VERSION
master1   Ready      control-plane,master   116m   v1.23.1
worker1   NotReady   <none>                 112m   v1.23.1

 

현재 master, worker1 번 노드의 kubernetes 버전이 v1.23.1 이고, 아직 worker2 번 노드가 join 되지 않은 것을 확인한 후에 worker2번으로 이동한다.

### 해당 노드로 이동
ssh cluster3-worker2

### kubernetes (kubeadm / kubectl / kubelet) 의 버전 확인
root@worker2:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:39:51Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}

root@worker2:~# kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit:"b695d79d4f967c403a96986f1750a35eb75e75f1", GitTreeState:"clean", BuildDate:"2021-11-17T15:48:33Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?

root@worker2:~# kubelet --version
Kubernetes v1.22.4

해당 노드에 kubeadm 이 이미 설치되어 있으므로 바로 upgrade를 수행해본다.

root@worker2:~# kubeadm upgrade node
couldn't create a Kubernetes client from file "/etc/kubernetes/kubelet.conf": failed to load admin kubeconfig: open /etc/kubernetes/kubelet.conf: no such file or directory
To see the stack trace of this error execute with --v=5 or higher

보통은 위 방법을 이용하여 업그레이드를 수행한다. 하지만 현재 이 노드는 아예 초기화도 되지 않았으므로 업데이트 할 내용이 없다는 명령을 출력한다. 추후에 kubeadm join 을 사용하여 해결될 것이므로, 여기서는 계속해서 kubelet, kubectl 을 사용한다. 

root@worker2:~# apt update
...

root@worker2:~# apt show kubectl -a | grep 1.23
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Version: 1.23.1-00
Version: 1.23.0-00

root@worker2:~# apt install kubectl=1.23.1-00 kubelet=1.23.1-00
..

### 업그레이드 후 버전 확인
root@worker2:~# kubelet --version
Kubernetes v1.23.1

이제 kubelet 을 업그레이드 하기 위해 프로세스를 재시작한다.

root@worker2:~# systemctl restart kubelet

root@worker2:~# service kubelet status

버전 업그레이드를 종료한 이후 이제 클러스터에 join 을 수행한다. 이를 위해 먼저 master 노드에서 join 에 필요한 토큰을 발행한다.

ssh master1

root@master1:~# kubeadm token create --print-join-command
kubeadm join 192.168.100.32:6443 --token kjf8es.7behrwrv738dj8mu --discovery-token-ca-cert-hash sha256:ff74d8c4d07a27b9974a8e976149a7958e70b7aa9a2e2c34d0882256fc768f0d

root@master1:~# kubeadm token list
TOKEN                     TTL         EXPIRES                ...
mnkpfu.d2lpu8zypbyumr3i   23h         2022-03-04T12:32:00Z   ...
poa13f.hnrs6i6ifetwii75   <forever>   <never>                ...

 

worker노드에서 join 을 위해 사용할 명령어를 확인하였으면 해당 노드에 접속하여 join 을 수행한다.

ssh worker2

root@worker2:~# kubeadm join 192.168.100.32:6443 --token kjf8es.7behrwrv738dj8mu --discovery-token sha256:ff74d8c4d07a27b9974a8e976149a7958e70b7aa9a2e2c34d0882256fc768f0d
...

root@worker2:~# service kubelet status

join 이 끝나면 kubectl 명령을 사용하여 노드가 정상적으로 join 되었음을 확인한다.

kubectl get node
NAME      STATUS   ROLES                  AGE    VERSION
master1   Ready    control-plane,master   24h    v1.23.1
worker1   Ready    <none>                 24h    v1.23.1
worker2   Ready    <none>                 107s   v1.23.1

 

댓글