Infra/Container

[Kubernetes] 쿠버네티스 (K8s)

baek-dev 2025. 3. 3. 14:12

⚡ 1. 쿠버네티스(Kubernetes)란?

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

Google에서 개발하고 현재는 Cloud Native Computing Foundation(CNCF) 에서 관리하는 오픈소스 프로젝트입니다.

 

✅ 쿠버네티스의 핵심 기능

 

🔹 컨테이너 자동 배포 및 스케일링 → 애플리케이션을 자동으로 배포하고 확장

🔹 로드 밸런싱 및 서비스 디스커버리 → 여러 컨테이너 간의 네트워크 통신 관리

🔹 셀프 힐링(Self-Healing) → 오류가 발생한 컨테이너를 자동으로 재시작

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

🔹 클러스터 리소스 최적화 → CPU, 메모리 등을 효율적으로 할당

 

🔹 도커(Docker)와 비교

비교 항목 Docker Kubernetes
역할 컨테이너 실행 컨테이너 오케스트레이션
단일 서버 운영 가능 어려움
다중 컨테이너 관리 직접 관리 필요 자동으로 관리
로드 밸런싱 직접 설정 필요 기본 제공
자동 복구 직접 구현해야 함 자동 복구(Self-Healing) 지원

 

⚡ 2. 쿠버네티스 아키텍처(Kubernetes Architecture)

Kubernetes는 Master Node(컨트롤 플레인)Worker Node(작업 노드) 로 구성됩니다.

 

🏗 Kubernetes 아키텍처 구조

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

 

⚙️ Kubernetes 주요 구성 요소

구성 요소 역할
Master Node 클러스터 전체를 관리
API Server kubectl과 통신하여 요청 처리
Controller Manager 클러스터 상태를 모니터링
Scheduler 새로운 Pod을 적절한 노드에 배치
Worker Node 실제 애플리케이션이 실행되는 서버
Kubelet 각 워커 노드에서 컨테이너 실행 및 관리
Kube Proxy 네트워크 트래픽을 관리
Pod 컨테이너의 실행 단위
Service 여러 Pod을 묶어 네트워크 서비스 제공

 

⚡ 3. 쿠버네티스 주요 개념

✅ 1) Pod (파드)

쿠버네티스에서 컨테이너를 실행하는 최소 단위

하나의 Pod에는 하나 이상의 컨테이너가 포함될 수 있음

같은 Pod 내 컨테이너는 같은 네트워크(IP) 및 볼륨(스토리지) 공유

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      ports:
        - containerPort: 80
# Pod 생성
kubectl apply -f my-pod.yaml

# 실행 중인 Pod 확인
kubectl get pods

 

✅ 2) Deployment (배포)

Pod을 관리하고 자동으로 업데이트하는 컨트롤러

Pod이 다운되면 자동으로 새로운 Pod을 생성

Pod 개수를 조절하여 스케일링(Scaling) 가능

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
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 my-deployment.yaml

# 실행 중인 Deployment 확인
kubectl get deployments

 

✅ 3) Service (서비스)

Pod 간 또는 외부 트래픽을 관리하는 네트워크 서비스

클러스터 내부 통신을 위한 ClusterIP, 외부에서 접근 가능한 LoadBalancer, NodePort 제공

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 my-service.yaml

# 실행 중인 서비스 확인
kubectl get services

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

 

⚡ 4. 쿠버네티스 클러스터 확장 (Auto Scaling)

쿠버네티스는 트래픽 증가에 따라 자동 확장(Auto Scaling) 을 지원합니다.

 

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

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

# HPA 상태 확인
kubectl get hpa

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

 

⚡ 5. 쿠버네티스 클러스터 모니터링

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

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

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

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

 

✅ 2) 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

🔹 Prometheus는 메트릭 수집 및 분석, Grafana는 데이터 시각화 도구입니다.

 

⚡ 6. 쿠버네티스 보안 (RBAC)

✅ 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을 사용하면 특정 사용자나 서비스 계정에 대한 권한을 세부적으로 설정 가능합니다.

 

⚡ 결론

쿠버네티스(Kubernetes, K8s)는 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장하는 플랫폼

Pod, Deployment, Service 등 다양한 리소스를 활용하여 애플리케이션을 효율적으로 실행

Auto Scaling, 로드 밸런싱, 롤링 업데이트를 지원하여 높은 가용성과 안정성을 보장

Prometheus, Grafana, RBAC을 활용하여 운영 및 보안 최적화 가능

 

🚀 쿠버네티스를 활용하면 대규모 애플리케이션을 효율적으로 운영할 수 있습니다!

 

 

 

 

출처 : ChatGPT

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

[Kubernetes] K8s Cluster  (0) 2025.03.04
[Docker] Docker 정리  (0) 2025.02.28