Pod는 쿠버네티스에서 관리하는 가장 작은 배포단위이다. Pod는 한 개 또는 여러 개의 컨테이너를 포함한다.
Pod의 생성 과정
- 스케쥴러는 api서버를 감시하면서 할당되지 않은 파드가 있는지 확인
- 스케줄러는 할당되지 않은 파드를 감지하고 적절한 노드에 할당
- 노드에 설치된 kubelet은 자신의 노드에 할당된 파드가 있는지 확인
- kubelet은 스케줄러에 의해 자신에게 할당된 파드의 정보를 확인하고 컨테이너 생성
- kubelet은 자신에게 할당된 파드의 상태를 api 서버에 전달
노드가 여러개가 되더라도 스케줄러만 열심히 일하면 문제없는 구조임.
YAML로 설정파일 작성
apiVersion: v1
kind: Pod
metadata:
name: echo
labels:
app: echo
spec:
containers:
- name: app
image: imagename
version, kind, metadata, spec은 리소스를 정의할 때 반드시 필요하다.
컨테이너 상태 모니터링
쿠버네티스는 컨테이너가 생성되고 서비스가 준비되었다는 것을 체크하는 옵션을 제공하여 초기화하는 동안 서비스되는 것을 막을 수 있다.
- 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 # Defaults 10
failureThreshold: 1 # Defaults 3
- readinessProbe
- 컨테이너가 준비되었는지 체크하고 정상적으로 준비되지 않았다면 Pod로 들어오는 요청을 제외한다.
- livenessProbe와 차이점은 문제가 있어도 Pod를 재시작하지 않고 요청만 제외한다는 점이다.
- livenessProbe + readinessProbe
- 보통 둘다 같이 적용한다.
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
다중 컨테이너
대부분 1파드에 1컨테이너가 들어가지만 여러 개의 컨테이너가 들어가는 경우도 있다.
하나의 Pod에 속한 컨테이너는 서로 네트워크를 로컬호스트로 공유하고 동일한 디렉토리를 공유할 수 있다.
Loading Comments...