Kubernetes

kubernetes multi master node (control plane) 구성

정윤재 2023. 5. 1. 02:57

* 주의 사항

  • 신규로 추가 될 master node, worker node 는 container runtime, kubernetes 가

모두 설치 되어 있는 상황에서 클러스터 join (추가)을 해야 한다.

  • 처음 kubeadm init 을 할 때 master node 의 loadbalancer ip (대표 vip) 가 있어야 한다
  • 기본적으로 싱글 마스터 노드 설치법을 기본으로 숙지한 상태에서 구성 한다.(https://shonm.tistory.com/754) 

위의 그림과 같은 형태로 구성 되어야 한다.

예제 )

k8smaster_proxy : 192.168.101.156

k8smaster1 : 192.168.101.157

k8smaster2 : 192.168.101.148

k8smaster3 : 192.168.101.158

k8sworker1 : 192.168.101.153

k8sworker2 : 192.168.101.154

 

 

일반적으로 k8smaster_proxy 는 웹서버를 통해 loadbalacing 을 하는 형태로 구현 하면 된다.

 

가장 쉬운 형태는 k8smaster_proxy 에 haproxy 서버 구성으로 아래와 같다.

 

apt-get install haproxy -y

cat <<EOF >> /etc/haproxy/haproxy.cfg
frontend kubernetes-master-lb
bind 0.0.0.0:26443
option tcplog
mode tcp
default_backend kubernetes-master-nodes

backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
option tcplog
server master1 [k8smaster1의ip]:6443 check
server master2 [k8smaster2의ip]:6443 check
server master3 [k8smaster3의ip]:6443 check
EOF


#예)
cat <<EOF >> /etc/haproxy/haproxy.cfg
frontend kubernetes-master-lb
bind 0.0.0.0:26443
option tcplog
mode tcp
default_backend kubernetes-master-nodes

backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
option tcplog
server master1 192.168.101.157:6443 check
server master2 192.168.101.148:6443 check
server master3 192.168.101.158:6443 check
EOF

 

 

 

systemctl restart haproxy && systemctl enable haproxy
systemctl status haproxy

 

 

 

위와 같이 haproxy 로 master proxy 설정을 마치고,

 

master node 설치는 대체로 https://shonm.tistory.com/754 의 single master node 설치법을 따르면 되지만

 

위의 설치 중 3번(master node 설치)을 아래와 같이 한다.

 

IP_ADDR=`hostname -I | awk '{print $1}'` 를 실행 시키지 말고 그 이후 내용을 아래와 같이 대체 한다.

 

sudo kubeadm init --control-plane-endpoint "[k8smaster_proxy ip]:26443" --upload-certs --pod-network-cidr=10.0.0.0/24

# 예)

sudo kubeadm init --control-plane-endpoint=192.168.101.156:26443 --upload-certs --pod-network-cidr=10.0.0.0/24

#  --apiserver-advertise-address 옵션 대신 --control-plane-endpoint 이 들어간다.

 

 

 

일단 메시지 나온 대로

 

일단 k8smaster1 에서

 

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

echo 'export KUBECONFIG=$HOME/admin.conf' >> $HOME/.bashrc

echo 'KUBECONFIG=/etc/kubernetes/admin.conf' >> $HOME/.bashrc

 

이걸 실행 시켜준다

 

그런 다음 찬찬히 아래 내용들을 보면

 

상단 내용이 control plane(master node) 추가 하기 위한 스크립트

 

  kubeadm join 192.168.101.156:26443 --token 6tvxzj.4cyvcguegbecp1tb \
    --discovery-token-ca-cert-hash sha256:d2f8c990e8a17626e44ff03d55a33ef6712686988d7a41d6cf69788dba17f16b \
    --control-plane --certificate-key 725e5cb58750d8974b85099525cd60b14b323bd7124402dfefc89f0f6099f92d

 

하단 내용이 worker node 추가 하기 위한 스크립트

 

kubeadm join 192.168.101.156:26443 --token 6tvxzj.4cyvcguegbecp1tb \
    --discovery-token-ca-cert-hash sha256:d2f8c990e8a17626e44ff03d55a33ef6712686988d7a41d6cf69788dba17f16b

 

일단

 

Calico 를 master node 에 설치해 준다

(https://shonm.tistory.com/754 의 4.Calico 를 master node 에 설치 부분을 따라하면 된다.)

 

master1 에서 join 실행 한 내용

 

 

 

master2 에서 join 실행 한 내용

 

 

 

master3 에서 join 실행

 

 

 

 

k8sworker1 에서 join 실행

 

 

k8sworker2 에서도 똑같이 join 실행 하면 된다.

 

control plane 에서

 

kubectl get node  실행한 결과는

 

 

이렇게 모든 node 가 실행 되었다.