backend/kubernetes docs

[kubernetes docs] pod

seul chan 2020. 6. 3. 21:01

Pod

Pod는 Kubernetes에서 생성되고 관리될 수 있는 배포 가능한 최소 컴퓨팅 단위이다.

파드는 무엇인가?

Pod는 고래 떼 (pod of whales)나 콩꼬투리 (pea pod)와 마찬가지로 하나 이상의 컨테이너 그룹을 말한다. 이 그룹은 storage/network를 공유한다.

도커 구조 관점에서 보면 pod는 공유 네임스페이스와 공유 볼륨을 가진 도커 컨테이너 그룹 정도가 될 것이다.

파드의 의의

파드는 그 구성 요소 집합보다 높은 수준의 추상화를 제공함으로써 애플리케이션 배포 및 관리를 단순화

파드는 그 구성 요소 간에 데이터 공유 및 통신이 가능

파드의 내구성 (또는 결핍)

파드는 내구성이 강한 엔터티로 취급하지는 않는다. 파드는 스케줄링 실패, 노드 장애 또는 그 밖에 리소스가 부족해서, 또는 노드 정비를 위한 경우와 같이 축출(eviction)되는 상황에서는 살아남을 수 없을 것

  1. 사용자가 파드 삭제 명령을 내린다. (기본 유예 기간 30초)
  2. API 서버 안의 파드는 유예 기간에 따라, 시간을 넘은 것(죽은)것으로 간주되는 파드가 업데이트 된다.
  3. 클라이언트 명령에서 파드는 “Terminating” 이라는 문구를 나타낸다.
  4. (3번 단계와 동시에) Kubelet은 파드가 2번 단계에서 설정된 시간으로 인해 Terminating으로 표시되는 것을 확인하면 파드 종료 단계를 시작한다.
    1) 파드의 컨테이너 중 하나에 preStop hook이 정의된 경우, 해당 컨테이너 내부에서 실행된다. 유예 기간이 만료된 후에도 preStop 훅이 계속 실행 중이면, 유예 기간을 짧게(2초)를 1회 연장해서 2번 단계를 실행한다.
    2) 파드의 프로세스에 TERM 시그널이 전달된다. 파드의 모든 컨테이너가 TERM 시그널을 동시에 받기 때문에 컨테이너의 종료 순서가 중요한 경우에는 preStop 훅이 각각 필요할 수 있음을 알아두자. 만약 preStop 훅을 완료하는 데 더 오랜 시간이 필요한 경우 terminationGracePeriodSeconds 를 수정해야 한다.
  5. (3번 단계와 동시에) 파드는 서비스를 위해 엔드포인트 목록에서 제거되며, 더 이상 레플리케이션 컨트롤러가 실행중인 파드로 고려하지 않는다. 느리게 종료되는 파드는 로드밸런서(서비스 프록시와 같은)의 로테이션에서 지워지기 때문에 트래픽을 계속 처리할 수 없다.
  6. 유예 기간이 만료되면, 파드에서 실행중이던 모든 프로세스가 SIGKILL로 종료된다.
  7. Kubelet은 유예기간 0(즉시 삭제)을 세팅하여 API 서버에서 파드 삭제를 끝낼 것이다. API 서버에서 사라진 파드는 클라이언트에게서 더 이상 보이지 않는다.

기본적으로 모든 삭제는 30초 이내에 끝남

파드 강제 삭제를 하려면 --grace-period=0과 함께 --force 플래그 지정해야함.

강제 삭제는 일부 파드의 경우 잠재적으로 위험할 수 있으므로 주의해서 수행