본문 바로가기
Kubernetes

init container (초기화 컨테이너)

by Nirah 2022. 12. 28.

Init container

초기화 컨테이너는 pods의 앱 컨테이너들이 실행되기 전에 실행되는 특수한 컨테이너이다.

초기화 컨테이너는 앱 이미지에는 없는 유틸리티 또는 설정 스크립트 등을 포함할 수 있다.

 

초기화 컨테이너와 일반 컨테이너 차이점

  • 초기화 컨테이너는 항상 완료를 목표로 실행된다.
  • 각 초기화 컨테이너는 다음 초기화 컨테이너가 시작되기 전에 성공적으로 완료되어야 한다.

만약 파드의 초기화 컨테이너가 실패하면, kubelet은 초기화 컨테이너가 성공할 때까지 반복적으로 재시작한다.

그러나, 만약 파드의 restartPolicy 를 절대 하지 않음(Never)으로 설정하고,

해당 파드를 시작하는 동안 초기화 컨테이너가 실패하면, 쿠버네티스는 전체 파드를 실패한 것으로 처리한다.

 

 

https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/

 

초기화 컨테이너

이 페이지는 초기화 컨테이너에 대한 개요를 제공한다. 초기화 컨테이너는 파드의 앱 컨테이너들이 실행되기 전에 실행되는 특수한 컨테이너이다. 초기화 컨테이너는 앱 이미지에는 없는 유틸

kubernetes.io

 

 

 

실습

 

master node에서 작업

busybox 컨테이너와 이에 대한 서비스를 실행하는 init 컨테이너를 yaml파일로 작성해보자.

vi init-container-main.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    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
    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"]

 

이쪽은 서비스를 지정해주는 yaml이다.

vi init-container-srv.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
---
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377

 

k create -f init-container-main.yaml

k create -f init-container-srv.yaml

k get services

 

이때, 한번 서비스를 삭제해보자.

k delete services mydb myservice

 

서비스를 삭제해도 pods가 동작하고 있다.

init 컨테이너는 pods가 시작할 때만 필요하기 때문이다.

k delete pods myapp-pod

'Kubernetes' 카테고리의 다른 글

pods 및 컨테이너 리소스 관리  (0) 2022.12.29
스태틱(static) pods  (1) 2022.12.29
kubernetes Probe  (0) 2022.12.27
kubectl config 명령어 (클러스터 context 변경)  (0) 2022.12.27
Namespace  (0) 2022.12.26