k8s – Multi Master Node 구성 (고가용성)
Kubernetes 클러스터는 단일 마스터 노드로 운영될 경우 장애 발생 시 클러스터 전체가 정상적으로 동작하지 않을 위험이 있습니다. 이를 방지하기 위해 Multi Master Node 구성을 활용하면 클러스터의 안정성과 가용성을 향상시킬 수 있습니다. 본 문서에서는 Multi Master Node를 구성하는 이유와 이를 구축하는 방법을 상세히 설명합니다
목차
1. 환경 구성
2. Multi Master Node를 사용하는 이유
3. Multi Master Node 구성
4. 결론
1. 환경 구성
- Kubernetes : v1.32.2
- NGINX Plus : R33
2. Multi Master Node를 사용하는 이유
고가용성 (High Availability): 마스터 노드가 여러 개 있으면 하나의 마스터 노드가 다운되더라도 다른 마스터 노드가 클러스터의 관리를 계속할 수 있습니다.
로드 밸런싱 (Load Balancing): 여러 마스터 노드가 있을 때 클러스터 관리 요청을 분산시켜 처리할 수 있습니다.
3. Multi Master Node 구성
k8s 환경에서 Multi Master Node를 구축하는 방법은 첫 k8s Cluster 구축 시 --control-plane-endpoint args를 통하여 LoadBalancer 서버의 IP를 추가하여야합니다.
$ kubeadm init --control-plane-endpoint "[LoadBalancer-Server IP]:[LoadBalancer-Server KubeAPI Port]" --upload-certs

위와 같이 구성을 진행하게 되면 아래와 같이 Master Node 전용 Join 명령어가 나오게 됩니다.

(두개의 명령문 중 첫번째 join 명령문이 Master Node 전용 join 명령문입니다.)
위와 같이 구성을 진행한 후 NGINX IP로 Kubernete config에 server가 지정되어 있는 것을 확인할 수 있습니다.

Kubectl 명령문을 사용하기 전 Kubernetes config 파일이 LoadBalancer IP로 되어있기 때문에 로드밸런서를 구성해야합니다.
NGINX 구성파일을 변경합니다.
# nginx.conf
...
stream{
upstream kubeapi {
server [kubernetes Master Node IP]:6443;
}
server {
listen 6443;
proxy_pass kubeapi;
}
}
이후 kubectl 명령어를 사용하면 작동하는 것을 확인할 수 있습니다.

join controle plane 명령문을 가지고 Master Node가 될 VM에 붙여넣습니다.
kubeadm join [LoadBalancer IP]:6443 --token [token] --discovery-token-ca-cert-hash [sha256 hash] --control-plane --certificate-key [certificate key]

완료가 되었을 경우 위와 같이 나오게됩니다.
이후 명령어를 입력하여 해당 마스터 노드에서 kubectl 명령어를 사용할 수 있는지 확인합니다.

control-plane이 2개가 된 것을 확인할 수 있습니다.
nginx 구성을 변경하여 해당 Master Node도 Upstream에 추가하여 사용합니다.
stream{
upstream kubeapi {
server 192.168.201.141:6443 ;
server 192.168.201.140:6443 ;
}
server {
listen 6443;
proxy_pass kubeapi;
}
}
새로운 마스터 노드를 하여 하나의 마스터 노드가 다운될 경우 다른 마스터 노드가 사용될 수 있도록 구성합니다.
Master Node 임의로 다운하여 고가용성 구성이 되었는지 확인합니다.

아래와 같이 2개의 마스터 노드중 한가지의 서버가 다운되게 된다면 다른 K8s Master Node 서버가 응답하는 것을 확인할 수 있습니다.

Multi Master Node를 구성하게 되었을 경우 아래와 같이 Node 포트도 동일하게 Master Node 1,2 두개의 노드에 요청을 보내 사용할 수 있습니다.
아래와 같이 테스트용 NGINX를 구성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
위와 같이 구성하게 된다면 nginx-service로 되어있는 Node Port 서비스와 Deployment가 배포됩니다.

Master Node의 IP와 Service Node Port로 접근하게 된다면 2개의 Master Node 모두 같은 NGINX Service를 응답 하는 것을 확인할 수 있습니다.

4. 결론
Multi Control Plane 구성을 통해 Kubernetes 클러스터의 가용성을 크게 향상시킬 수 있습니다. 또한, NGINX를 활용한 로드 밸런싱을 적용하면 안정적인 트래픽 분산이 가능해집니다. 이를 통해 마스터 노드 장애 발생 시에도 클러스터의 지속적인 운영이 보장됩니다.
Kubernetes에 관련된 더 많은 정보를 알고싶으시다면 NGINX STORE Kubernetes 카테고리를 방문해 주세요.
댓글을 달려면 로그인해야 합니다.