개요
pod를 생성할 때 다수의 container를 포함하는 Pod를 생성해 보겠습니다.
왜 필요한가?
service를 개발하다 보면 항상 같이 다녀야 하는 service들이 존재합니다.
그래서 service들 한 개의 pod안에 모아서 구성하는 것이 multi conatiner pod입니다.
사용방법
간단하게 pod안에 container만 추가시켜 주면 끝입니다.
다만 유의할 점은 service 하는 port가 중복이 되면 안 된다는 것입니다.
추가 방법
container는 배열 형태로 추가되기 때문에 - 를 넣어서 container를 추가할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: multiple-container-pod
name: multiple-container-pod
spec:
containers:
- image: nginx
name: nginx-container
- image: mysql
name: mysql-container
공유 자원
pod내의 container들의 lifecycle은 동일합니다.
network와 storage는 서로 공유합니다. 그렇기 때문에 container의 port가 겹치면 절 때 안됩니다.
이는 localhost에 같은 service port를 2개 여는 것과 동일하기 때문입니다.
pod의 특정 container의 log 확인 방법
kubectl logs -f [파드 이름] -c [컨테이너 이름]
추가 정보1. Initcontainer란?
정의
multiple container pod에서 만약에 각 container가 가장 처음에 사용할 정보가 꼭 필요 하다고 할때 우리는 이러한 정보를 미리만들어 주어야 합니다. 그럴려면 누군가가 저걸 미리 만들어 주어야 하는데 이때 사용되는것이 initcontainer입니다.
initcontainer는 Pod생성시 가장 먼저 딱 한번만 실행되는 container 입니다. 그래서 이 initcontainer에서 모든 초기화 작업을 해주면 multiple container pod에서 container들이 별도의 추가 설정 없이 쉽게 동작 할 수있습니다.
설정 방법
spec에 initContainers 라는 필드를 추가해주면 됩니다. 사용법은 container를 추가하는 것과 동일 합니다.
k8s 문서: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app.kubernetes.io/name: MyApp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
유의 사항
initcontainer는 kubectl get pod 에서 Ready 개수에 포함 되지 않습니다.
추가 정보2. multi container pod의 재시작 경우
1. container 중 하라라도 죽으면 Pod자체가 재 시작 됩니다.
정리
1. pod에 container를 하나 더 추가하려면 간단하게 container를 하나 더 추가하면 됩니다.
다만, sevice port가 겹치지 않게 유의해야 합니다
2. multi container pod에서 초기화 작업을 할 때 사용되는 container는 initcontainer입니다.
Next Post
[CKA] 20. node operating system update
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 21. k8s cluster upgrade (0) | 2023.05.05 |
---|---|
[CKA] 20. node operating system update (0) | 2023.04.24 |
[CKA] 18. Environment Variables (0) | 2023.03.28 |
[CKA] 17. command and argument (0) | 2023.03.25 |
[CKA] 16. k8s Rolling update and Rollback (2) | 2023.03.23 |