본문 바로가기
Linux&Ubuntu/Docker&kuber

init container 란

by Vittorio_Lee 2023. 9. 6.
728x90
반응형
SMALL


-init container 가 성공해야 앱컨테이너가 실행됨 
1)앱컨테이너가 실행 전에 미리 동작 시킬 컨테이너 
2)본 container가 실행되기 전에 사전 작업이 필요한 경우 사용
3)초기화 컨테이너가 모두 실행된 후에 앱 컨테이너를 실행
https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/

예제

 

# vi myapp.yaml
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"]
# kubectl apply -f myapp.yaml
Every 2.0s: kubectl get pods -o wide                                                                     master: Wed Sep  6 08:55:02 2023

NAME        READY   STATUS     RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
myapp-pod   0/1     Init:0/2   0          14s   10.101.1.132   worker2              
status에 Init:0/2 가 걸린것을 확인할수 있다 .

 

# vi myapp-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

 

# kubectl create -f myapp-svc.yaml 
service/myservice created

하나만 추가시 init:1/2가 되고 

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

도 추가해서 같이 올린다 
그러면 앱컨테이너가 올라옵니다. 

 

infra container (pause) 이해하기 

pause 는 존재하지만 infra 구축만 해주는 역활 대신 pod 를 지우면 같이지워집니다. 

728x90
반응형
LIST