Single Master로 k8s cluster를 구성했으나 추후 HA 구성을 위해 contorl-plane node를 추가 해야 할 경우
1. kubeadm-config.yaml update
HA 구성을 위해 추가해야 할 node의 정보를 기존 kubeadm-config.yaml에 추가한다.
기존에 k8s 를 구성한 kubeadm-config.yaml의 정보가 없을 경우 현재 등록되어 있는 configmap을 통해 아래 명령어를 사용하여 가져 온다.
machine01:~$ kubectl get cm kubeadm-config -n kube-system -o yaml
kubeadm-config에 추가 할 control-plane 노드의 정보를 업데이트 한다.
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.18.20
controlPlaneEndpoint: "10.88.15.225:6443"
apiServer:
certSANs:
- 127.0.0.1
- 10.0.0.1
- 10.0.0.2 // 추가 할 Node ip
- 10.0.0.3 // 추가 할 Node ip
- machine01
- machine02 // 추가 할 Node Domain
- machine03 // 추가 할 Node Domain
extraArgs:
apiserver-count: "3" // api server 갯수
networking:
dnsDomain: cluster.local
podSubnet: 172.28.0.0/14
serviceSubnet: 172.27.0.0/16
etcd:
external:
endpoints:
- http://10.0.0.1:2379
- http://10.0.0.2:2379 // etcd에 추가 될 node ip 정보
- http://10.0.0.3:2379 // etcd에 추가 될 node ip 정보
2. 수정 한 kubeadm-config를 실제 k8s cluster secret에 업데이트
kubeadm upload-certs 를 이용하여 secret 업데이트
machine01:~$ sudo kubeadm init phase upload-certs --upload-certs --config master.yaml
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
dbc6746eab5d8dbfe13d62d4da9d0ddedb9819042d1d8a0489fde439ecb83212
이때 사용된 certificate key (dbc6746eab5d8dbfe13d62d4da9d0ddedb9819042d1d8a0489fde439ecb83212) 는 잘 보관해두자. control-plane으로 join 할때 사용 된다.
3. control-plane으로 node join
이미 join을 위해 만들어둔 token이 존재한다면 해당 token을 사용하고 없다면 아래 명령어를 이용하여 join에 필요한 token을 생성하자.
machine01:~$ kubeadm token create --print-join-command
kubeadm join 10.0.0.1:6443 --token wab1wr.kik92g8b6l4lsc2b --discovery-token-ca-cert-hash sha256:3729236e56e7ec2d291f0ebe1d66e8e64d83696f10749ec5b6efc49834926a6e
일반적으로 worker node는 위에 join 커맨드를 이용하여 cluster에 조인 시킨다. 허나 우리에게 필요한건 control-plane이므로 --control-plane 옵션과 위에 upload-certs 시 사용된 cert key를 명령어에 추가하여 control-plane 역할을 수행하도록 master에 join 시킨다.
machine02:~$ kubeadm join 10.0.0.1:6443 --token wab1wr.kik92g8b6l4lsc2b --discovery-token-ca-cert-hash sha256:3729236e56e7ec2d291f0ebe1d66e8e64d83696f10749ec5b6efc49834926a6e --control-plane --certificate-key dbc6746eab5d8dbfe13d62d4da9d0ddedb9819042d1d8a0489fde439ecb83212
4. 확인
join 후 control-plane 노드로써 정상적으로 join 되었는지 확인한다.
machine02:~$ mkdir -p $HOME/.kube
machine02:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
machine02:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
machine02:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
machine01 Ready master 1y v1.18.20
machine02 Ready master 20s v1.18.20
machine04 Ready worker 1y v1.18.20
machine05 Ready worker 1y v1.18.20
추가적으로 control-plane으로써 역할을 정상적으로 수행 할 수 있도록 control-plane components들이 설치되었는지 확인해보자.
machine02:~$ kubectl get pods -n kube-system -o wide | grep machine02
kube-apiserver-machine02 1/1 Running 0 34m 10.0.0.2 machine02 <none> <none>
kube-controller-manager-machine02 1/1 Running 0 34m 10.0.0.2 machine02 <none> <none>
kube-flannel-ds-amd64-mwgs8 1/1 Running 0 34m 10.0.0.2 machine02 <none> <none>
kube-proxy-4xtpx 1/1 Running 0 34m 10.0.0.2 machine02 <none> <none>
kube-scheduler-machine02 1/1 Running 0 34m 10.0.0.2 machine02 <none> <none>
추가적으로 apiserver 호출 주소를 새로 조인된 machine02로 변경 후 api server호출이 정상적으로 실행되는지 확인해보자.
machine02:~$ vi ~/.kube/config
apiVersion: v1
clusters:
- cluster:
...
server: https://10.0.0.2:6443 // 새로 추가한 control-plane node ip or domain 으로 변경
name: kubernetes
contexts:
...
확인
machine02:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
machine01 Ready master 1y v1.18.20
machine02 Ready master 1h v1.18.20
machine04 Ready worker 1y v1.18.20
machine05 Ready worker 1y v1.18.20
'Kubernetes' 카테고리의 다른 글
[Kubernetes] kubelet error - part of the existing bootstrap client certificate is expired (0) | 2022.03.14 |
---|---|
[Kubernets] coredns에 multiple consul dns 등록하기 (0) | 2022.02.09 |
[Kubernetes] k8s HA control-plane node 추가하기 (Add control-plane node) (0) | 2022.01.12 |
[Kubernets][Rancher] Pod Metrics 보기 (0) | 2021.12.02 |
[Kubernetes] Kubernetes in action - Pod (0) | 2021.12.01 |
[Kubernetes] kubectl cp (Kubernetes container files copy - pod 파일 복사) (0) | 2021.11.30 |
댓글0