kubernetes
쿠버네티스에서 POD는 배포가능한 가장 작은 단위입니다. 보통 컨테이너를 배포한다는 이야기를 하지만, 사실은 컨테이너가 아니라 POD를 배포한다는 용어가 맞습니다. 그리고 배포한 POD위에 여러개의 컨테이너를 포함시키는 것이 가능합니다.
쿠버네티스에서 POD 내부에 실행되는 컨테이너들은 같은 환경을 가집니다. 따라서 최소 배포단위인 POD간의 격리는 맞는 말이지만, 컨테이너 간의 격리는 맞지 않는 말입니다. 따라서 컨테이너가 파드에서 여러개 실행 될때는 각각의 다른 포트를 가져야 실행이 됩니다.
POD안에서 여러개의 컨테이너를 실행 시키는 것이 가능합니다. 하지만 일반적으로 하나의 POD에는 하나의 컨테이너를 가지도록 구성을 합니다. 왜냐하면 하나의 어플리케이션인 컨테이너마다 POD에 넣어서 배포하는 것이 쿠버네티스가 효율적으로 관리를 하는 것이 가능하기 때문입니다. 하나의 파드에 하나의 컨테이너를 가지게 설계를 주로하기 때문에, 파드와 컨테이너를 동일하게 부르기도 합니다. 하지만 파드 없이 컨테이너를 배치하는 것은 불가능 하다는 것은 알아두셔야 합니다.
yaml 파일을 통해 간단히 생성이 가능하다. ex-pod.yaml 파일을 아래와 같이 만들어보자.
apiVersion: v1
kind: Pod
metadata:
name: ex-pod
spec:
containers:
- name: ex-container
image: nginx:1.29
물론 yaml파일만 적고 저장한다고 바로 실행되는 것은 아니다.
$ kubectl apply -f ex-pod.yaml
명령어를 통해 yaml파일을 쿠버네티스 spec 적용이 가능하다.
기본적으로 Pod도 life cycle을 가집니다. 각각의 라이플 사이클을 Phase(페이즈)라고 부릅니다. 보통 Pending과 Running을 자주 사용하게 됩니다. 전체 Phase의 종류는 아래와 같습니다.
Single Container의 경우에 재시작 정책(Always/OnFailure/Never)에 대해 알아봅시다. 기본적으로 다른 설정이 없으면 Always 상태입니다.
apiVersion: v1
kind: Pod
metadata:
name: OnFailure-pod
spec:
restartPolicy: OnFailure
containers:
- name: my-container
image: busybox
command: ['sh', '-c', 'sleep 2']
apiVersion: v1
kind: Pod
metadata:
name: OnFailure-pod
spec:
restartPolicy: OnFailure
containers:
- name: my-container
image: busybox
command: ['sh', '-c', 'exit 1']
apiVersion: v1
kind: Pod
metadata:
name: Never-pod
spec:
restartPolicy: Never
containers:
- name: my-container
image: busybox
command: ['sh', '-c', 'exit 1']
쿠버네티스에서는 컨테이너 종료 시 상태에 따라 재시작합니다. 기본적으로 컨테이너의 재시작 주기는 10s입니다. 재시작을 실패했을 경우에는 2배 후인 20s에 재시작하게 됩니다. 이러한 방식으로 재시작 주기가 2배로 증가하고 최대 5분까지 재시간 주기가 늘어납니다. 그리고 5분 마다 정상 실행 될때까지 반복하게 됩니다.
컨테이너의 시작과 종료 시점에 실행되는 명령어입니다. 사용빈도는 높지 않지만 알아두면 도움이 됩니다.