[Kubernetes]Pod

ksp7331·2024년 1월 29일

Pod

쿠버네티스의 가장 기본적인 실행 단위이다. 컨테이너를 포함하고 있는 가장 작은 배포 단위이다.

특징

  • Pod에는 하나 이상의 컨테이너가 배치된다.
  • Pod는 고유의 IP를 할당받는다.
  • 라벨로 리소스를 구분한다.

kubectl 리소스명

po, pod, pods

배포방식

간단한 배포 방식

Pod는 kubectl run명령어를 이용해서 간단하게 배포할 수 있다.

단 컨테이너가 하나인 경우만 사용 가능하다.

kubectl run [POD_NAME] --image [IMAGE]

yaml 파일을 이용한 배포방식

아래의 yaml파일을 이용해 kubectl apply -f 명령어로 배포할 수 있다.

  • apiVersion : 오브젝트 버전, pod의 경우 v1로 쓰인다.
  • kind : Pod
  • metadata.name : Pod의 이름
  • metadata.labels : Pod의 라벨
  • spec.containers : Pod에 배치된 컨테이너 정보
    • image : 컨테이너의 이미지
    • ports.containerPort : 컨테이너 포트
    • env : 환경변수는 name : “”, value: “”쌍의 리스트 형태로 적는다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
	labels:
    type: web
spec:
  containers:
  - name: container1
    image: ksp7331/sp-app:1.1
    ports:
    - containerPort: 8080
	  env:
      - name: NAME
        value: "value"
  - name: container2
    image: ksp7331/sp-app:1.1
    ports:
    - containerPort: 8080

관련문서

생명주기

Pod의 생명주기는 다음과 같다.

  1. Pending (대기): Pod가 생성되었지만 Pod가 아직 노드에 할당되지 않은 상태이다.
  2. Running (실행): Pod가 노드에 할당되어 내부의 컨테이너가 실행중이거나 실행을 시작하는 상태이다.
  3. Succeeded (성공): Pod 내의 모든 컨테이너가 성공적으로 실행을 완료한 상태이다. 완료되었다는 것은 컨테이너가 실행된 후 작업을 성공적으로 마치고 종료되는 것을 의미한다.
  4. Failed (실패): Pod 내의 하나 이상의 컨테이너가 실행을 완료하는것에 실패했을 경우 나타나는 상태이다.
  5. Unknown (알 수 없음): Pod의 상태를 판단할 수 없는 경우 나타나는 상태이다.
  6. Terminating (종료 중): Pod를 삭제할 때 볼 수 있는 상태이다.

상태진단

아래의 Probe를 이용해서 컨테이너의 상태를 진단하고 재시작 정책을 수행할 수 있다.

  • livenessProbe : 컨테이너가 정상적으로 동작하는지 체크하고 정상적으로 동작하지 않는다면 컨테이너를 재시작한다.
  • readinessProbe : 컨테이너가 정상적으로 동작하는지 체크하고 정상적으로 동작하지 않는다면 요청을 제외한다.
  • startupProbe : 컨테이너가 처음 시작될 때 얼마나 빠르게 준비 상태에 도달하는지 확인한다. 파드와 컨테이너가 사용 가능해질때까지 동작하며 이 Probe가 동작하는 동안에는 다른 종류의 Probe가 동작하지 않는다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
	labels:
    type: web
spec:
  containers:
  - name: container1
    image: ksp7331/sp-app:1.1
    livenessProbe:
      httpGet:
        path: /
        port: 8080
      initialDelaySeconds: 5
      timeoutSeconds: 2 # Default 1
      periodSeconds: 5 # Defaults 10
      failureThreshold: 1 # Defaults 3
    readinessProbe:
      httpGet:
        path: /
    ports:
    - containerPort: 8080

ReplicaSet

파드(Pod)의 복제본을 관리하고 유지하는 컨트롤러(Controller)이다. ReplicaSet은 미리 정해진 규격의 파드 인스턴스를 특정 수만큼 유지하도록 한다.

kubectl 리소스명

rs, replicaset, replicasets

yaml 파일

  • apiVersion : apps/v1을 사용한다.
  • kind : ReplicaSet
  • spec.replicas : 유지할 Pod의 복제수를 지정한다.
  • spec.selector.matchLabels : 유지할 Pod의 라벨을 지정한다.
  • spec.template : 생성할 Pod의 규격을 지정한다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: example-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      type: web
  template:
    metadata:
      labels:
        type: web
    spec:
      containers:
      - name: container1
        image: ksp7331/sp-app:1.1

Deployment

애플리케이션의 배포, 업데이트, 롤백 등을 관리하는 리소스이다. ReplicaSet을 이용해서 Pod를 관리한다.

kubectl 리소스명

deploy, deployment, deployments

yaml 파일

  • apiVersion : apps/v1을 사용한다.
  • kind : Deployment
  • spec.replicas : ReplicaSet으로유지할 Pod의 복제수를 지정한다.
  • spec.selector.matchLabels : ReplicaSet으로 유지할 Pod의 라벨을 지정한다.
  • spec.template : ReplicaSet이 생성할 Pod의 규격을 지정한다.
  • spec.strategy : 새로운 Pod를 생성할때의 전략을 설정한다. 디폴트는 RollingUpdate이다.

0개의 댓글