Kubernetes · Cluster ·
[Kubernetes] Containerd 기반 쿠버네티스 고가용성(HA) 클러스터 완벽 구축 가이드
1. 🏗️ 클러스터 아키텍처 및 환경 #
고가용성 클러스터는 마스터 노드(Control Plane)를 여러 대 두어, 특정 노드에 장애가 발생해도 서비스가 중단되지 않도록 설계합니다.
- Container Runtime: Containerd (Docker 대체 표준)
- Load Balancer: HAProxy + Keepalived (Virtual IP 사용)
- Nodes: Master 3대, Worker N대 권장
2. ⚙️ 사전 준비 (모든 노드 공통) #
가장 먼저 모든 노드에서 쿠버네티스가 구동될 수 있는 기초 공사를 진행합니다.
2.1 Swap 비활성화 및 네트워크 설정 #
쿠버네티스는 메모리 관리를 위해 Swap 비활성화가 필수입니다. 🛑
1# 1. Swap 끄기
2sudo swapoff -a
3sudo sed -i '/swap/s/^/#/' /etc/fstab
4
5# 2. 커널 모듈 로드 (Containerd 필수 모듈)
6cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
7overlay
8br_netfilter
9EOF
10
11sudo modprobe overlay
12sudo modprobe br_netfilter
13
14# 3. sysctl 파라미터 설정 (IP 포워딩 활성화)
15cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
16net.bridge.bridge-nf-call-iptables = 1
17net.bridge.bridge-nf-call-ip6tables = 1
18net.ipv4.ip_forward = 1
19EOF
20
21sudo sysctl --system3. 📦 Containerd 설치 및 최적화 #
도커 없이 가볍고 빠른 Containerd를 직접 설치합니다.
1sudo apt-get update && sudo apt-get install -y containerd
2
3# 기본 설정 생성 및 SystemdCgroup 활성화 (중요!)
4sudo mkdir -p /etc/containerd
5containerd config default | sudo tee /etc/containerd/config.toml
6sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
7
8sudo systemctl restart containerd4. ⚖️ Load Balancer 구성 (LB 노드) #
마스터 노드들을 하나로 묶어줄 대표 주소인 **VIP(Virtual IP)**를 설정합니다. (예: 192.168.0.100)
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 check5. 🚩 클러스터 초기화 (Master 1) #
⚠️ [필독] VIP 설정을 빠뜨리면 안 되는 이유! #
kubeadm init 실행 시 --control-plane-endpoint 옵션을 빠뜨리는(빼는) 실수를 가장 많이 합니다.
- 만약 빠뜨린다면? 😱 클러스터가 로드밸런서가 아닌 **‘첫 번째 마스터의 IP’**를 대표 주소로 기억합니다. 나중에 마스터를 추가해도, 첫 번째 노드가 죽으면 클러스터 전체가 먹통이 되어 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 \
6 --cri-socket unix:///run/containerd/containerd.sock6. 🤝 노드 조인 (Join) #
초기화 완료 후 출력되는 토큰을 사용하여 나머지 노드들을 연결합니다.
6.1 추가 마스터 노드 (Master 2, 3) 조인 #
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라면 축하드립니다! 🎉 이제 어떤 마스터 노드 하나가 장애가 나더라도 끄떡없는 견고한 쿠버네티스 클러스터가 완성되었습니다.
💡 요약하자면: #
- Swap 오프는 기본!
- Containerd 설정 시
SystemdCgroup을 꼭true로! kubeadm init시 LB VIP를 절대 빠뜨리지 말 것!
Advertisement