쿠버네티스 클러스터에서 3대의 마스터 노드를 구성할 때
HAProxy를 사용하는 핵심 이유는
고가용성과 부하 분산을 통해 제어 플레인의 안정성을 보장하기 위함입니다.
본문은 LB 서버로 분산 / 마스터 HAProxy / 워커 HAProxy 방법 중 마스터 HAProxy 로 구성하였습니다.
HAProxy 을 적용하는 이유
1. 고가용성(High Availability) 확보
3대의 마스터 노드 구성은 단일 장애 지점(SPOF)을 제거합니다.
HAProxy는 각 마스터 노드의 API 서버(6443 포트)로 트래픽을 분산시켜 특정 노드 장애 시 자동으로 정상 노드로 전환됩니다.
2. 부하 분산 최적화
Round Robin 방식을 통해 API 요청을 균등하게 분배하며, TCP 체크(fall 3, rise 2)로 노드 건강 상태를 실시간 모니터링. 이를 통해 10,000 RPS 이상의 고부하 상황에서도 안정적인 서비스 제공이 가능합니다.
3. 확장성 지원
신규 마스터 노드 추가 시 HAProxy 설정에 server 라인 한 줄만 추가하면 즉시 트래픽 분산 그룹에 편입 가능. 이는 클러스터 규모 확장 시 운영자의 관리 부담을 크게 감소시킵니다.
HAProxy 적용 방법
본문은 master 1 대, worker 2 대 의 클러스터에서 적용했습니다.
1. 기존 클러스터의 마스터 노드 초기화
kubeadm reset
2. HAProxy 설치
sudo apt update
sudo apt install haproxy -y
2-1. 설치한 HAProxy 설정
# vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend kubernetes-api
bind *:36443
mode tcp
option tcplog
default_backend kubernetes-api-backend
backend kubernetes-api-backend
mode tcp
balance roundrobin
option tcp-check
server master1 192.168.60.157:6443 check
server master2 192.168.60.158:6443 check
server master3 192.168.60.159:6443 check
3. certificate key 생성
kubeadm init --control-plane-endpoint="192.168.60.157:6443" --upload-certs
4. 로컬 사용자 환경 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5. 추가할 마스터 노드 2,3 join
kubeadm join 192.168.60.157:6443 --token [token 값] \
--discovery-token-ca-cert-hash sha256:[해시 값] \
--control-plane --certificate-key [cert 값]
6. 추가할 워커 노드 1,2 join
kubeadm join 192.168.60.157:6443 --token [토큰 값] \
--discovery-token-ca-cert-hash sha256:[해시 값]
7. cni 설치
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
8. haproxy 재기동
sudo systemctl restart haproxy
sudo systemctl status haproxy
HAProxy 가 정상적으로 적용되었는지 확인 방법
1. etcdctl 설치
sudo apt update
sudo apt install etcd-client
2. etcdctl 리더 확인
ETCDCTL_API=3 etcdctl -w table --endpoints=192.168.60.157:2379,192.168.60.158:2379,192.168.60.159:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key endpoint status
감사합니다.
'Infra > Kubernetes' 카테고리의 다른 글
StorageClass (0) | 2025.03.26 |
---|---|
harbor 설치 및 설정 (0) | 2025.03.24 |
Vanilla Kubernetes install (0) | 2025.03.20 |
secret (0) | 2025.03.10 |
pv / pvc (0) | 2025.03.10 |