본문 바로가기
Infra/Kubernetes

HAProxy 고가용성

by TrendPilot 2025. 3. 21.
쿠버네티스 클러스터에서 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