반응형

 

쿠버네티스 클러스터를 구성하다가 node가 많아지면 복잡하고 골치아파진다. 지난번에 테스트 한 환경을 배경으로 클러스터의 노드를 제거 및 추가하는 방법을 적어본다. 사전에 준비해야 할 환경은 master, node1, node2가 이루어져 있는 환경이 필요하다. 아래 글 외에도 kubernetes 카테고리의 글들을 참고하면 된다.

 

 

<지난 글 바로가기>

 

[쿠버네티스] Vagrant를 이용한 kubeadm 클러스터 업그레이드(Version에 대하여)

이번에는 Vagrant를 이용한 kubeadm 클러스터 버전을 업그레이드를 해볼 예정이다. 쿠버네티스 공식 홈페이지에 보면 관련 명령어를 다 확인해볼 수 있다. 오늘 새벽에 최신 버전이 나와서 쿠버네티

simroot.tistory.com

 

 


노드 제거

 

kubernetes - Clean up

 

공식 홈페이지에서 제거하기 위한 절차가 잘 작성되어있다. 명령어를 기준으로 작성해나가려고 하는데, 이전에 갖춰져있어야 할 환경과 진행 순서는 다음과 같다.

kvagrant@kube-control1:~$ kubectl get nodes
NAME            STATUS   ROLES    AGE    VERSION 
kube-control1   Ready    master   151m   v1.19.11 
kube-node1      Ready    <none>   113m   v1.19.11 
kube-node2      Ready    <none>   122m   v1.19.11

1. kubeadm reset부터 시작(작업내용 초기화) -> 이 때 여기에 있던 kubelet들이 다 없어진다.

2. 노드 1개를 제거한다.

 

1. 초기화

kube-node2를 제거해보도록 하자. ssh 원격으로 접속한다.

vagrant@kube-control1:~$ ssh vagrant@kube-node2

 

노드를 제거하기 전에 kubeadm이 설치한 상태를 reset한다. reset은 다시 작업했던 것들을 초기화하는 것이다. 그리고 iptables를 재설정하려면 다음 명령어도 진행해야하는데, 사용자 계정이라 permission 에러가 떠서 root 권한으로 명령을 실행한다.

vagrant@kube-node2:~$ sudo kubeadm reset

vagrant@kube-node2:~$ sudo -i
root@kube-node2:~$ iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 
root@kube-node2:~# ipvsadm -C

root@kube-node2:~# exit

  

이제 master node인 kube-control1에서 확인해보면 Not Ready가 표시된다. 이 상태에서 kube-node2를 제거한다.

vagrant@kube-control1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION 
kube-control1 Ready master 3h35m v1.19.11 
kube-node1 Ready <none> 178m v1.19.11 
kube-node2 NotReady <none> 3h7m v1.19.11 

 

2. 제거

kubectl delete 명령을 이용해 노드를 제거하고 exit 해서 호스트로 이동한다. 호스트에서 vagrant status를 확인해봐도 된다.

vagrant@kube-control1:~$ kubectl delete node kube-node2 
node "kube-node2" deleted 

vagrant@kube-control1:~$ exit 

 

이후 다시 Vagrant를 이용해서 클러스터 추가를 하기 위해서는 vagrant reload를 해야한다.

 

 


노드 추가

 

이 작업에서는 다시 join을 해줘야하기 때문에 토큰값과 해시값이 필요하다. 먼저 호스트에서 vagrant를 reload해준다.

user@test:~/vagrant/kubernetes$ vagrant reload kube-node2

 

이후 원격접속

user@test:~/vagrant/kubernetes$ vagrant ssh kube-control1
vagrant@kube-control1:~$ ssh vagrant@kube-node2

 

master node인 kube-control1에서 토큰과 해쉬값을 확인하여 따로 메모해둔다. 

vagrant@kube-control1:~$ kubeadm token list
// token 확인 명령어

지난시간 포스팅했듯 토큰값은 24시간이 지나면 사라지기 때문에 list를 해도 조회가 되지 않는다면 kubeadm token create를 해서 생성해주면 된다.

vagrant@kube-control1:~$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 
// hash값 확인 명령어 

 

토큰값과 해시값이 확인되었으면 token hash부분에 값을 넣고 node2로 들어가 연결해준다(join)

sudo kubeadm join <--control-plane-endpoint>:6443 --token <token> --discovery-token-ca-cert-hash <hash> 

vagrant@kube-control1:~$ ssh vagrant@kube-node2

vagrant@kube-node2:~$ sudo kubeadm join 192.168.100.11:6443 --token 3quz9~~~~nfyc6exg \ 
--discovery-token-ca-cert-hash sha256:5078ade3213814~~~~~4fe31d8~~~~~~~fa857203278a0ce8405 

 

이후 다시 master node에서 확인해보면 클러스터 구성에 추가됨을 확인할 수 있다.

vagrant@kube-control1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION 
kube-control1 Ready master 50m v1.19.11 
kube-node1 Ready <none> 29m v1.19.11 
kube-node2 Ready <none> 105s v1.19.11 

 

 

참고로 쉘에서 TAB 자동완성이 잘 되지 않으면 아래 명령어를 사용하여 구성한다.

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

 

 

* 출처 및 참고

 

 

Creating a cluster with kubeadm

Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su

kubernetes.io

 

반응형

+ Recent posts