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
'Programming > 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 |
[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 |
댓글