초보를 위한 쿠버네티스 안내서 - Pod

yshjft·2023년 1월 12일
0

Pod

  • k8s에서 관리하는 가장 작은 배포 단위
  • Pod은 한 개 또는 여러개의 컨테이너를 포함한다.

빠른 Pod 생성

kubectl run echo --image [이미지 주소]

YAML로 설정파일 작성하기

apiVersion: v1
kind: Pod
metadata:
  name: echo
  labels:
    app: echo
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1

※ 쿠버네티스는 리소스를 관리할 때 name, label을 사용

필수 포함 내용

  • version: 오브젝트 버전
  • kind: 종류(Pod, Replicaset)
  • metadata: 메타데이터(name, label, annotation)
  • spec: 상세 명세, 리소스 종류마다 다르다.

컨테이너 상태 모니터링

  • 컨테이너 생성 != 서비스 준비
  • 서버 실행 후 초기화 시간피 필요하기에 실제로 접속이 가능할 때 서비스가 준비되었다고 말할 수 있다.
  • 서비스가 준비되었는다는 것을 체크하는 옵션을 제공하여 초기화하는 동안 서비스되는 것을 막을 수 있다.

livenessProbe

...
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1
      livenessProbe:
        httpGet: # /not/exist에 요청을 보내어 확인한다.
          path: /not/exist
          port: 8080
        initialDelaySeconds: 5 # 처음 5초 이후 시도
        timeoutSeconds: 2 # timeout은 최대 2초 # Default 1
        periodSeconds: 5 # 5초마다 한번씩 확인 # Defaults 10
        failureThreshold: 1 # 한번이라도 실패하면 컨테이너 재시작하겠다. # Defaults 3
  • 컨테이너가 정상적으로 동작하는지를 체크하고 정상적으로 동작하지 않는다면 컨테이너를 재시작

readinessProbe

...
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/echo:v1
      readinessProbe:
        httpGet:
          path: /not/exist
          port: 8080
        initialDelaySeconds: 5 # 처음 5초 이후 시도
        timeoutSeconds: 2 # timeout은 최대 2초 # Default 1 
        periodSeconds: 5 # 5초마다 한번씩 확인 # Defaults 10 
        failureThreshold: 1 # 1번이라도 실패 시 컨테이너 재시작 # Defaults 3 
  • 정상적으로 동작하지 않는다면 해당 Pod으로 들어오는 요청을 제외한다.(재시작X, 요청만 제외)

livenessProbe & readinessProbe

  • 보통은 함께 사용한다.

다중 컨테이너

apiVersion: v1
kind: Pod
metadata:
  name: counter
  labels:
    app: counter
spec:
  containers:
    - name: app
      image: ghcr.io/subicura/counter:latest
      env:
        - name: REDIS_HOST
          value: "localhost"
    - name: db
      image: redis
  • 하나의 Pod에 여러개의 컨테이너를 둔다.
  • 하나의 Pod에 속한 컨테이너들은 서로 네트워크를 localhost로 공유하고 동일한 디렉토리를 고유할 수 있다.
    • app(counter)이라는 컨테이너는 db(redis) 컨테이너에 접근하기 위해 localhost로 접근한다.
  • env
    • 환경변수
    • env는 name과 value를 별도로 정의합니다.
# Pod의 로그 확인시 컨테이너 지정 필요하다
kubectl logs counter app
kubectl logs counter db

# Pod의 app 컨테이너 접속
kubectl exec -it counter -c app -- sh
profile
꾸준히 나아가자 🐢

0개의 댓글