100===Dev Ops/Kubernetes

쿠버네티스 Pod 관리 - DevOps를 위한 완벽 가이드 🚀

블로글러 2025. 5. 30. 22:55

안녕하세요! 여러분은 혹시 이런 경험 있으신가요? 🤔 어플리케이션을 배포했는데 갑자기 트래픽이 몰려서 서버가 다운되거나, 새벽에 서버가 죽어서 급하게 일어나 복구한 경험 말이에요. 쿠버네티스의 Pod 관리는 바로 이런 문제들을 해결해주는 마법 같은 도구입니다!

등장 배경

과거에는 어플리케이션을 물리 서버에 직접 배포했어요. 서버 한 대가 죽으면? 🔥 대참사! 새벽에 데이터센터로 달려가야 했죠. 그 다음엔 가상머신(VM)이 등장했지만, 여전히 무겁고 리소스를 많이 먹었어요.그럼 이제 쿠버네티스 Pod 관리 - DevOps를 위한 완벽 가이드를 작성하겠습니다! 🚀

Pod가 해결하는 문제들:

  1. 일관된 환경 제공: 개발, 테스트, 프로덕션 환경 간의 차이로 인한 "내 컴퓨터에선 잘 되는데?" 문제 해결
  2. 빠른 배포와 롤백: 수초 내에 애플리케이션 배포 및 문제 발생 시 즉시 이전 버전으로 롤백 가능
  3. 자동 복구: 컨테이너가 죽어도 자동으로 재시작되어 서비스 중단 최소화

핵심 원리

Pod는 쿠버네티스의 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함합니다. 🎯

# Pod 생명주기 시각화
┌─────────┐    ┌─────────┐    ┌───────────┐    ┌──────────┐
│ Pending │ -> │ Running │ -> │ Succeeded │ -> │ Deleted  │
└─────────┘    └─────────┘    │  Failed   │    └──────────┘
                               └───────────┘

Pod 생성 프로세스

kubectl apply -f pod.yaml
    ↓
API Server가 요청 수신
    ↓
etcd에 Pod 정보 저장
    ↓
Scheduler가 적절한 Node 선택
    ↓
Kubelet이 Container 생성
    ↓
Pod 실행 시작

Pod 관리 핵심 개념 정리

구성 요소 역할 주요 기능
Container 실제 애플리케이션 실행 코드 실행, 리소스 격리
Pod 컨테이너 그룹 관리 네트워크/스토리지 공유
ReplicaSet Pod 복제본 관리 지정된 수의 Pod 유지
Deployment 배포 전략 관리 롤링 업데이트, 롤백
Service 네트워크 접근점 로드밸런싱, 서비스 디스커버리

Pod 재시작 정책 (RestartPolicy)

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  restartPolicy: Always  # Always, OnFailure, Never
  containers:
  - name: app
    image: nginx:latest
    livenessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 10

재시작 정책 상세:

  • Always: 컨테이너가 종료되면 항상 재시작 (기본값)
  • OnFailure: 0이 아닌 종료 코드로 실패한 경우만 재시작
  • Never: 재시작하지 않음

생명주기 훅 (Lifecycle Hooks) 활용

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: nginx
    image: nginx
    lifecycle:
      postStart:  # 컨테이너 시작 직후 실행
        exec:
          command: ["/bin/sh", "-c", "echo 'Container started' > /tmp/started"]
      preStop:    # 컨테이너 종료 전 실행
        exec:
          command: ["/bin/sh", "-c", "nginx -s quit"]

주의사항 및 팁 💡

⚠️ 이것만은 주의하세요!

  1. 리소스 제한 설정 필수

    • CPU와 메모리 requests/limits를 반드시 설정하세요
    • 설정하지 않으면 Node의 리소스를 모두 사용할 수 있어 위험합니다
      resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  2. 네임스페이스 활용

    • 개발/스테이징/프로덕션 환경을 네임스페이스로 분리
    • RBAC을 통해 접근 권한 제어
      kubectl create namespace dev
      kubectl create namespace prod
  3. Health Check 구성

    • Liveness Probe: 컨테이너가 살아있는지 확인
    • Readiness Probe: 트래픽을 받을 준비가 되었는지 확인
    • 적절한 초기 지연시간 설정이 중요!

💡 꿀팁

  • Label 활용: 모든 리소스에 의미 있는 레이블 부여

    labels:
      app: myapp
      environment: prod
      team: backend
      version: v1.2.3
  • kubectl 단축키 설정

    alias k=kubectl
    alias kgp='kubectl get pods'
    alias kd='kubectl describe'
  • Pod 디버깅 방법

    # 실행 중인 Pod에 접속
    kubectl exec -it pod-name -- /bin/bash
    
    # Pod 로그 확인
    kubectl logs pod-name -f
    
    # 이전 컨테이너 로그 확인
    kubectl logs pod-name --previous

마치며

지금까지 쿠버네티스 Pod 관리에 대해 알아보았습니다. Pod는 단순해 보이지만, 효율적인 DevOps 환경 구축의 핵심입니다! 처음에는 복잡하게 느껴질 수 있지만, 하나씩 실습해보면서 익숙해지면 강력한 도구가 될 거예요.

여러분도 혹시 Pod 관리하면서 겪은 재미있는 에피소드나 꿀팁이 있으신가요? 🤔

참고 자료 🔖


#쿠버네티스 #DevOps #Pod관리 #컨테이너오케스트레이션

728x90
반응형