쿠버네티스 Pod

Chori·2025년 11월 16일
post-thumbnail

초보를 위한 쿠버네티스 안내서를 수강하며 정리한 내용입니다.

개념

  • Pod은 쿠버네티스에서 관리하는 가장 작은 배포 단위
  • 도커는 컨테이너를 만들지만, 쿠버네티스는 컨테이너 대신 Pod를 만듦
  • Pod는 한 개 또는 여러 개의 컨테이너를 포함

Pod 만들기

YAML로 설정 파일 작성

apiVersion: v1
kind: Pod
metadata:
  name: echo
  labels:
    app: echo
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1
# Pod 생성
kubectl apply -f echo-pod.yaml

# Pod 목록 조회
kubectl get po

# Pod 로그 조회
kubectl logs echo
kubectl logs -f echo

# Pod 컨테이너 접속
kubectl exec -it echo -- sh

# Pod 제거
kubectl delete -f echo-pod.yaml

컨테이너 상태 모니터링

  • 컨테이너 생성과 실제 서비스 준비에는 차이가 있음, 서버를 실행하면 바로 접속할 수 없고 짧게는 수 초에서 길게는 수 분의 초기화 시간이 필요한데 서비스에 접속이 가능할 때 서비스가 준비되었다고 할 수 있음
  • 쿠버네티스는 컨테이너가 생성되고 서비스가 준비되었다는 것을 확인하는 옵션을 제공

첫 번째 방법: livenessProbe

  • 컨테이너가 정상적으로 동작하는지 확인하고 비정상이라면 컨테이너를 재시작하여 문제를 해결
  • 정상이라는 것은 여러 가지 방식으로 확인할 수 있는데 http get 요청을 보내서 확인할 수도 있음
apiVersion: v1
kind: Pod
metadata:
  name: echo-lp
  labels:
    app: echo
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1
      livenessProbe:
        httpGet:
          path: /not/exist
          port: 8080
        initialDelaySeconds: 5
        timeoutSeconds: 2   # Default 1
        periodSeconds: 5    # Default 10
        failureThreshold: 1 # Default 3

두 번째 방법: readinessProbe

  • 컨테이너가 준비되었는지 확인하고 비정상이라면 Pod으로 들오어는 요청을 제외시킴
  • livenessProbe와 달리 문제가 있어도 Pod을 재시작하지 않고 요청만 제외시킴
apiVersion: v1
kind: Pod
metadata:
  name: echo-rp
  labels:
    app: echo
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1
      readinessProbe:
        httpGet:
          path: /not/exist
          port: 8080
        initialDelaySeconds: 5
        timeoutSeconds: 2   # Default 1
        periodSeconds: 5    # Default 10
        failureThreshold: 1 # Default 3

세 번째 방법: livenessProbe + readinessProbe

  • 일반적으로 livenessProbe와 readindessProbe를 같이 적용
apiVersion: v1
kind: Pod
metadata:
  name: echo-health
  labels:
    app: echo
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1
      livenessProbe:
        httpGet:
          path: /
          port: 3000
      readinessProbe:
        httpGet:
          path: /
          port: 3000

다중 컨테이너

  • 하나의 Pod에 속한 컨테이너는 서로 네트워크를 localhost로 공유하고 동일한 디렉터리를 공유할 수 있음
apiVersion: v1
kind: Pod
metadata:
  name: counter
  labels:
    app: counter
spec:
  containers:
    - name: app
      image: ghrc.io/subicura/counter:latest
      env:
        - name: REDIS_HOST
          value: "localhost"
    - name: db
      image: redis
profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글