Cloud/k8s-CKA

[CKA] 19. multi container pods

jinkwon.kim 2023. 4. 20. 22:50
728x90
반응형

개요

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

 

728x90
반응형

'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