Kubernetes · Cluster ·
[Kubernetes] kubeadm으로 마스터 노드 고가용성(HA) 클러스터 구축하기(Docker)
🏗️ 1. 클러스터 구성 및 아키텍처 #
본 가이드는 마스터 노드 안에 etcd를 함께 배포하는 Stacked etcd 방식을 사용합니다.
- Load Balancer (VIP): HAProxy + Keepalived (대표 IP:
192.168.0.100) - Master Nodes: 최소 3대 권장 (홀수 구성)
- Worker Nodes: 실제 서비스가 구동될 노드들
⚙️ 2. 사전 준비 (모든 노드 공통) #
모든 노드(마스터, 워커, 로드밸런서)에서 기본적인 시스템 설정을 진행합니다.
2.1 Swap 및 방화벽 설정 🛑 #
1# Swap 비활성화
2sudo swapoff -a
3sudo sed -i '/swap/s/^/#/' /etc/fstab
4
5# 방화벽 해제 (학습용 환경 기준)
6sudo ufw disable2.2 커널 모듈 및 네트워크 브리지 설정 #
1cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
2br_netfilter
3EOF
4
5sudo modprobe br_netfilter
6
7cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
8net.bridge.bridge-nf-call-ip6tables = 1
9net.bridge.bridge-nf-call-iptables = 1
10net.ipv4.ip_forward = 1
11EOF
12
13sudo sysctl --system📦 3. Docker 설치 및 Cgroup Driver 설정 #
쿠버네티스와 Docker의 자원 관리 방식(Cgroup)을 일치시키는 것이 매우 중요합니다.
1# Docker 설치
2sudo apt-get update && sudo apt-get install -y docker.io
3sudo systemctl enable --now docker
4
5# 🚨 중요: Docker Cgroup Driver를 systemd로 변경
6# K8s 1.22 버전 이상부터는 systemd가 기본이자 권장사항입니다.
7cat <<EOF | sudo tee /etc/docker/daemon.json
8{
9 "exec-opts": ["native.cgroupdriver=systemd"],
10 "log-driver": "json-file",
11 "log-opts": {
12 "max-size": "100m"
13 },
14 "storage-driver": "overlay2"
15}
16EOF
17
18sudo systemctl restart docker⚖️ 4. 로드밸런서(LB) 구성 (LB 노드) #
마스터 노드들의 API Server(6443 포트)로 트래픽을 분산해 줄 HAProxy를 설정합니다.
/etc/haproxy/haproxy.cfg 설정:
frontend k8s-api
bind *:6443
mode tcp
default_backend k8s-api-nodes
backend k8s-api-nodes
mode tcp
balance roundrobin
server master1 192.168.0.11:6443 check
server master2 192.168.0.12:6443 check
server master3 192.168.0.13:6443 check🚩 5. 클러스터 초기화 (첫 번째 마스터) #
⚠️ [주의] VIP 설정을 절대 빠뜨리지 마세요! #
고가용성 클러스터의 핵심은 모든 노드가 로드밸런서의 VIP를 바라보게 하는 것입니다. --control-plane-endpoint 옵션을 빠뜨리면(누락하면) HA 구성이 무의미해집니다.
1# 첫 번째 마스터에서 실행 (VIP 주소 사용)
2sudo kubeadm init \
3 --control-plane-endpoint "192.168.0.100:6443" \
4 --upload-certs \
5 --pod-network-cidr=10.244.0.0/16성공 시 화면에 나타나는 kubeadm join ... --control-plane 명령어를 복사해 두세요. ✨
🤝 6. 마스터 및 워커 노드 조인 (Join) #
6.1 추가 마스터 노드 (Master 2, 3) #
복사해둔 명령어에 --control-plane 옵션이 포함되어 있는지 확인 후 실행합니다.
1sudo kubeadm join 192.168.0.100:6443 --token <TOKEN> \
2 --discovery-token-ca-cert-hash sha256:<HASH> \
3 --control-plane --certificate-key <KEY>6.2 워커 노드 (Worker) #
일반 조인 명령어를 실행합니다.
1sudo kubeadm join 192.168.0.100:6443 --token <TOKEN> \
2 --discovery-token-ca-cert-hash sha256:<HASH>✅ 7. 최종 상태 확인 #
모든 설정이 끝났습니다. 마스터 노드에서 전체 노드 상태를 확인합니다.
1kubectl get nodesSTATUS가 모두 Ready라면, Docker 기반의 견고한 HA 클러스터 구축이 완료되었습니다! 🎉
💡 요약 포인트: #
- Docker 설치 후 Systemd Cgroup Driver 설정은 필수입니다.
kubeadm init시 로드밸런서 VIP를 빠뜨리지 말아야 진정한 고가용성이 구현됩니다.--upload-certs옵션은 마스터 노드 간 인증서 공유를 아주 편하게 해줍니다.
Advertisement