Configure High Availability

Yu Sang Min·2025년 7월 3일

CKA

목록 보기
90/110

🚀 Kubernetes 고가용성(HA) 클러스터 설계


1. 왜 HA가 필요한가?

  • Master 노드 장애 시 문제점

    • 기존 실행 중인 애플리케이션은 유지됨.

    • 하지만,

      • 새로운 Pod 스케줄링 불가.
      • 장애 복구 불가 (ReplicaSet 작동 안 함).
      • kubectl 명령어, API 호출 모두 실패.

2. HA 아키텍처 구성 요소

구성 요소HA 동작 방식
API ServerActive-Active (Load Balancer 필요)
SchedulerActive-Standby (Leader Election)
Controller ManagerActive-Standby (Leader Election)
etcd클러스터 구성 (3, 5, 7 노드 권장)

3. Master Plane 구성

  • ✔️ API Server

    • 모든 Master에 동시에 동작
    • Load Balancer가 요청을 분산
  • ✔️ Controller Manager & Scheduler

    • 여러 Master에 실행되지만
    • Leader Election으로 한 대만 Active

4. Leader Election 동작 방식

  • 🔑 --leader-elect=true 옵션으로 활성화
$ kube-controller-manager --leader-elect true [other options]
                          --leader-elect-lease-duration 15s
                          --leader-elect-renew-deadline 10s
                          --leader-elect-retry-period 2s
  • Kubernetes 내 Endpoint 객체를 이용해 Lock 획득

  • Leader:

    • 주기적으로 갱신 (renew deadline: 10초 기본)
  • Standby:

    • Leader 장애 시 Lock 획득 후 승격

5. etcd 구성 옵션

토폴로지특징
Stacked Topologyetcd + Control Plane 함께 구동 (설치 간단, 리스크 ↑)
External etcd Topology별도 etcd 클러스터 (이중화 강화, 설치 복잡)

✔️ etcd는 홀수 노드 (3, 5, 7) 권장.
✔️ API Server는 etcd 클러스터에 직접 연결.


6. API Server + Load Balancer 구성

  • API Server 포트 6443
  • kubeconfig는 Load Balancer 주소를 바라봄.
kubeconfig → Load Balancer → API Servers (master1, master2, ...)

🔥 최종 아키텍처 다이어그램

                           ┌──────────────────────┐
                           │     Load Balancer     │
                           │    (HAProxy / NGINX)  │
                           └─────────┬────────────┘
                                     │
        ┌────────────────────────────┴────────────────────────────┐
        │                         API Server (6443)                │
        │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐       │
        │ │ Master Node 1 │ │ Master Node 2 │ │ Master Node 3 │ ... │
        │ │ - API Server  │ │ - API Server  │ │ - API Server  │     │
        │ │ - Scheduler   │ │ - Scheduler   │ │ - Scheduler   │     │
        │ │ - Controller  │ │ - Controller  │ │ - Controller  │     │
        │ │ - etcd (opt)  │ │ - etcd (opt)  │ │ - etcd (opt)  │     │
        │ └──────────────┘ └──────────────┘ └──────────────┘       │
        └───────────────────────────────────────────────────────────┘
                                     │
                            ┌────────┴────────┐
                            │    Worker Node 1 │
                            │    Worker Node 2 │
                            │    Worker Node 3 │
                            └──────────────────┘

7. 실습 환경 변화

이전변경 후 (HA 구성)
Master 1개Master 2개 + Load Balancer
Worker 2개Worker 2개 (동일)
총 3 노드4 노드 + LB (5개 리소스)

🔧 결론

  • API Server는 Active-Active, LB 필요
  • Scheduler와 Controller는 Leader Election 기반 Active-Standby
  • etcd는 클러스터 구성 필수
  • 프로덕션에서는 External etcd + 다중 Master + LB가 표준
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글