쿠버네티스 클러스터를 구성하다가 node가 많아지면 복잡하고 골치아파진다. 지난번에 테스트 한 환경을 배경으로 클러스터의 노드를 제거 및 추가하는 방법을 적어본다. 사전에 준비해야 할 환경은 master, node1, node2가 이루어져 있는 환경이 필요하다. 아래 글 외에도 kubernetes 카테고리의 글들을 참고하면 된다.
<지난 글 바로가기>
노드 제거
공식 홈페이지에서 제거하기 위한 절차가 잘 작성되어있다. 명령어를 기준으로 작성해나가려고 하는데, 이전에 갖춰져있어야 할 환경과 진행 순서는 다음과 같다.
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
* 출처 및 참고
'Kubernetes' 카테고리의 다른 글
[PKOS] 쿠버네티스 스터디 1주차 - AWS kOps 설치 및 기본사용, Helm (2) | 2023.01.10 |
---|---|
쿠버네티스 클러스터의 구성요소는? 쿠버네티스 아키텍처에 대하여 (0) | 2021.06.28 |
[쿠버네티스] Vagrant를 이용한 kubeadm 클러스터 업그레이드(Version에 대하여) (0) | 2021.06.18 |
Ubuntu 18.04 LTS, Vagrant를 이용한 쿠버네티스 아키텍처 설치 (0) | 2021.06.18 |
쿠버네티스란 무엇인가? (0) | 2021.06.17 |