# 파드 ## 파드의 트러블 슈팅 ### 파드의 상태가 ImagePullBackOff이면서 기동하지 않는 경우 kubectl get po kubectl get events | grep [파드명] ### 파드의 상태가 ContainerCreating 에서 진행하지 않는 경우 kubectl get events | grep [파드명] ### 파드가 재시작을 반복 kubectl describe po [파드명] ## Docs - [[파드 헬스 체크]] ## YAML kubectl run nginx --image=nginx:latest --restart=Never apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:latest ## 파드 API ^ 주요 항목 ^ 설명 ^ | apiVersion | v1 설정 | | kind | Pod 설정 | | metadata | 파드의 이름을 지정하는 name은 필수 항목이며, 네임스페이스 내에서 유일한 이름이어야 함 | | spec | 파드의 사양을 기술 | ## 파드의 사양 ^ 주요 항목 ^ 설명 ^ | containers | 컨테이너의 사양을 배열로 기술 | | initContainers | 초기화 전용 컨테이너의 사양을 배열로 기술 | | nodeSelector | 파드가 배포될 노드의 레이블을 지정 | | volumes | 파드 내 컨테이너 간에 공유할 수 있는 볼륨을 설정 | ## 컨테이너 설정 ^ 주요 항목 ^ 설명 ^ | image | 이미지의 리포지터리명과 태그 | | name | 컨테이너를 여러 개 기술할 경우 필수 항목 | | livenessProbe | 컨테이너 애플리케이션이 정상적으로 동작 중인지 검사하는 프로브 | | readinessProbe | 컨테이너 애플리케이션이 사용자의 요청을 받을 준비가 되었는지 검사하는 프로브 | | ports | 외부로부터 요청을 전달받기 위한 포트 목록 | | resources | CPU와 메모리 요구량과 상한치 | | volumeMounts | 파드에 정의한 볼륨을 컨테이너의 파일 시스템에 마운트하는 설정. 복수 개 기술 가능 | | command | 컨테이너 기동 시 실행할 커맨드. args가 인자로 적용 | | args | command의 실행 인자 | | env | 컨테이너 내에 환경 변수를 설정 | https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#container-v1-core ## 파드의 특성 - 파드는 스케쥴링의 최소 단위다. 이 말은 스케쥴러가 파드에 속한 모든 컨테이너의 요구사항을 만족하는 호스트를 찾으려 시도한다는 뜻이다. 만약 다수의 컨테이너가 포함된 하나의 파드를 생성한다면, 스케쥴러는 모든 컨테이너의 요구를 만족할 정도로 충분한 자원을 갖춘 호스트를 찾아야 한다. - 파드는 파드에 속한 컨테이너들의 동일 장소 배치 [[colocation]]을 보장한다. 동일 장소 배치 덕분에 동일한 파드 안의 컨테이너는 서로 상호작용할 수 있는 방법이 또 있다. 가장 일반적인 통신 방법은 데이터 교환을 위해 공유 로컬 파일시스템을 사용하거나 로컬호스트 네트워크 인터페이스를 사용하는 방법, 또는 고성능 상호작용을 위한 호스트 프로세스 간 통신 [[IPC]] (interprocess communication) 매커니즘 등이 있다. - 한 파드는 파드 안의 모든 컨테이너가 공유하는 하나의 IP 주소와 이름, 포트 범위를 갖는다. 다시 말해, 병렬로 실행되는 유닉스 프로세스들이 호스트 상의 네트워킹 공간을 공유할 때 주으이해야 하는 것과 마찬가지로, 동일한 파드 안에 있는 컨테이너들 또한 포트가 겹치지 않게 조심해서 설정해야 한다는 뜻이다. ## 파드란? 파드란 컨테이너 그룹의 스케쥴링과 배포, 호스트 이전이나 스케일을 목적으로 함께 배포되며, 파일시스템, 네트워킹, 프로세스 네임스페이스를 공유할 수도 있다. 이렇게 동시에 적용되는 수명주기 덕분에 파드 안의 컨테이너는 파일 시스템이나 로컬호스트 혹은 호스트 간 프로세스 통신 메커니즘을 통한 네트워크 통신으로 컨테이너 간의 상호작용을 할 수 있다. @startuml component 컨테이너1 { component 파이썬 { } } component 컨테이너2 { component 자바 { } } database 서비스 컨테이너1 <-> 컨테이너2 : 로컬호스트 컨테이너1 <--> 서비스 컨테이너2 <--> 서비스 @enduml