kubernetes
쿠버네티스에서 배포가능한 가장 작은 단위가 POD입니다. 하나의 POD에 여러개의 Container를 띄우는 것을 Multi Container Pod라고 합니다. 같은 POD에서 사용되는 Container들은 논리적/물리적으로 같은 환경이라고 할 수 있습니다.(같은 노트북으로 여러개의 도커를 띄우는 것과 같습니다.)
하나의 container는 하나의 프로세스를 다뤄야 합니다. 물론 하나의 container에서 여러개의 프로세스를 실항하는 것이 가능은 합니다. 하지만 여러개의 프로세스들의 상태를 확정하기가 어려워집니다.(2개의 프로세스 중 하나가 죽으면 정상일 수도 있고 비정상 일 수도 있습니다.) 이러한 이유로 container에서 여러개의 프로세스를 실행하는 것을 지양하고, 하나의 Pod에서 여러개의 container을 사용(Multi Container Pod)하는 것을 지향합니다.
단순하게 yaml파일에서 containers 내부에서 2개의 image를 적어주면 하나의 pod에서 2개의 컨테이너를 실행할 수 있습니다. 아래는 하나의 Pod에서 nginx와 server 컨테이너를 띄우는 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: double-application
spec:
containers:
- name: nginx-container
image: nginx
- name: backend-container
image: backend:v0.1
위와 같이 리스트 목록으로 컨테이너를 추가해주면 동시에 실행이 됩니다. 아래와 같이 nginx 설정은 같은 머신에 있다고 고려하고 작성해 주면됩니다.
server {
listen 80;
location/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Remote $remote_addr;
}
}
nginx에서 server를 호출하고록 설정하였고, 같은 저장소를 바라볼 수 있도록 설정해 주었습니다.
하나의 pod에 여러 개 container가 포함되는 경우에 대한 Phase는 Running/Succeeded/Failed로 총 세가지로 나누어 집니다. 각각에 대한 설명은 아래와 같습니다.
Multi Container의 경우에 재시작 정책(Always/OnFailure/Never)에 대해 알아봅시다. 기본적으로 다른 설정이 없으면 Always 상태입니다. 파드 내부에 2개 이상의 컨테이너가 실행되는 경우입니다.