지난 포스팅에서는 단일 컨트롤 플레인(마스터 노드)에 노드를 조인하는 방법을 알아봤다.
이번에는 클러스터에 여러 개의 컨트롤 플레인를 구성해보자.
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
결과:
'Docker & Kubernetes > 쿠버네티스' 카테고리의 다른 글
Kubernetes 컨테이너 런타임 추천(containerd, CRI-O, Docker Engine) (0) | 2024.11.20 |
---|---|
[kubernetes] kubectl 축약 & 명령어 자동완성 (0) | 2024.01.09 |
Kubeadm으로 k8s 설치하기 (2) | 2024.01.05 |
metrics-server 설치: 쿠버네티스 리소스 모니터링 (0) | 2023.05.30 |