multi control plane: 클러스터에 여러개의 마스터 노드 구성

반응형

사진 출처: https://dockerlabs.collabnix.com/kubernetes/beginners/Install-and-configure-a-multi-master-Kubernetes-cluster-with-kubeadm.html

 

 

 

지난 포스팅에서는 단일 컨트롤 플레인(마스터 노드)에 노드를 조인하는 방법을 알아봤다.

 

이번에는 클러스터에 여러 개의 컨트롤 플레인를 구성해보자.

 

 

VM 구성(총 7개):

bastion: 10.10.20.10

master1 : 10.10.20.83

master2 : 10.10.20.149

master3 :10.10.20.101

worker1 : 10.10.20.152

worker2 : 10.10.20.96

worker3 : 10.10.20.109

 

 

bastion 서버는 로드밸런싱 용도로 만들었다. HaProxy를 설치해서 트래픽을 세 개의 컨트롤 플레인에 분산시킬 예정이다.

 

 

0. 기본 세팅

지난 포스팅의 3번 - control plane와 worker node 공통 작업까지 진행한다.

 

클러스터 생성 전 단계까지 완료한다.

 

 

1. Bastion: HaProxy 서버 구성

 

백엔드 서버에는 컨트롤 플레인의 ip주소를 넣어준다.

 

내 경우에 컨트롤 플레인의 ip주소는 10.10.20.83, 10.10.20.149, 10.10.20.101에 해당된다.

 

# bastion 서버에만 실행

# HaProxy 설치
sudo apt-get update
sudo apt-get install haproxy

# HaProxy 설정
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 10.10.20.83:6443 check
server master2 10.10.20.149:6443 check
server master3 10.10.20.101:6443 check
EOF

# HaProxy 재시작
systemctl restart haproxy && systemctl enable haproxy
systemctl status haproxy

 

 

결과:

 

 

 

2. master-1 설정

클러스터를 초기화 할 때, 컨트롤 플레인 엔드포인트를 설정해주면 컨트롤 플레인 간의 통신을 할 수 있다.

 

컨트롤 플레인 엔드포인트는 HaProxy가 설치된 bastion 서버의 ip주소(10.10.20.10)를 넣어준다.

# kubeadm init 명령어 오류가 발생하면: 컨테이너 런타임 설정파일 삭제 후 재시작
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd

# 클러스터 초기화
sudo kubeadm init --control-plane-endpoint=10.10.20.10:26443 --upload-certs --pod-network-cidr=10.0.0.0/24

 

 

결과:

 

 

위 사진과 같이 나오면 클러스터가 생성이 됐다.

 

1번 코드모든 컨트롤 플레인에 실행한다.

 

2번 코드컨트롤 플레인에만 실행한다.

 

3번 코드 워커 노드에만 실행한다.

 

 

 

3. master, worker join

# master2, master3


# kubeadm init 명령어 오류가 발생하면: 컨테이너 런타임 설정파일 삭제 후 재시작
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd

# 조인
sudo kubeadm join 10.10.20.10:26443 --token wavtai.8hbxi77tontgcnmn \
--discovery-token-ca-cert-hash sha256:efa9e6cb83f16548c7a6dcf6bd5f21d6501589f9f4451ac136ea9982ec88d638 \
--control-plane --certificate-key 56fb55680e51ee1f2e3c356a1acd97d6149497a6637c2b2f2376bd3be63b276d

 

# worker1, worker2, worker3


# join 오류가 발생하면: 컨테이너 런타임 설정파일 삭제 후 재시작
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd

# 조인
sudo kubeadm join 10.10.20.10:26443 --token wavtai.8hbxi77tontgcnmn \
--discovery-token-ca-cert-hash sha256:efa9e6cb83f16548c7a6dcf6bd5f21d6501589f9f4451ac136ea9982ec88d638

 

 

결과:

 

 

 

+ worker node roles 변경

kubectl label node <node-name> <key>=<value> 명령어로 노드의 레이블 값을 수정할 수 있다.

 

# 노드 이름과 ROLES를 동일하게 바꾸고자 한다
kubectl label node worker-1 node-role.kubernetes.io/worker-1=worker-1
kubectl label node worker-2 node-role.kubernetes.io/worker-2=worker-2
kubectl label node worker-3 node-role.kubernetes.io/worker-3=worker-3

 

 

결과:

 

 

 

 

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유