Infra/Container

[Kubernetes] K8s Cluster

baek-dev 2025. 3. 4. 19:07

⚡ 1. Kubernetes 클러스터(K8s Cluster)란?

Kubernetes(쿠버네티스, K8s) 는 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장할 수 있는 컨테이너 오케스트레이션 플랫폼입니다.

Kubernetes 클러스터는 여러 노드(Node)로 구성되며, 애플리케이션을 배포하고 실행하는 분산 시스템의 역할을 합니다.

 

✅ Kubernetes 클러스터의 핵심 기능

 

🔹 자동화된 컨테이너 배포 & 관리 → 컨테이너 기반 애플리케이션을 자동으로 배포하고 실행

🔹 자동 확장(Auto Scaling) → 트래픽 증가 시 Pod을 자동으로 추가하거나 제거

🔹 셀프 힐링(Self-Healing) → 장애가 발생한 컨테이너를 자동으로 복구

🔹 로드 밸런싱 & 서비스 디스커버리 → 여러 개의 Pod을 하나의 서비스로 묶어 트래픽을 분배

🔹 롤링 업데이트 & 롤백 지원 → 무중단 배포 가능

 

⚡ 2. Kubernetes 클러스터 아키텍처

Kubernetes 클러스터는 크게 마스터 노드(Master Node)워크 노드(Worker Node) 로 구성됩니다.

 

🏗 Kubernetes 클러스터 기본 구조

+----------------------------------------------------------+
|                  Kubernetes Cluster                     |
|                                                          |
|  +-----------------+   +-----------------+              |
|  |  Master Node    |   |  Worker Node 1  |              |
|  |  (Control Plane)|   |  - Kubelet      |              |
|  |  - API Server   |   |  - Kube Proxy   |              |
|  |  - Controller   |   |  - Pod 1        |              |
|  |  - Scheduler    |   |  - Pod 2        |              |
|  +-----------------+   +-----------------+              |
|                           +-----------------+           |
|                           |  Worker Node 2  |           |
|                           |  - Kubelet      |           |
|                           |  - Kube Proxy   |           |
|                           |  - Pod 3        |           |
|                           |  - Pod 4        |           |
|                           +-----------------+           |
+----------------------------------------------------------+

⚡ 3. Kubernetes 클러스터 동작 방식

✅ 1) 클러스터 생성 및 노드 등록

 

1️⃣ 마스터 노드가 클러스터를 초기화 (kubeadm init)

2️⃣ Worker Node가 마스터 노드에 등록 (kubeadm join)

3️⃣ 노드 간 통신을 위해 CNI(Container Network Interface) 설치

 

✅ 2) 애플리케이션 배포

 

1️⃣ Deployment를 생성하여 Pod을 관리

2️⃣ Pod이 Worker Node에 배치되어 실행

3️⃣ Service를 통해 Pod 간 통신 및 외부 트래픽 관리

 

⚡ 4. Kubernetes 클러스터 배포 예제

✅ 1) Kubernetes 클러스터 설정 (Minikube)

# Minikube 클러스터 시작
minikube start

# 클러스터 상태 확인
kubectl cluster-info

# 노드 확인
kubectl get nodes

 

✅ 2) Deployment를 사용한 애플리케이션 배포

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3  # Pod 개수 설정
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: nginx
          ports:
            - containerPort: 80
# Deployment 배포
kubectl apply -f deployment.yaml

# Pod 상태 확인
kubectl get pods

 

✅ 3) Service를 사용한 네트워크 통신

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
# Service 배포
kubectl apply -f service.yaml

# Service 확인
kubectl get services

🔹 LoadBalancer 타입을 사용하면 외부에서 서비스에 접근 가능합니다.

 

⚡ 5. Kubernetes 클러스터 자동 확장 (Auto Scaling)

Kubernetes는 CPU 사용량 또는 트래픽 증가에 따라 Pod을 자동으로 확장할 수 있습니다.

 

✅ 1) HorizontalPodAutoscaler(HPA)를 사용한 자동 확장

# CPU 사용량이 50%를 초과하면 자동으로 Pod 추가
kubectl autoscale deployment my-app --cpu-percent=50 --min=1 --max=5

# HPA 상태 확인
kubectl get hpa

🔹 트래픽 증가 시 Pod을 자동 확장하여 성능을 최적화합니다.

 

⚡ 6. Kubernetes 클러스터 모니터링

✅ 1) kubectl을 사용한 클러스터 상태 확인

# 모든 리소스 상태 확인
kubectl get all

# 특정 Pod의 로그 확인
kubectl logs my-pod

# 실행 중인 노드 상태 확인
kubectl get nodes

 

✅ 2) Prometheus & Grafana를 사용한 모니터링

Prometheus: 메트릭 수집 및 분석

Grafana: 데이터 시각화

# Prometheus 설치
kubectl apply -f https://github.com/prometheus-operator/prometheus-operator/blob/main/bundle.yaml

# Grafana 설치
kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/templates/grafana.yaml

 

⚡ 7. Kubernetes 클러스터 보안 (RBAC)

Kubernetes는 RBAC(Role-Based Access Control) 을 사용하여 접근 권한을 관리할 수 있습니다.

 

✅ 1) RBAC를 사용한 사용자 권한 관리

# Role 설정 (Namespace 내에서 리소스 읽기 권한)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: read-only-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]
# Role 배포
kubectl apply -f role.yaml

🔹 RBAC을 사용하면 특정 사용자나 서비스 계정에 대한 권한을 세부적으로 설정 가능합니다.

 

⚡ 8. Kubernetes 클러스터 배포 전략

✅ 1) 롤링 업데이트(Rolling Update)

기존 Pod을 점진적으로 교체하여 무중단 배포 가능

kubectl set image deployment/my-app my-container=nginx:latest

 

✅ 2) 카나리아 배포(Canary Deployment)

일부 트래픽만 새로운 버전으로 전송하여 테스트

spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
        version: v2  # 새로운 버전 태그 추가

 

⚡ 결론

Kubernetes 클러스터는 컨테이너 애플리케이션을 자동으로 배포 & 관리하는 시스템

Master Node가 클러스터를 제어하고, Worker Node가 애플리케이션을 실행

자동 확장, 모니터링, 보안, 무중단 배포 등을 지원

RBAC, HPA, Prometheus, Grafana를 활용하여 운영 최적화 가능

 

🚀 Kubernetes 클러스터를 사용하면 대규모 애플리케이션을 안정적으로 운영할 수 있다

 

 

 

 

출처 : ChatGPT

 

'Infra > Container' 카테고리의 다른 글

[Kubernetes] 쿠버네티스 (K8s)  (0) 2025.03.03
[Docker] Docker 정리  (0) 2025.02.28