k8s

CKA 준비 (14) Init container를 포함한 pod 운영

Joon0464 2022. 6. 7. 21:26

이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 https://www.youtube.com/watch?v=KdATmTulf7s&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=1 

 

 

 

 

 

이론)

Init 컨테이너

- Pod 가 실행될 때 main 컨테이너가 동작하기 전에 먼저 실행되는 컨테이너

- 유틸리티 또는 설정 스크립트등을 포함할 수 있음 -> main 컨테이너가 실행되기 전에 해야되는 작업들을 지정 (Pod 내의 환경 구성, main 컨테이너가 실행되기 위한 data 파일이 있는지 없는지 확인 등등..)

- init 컨테이너는 항상 완료상태를 목표로 실행됨
- 여러개의 init 컨테이너 설정 가능

- 모든 init 컨테이너가 완료상태가 되어야 main 컨테이너가 동작할 수 있다.

 

다음 Documentation 참고

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

 

Init Containers

This page provides an overview of init containers: specialized containers that run before app containers in a Pod. Init containers can contain utilities or setup scripts not present in an app image. You can specify init containers in the Pod specification

kubernetes.io

문제)

  • Perform the following
  • Tasks:
    • Add an init container to web-pod(which has been defined in spec file /data/cka/webpod.yaml).
    • The init container should create an empty file named /workdir/data.txt.
    • If /workdir/data.txt is not detected the Pod should exit.
    • Once the spec file has been updated with the init container definition, the Pod should be created.

 

답안)

- webpod.yaml 파일 내용 확인

$ cat /data/workdir/webpod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web-pod
spec:
  containers:
  - image: busybox:1.28
    name: main
    command: ['sh','-c','if [ !-f /workdir/data.txt ];then exit 1;else sleep 300;fi']
    volumeMounts:
    - name: workdir
      mountPath: "/workdir"
  volumes:
  - name: workdir
    emptyDir: {}

- init containers 추가

$ sudo vi /data/workdir/webpod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web-pod
spec:
  containers:
  - image: busybox:1.28
    name: main
    command: ['sh','-c','if [ !-f /workdir/data.txt ];then exit 1;else sleep 300;fi']
    volumeMounts:
    - name: workdir
      mountPath: "/workdir"
  initContainers:
  - name: init
    image: busybox:1.28
    command: ['sh', '-c', "touch /workdir/data.txt"]
    volumeMounts:
    - name: workdir
      mountPath: "/workdir"
  volumes:
  - name: workdir
    emptyDir: {}

- webpod.yaml 파드 동작

$ sudo kubectl apply -f /data/cka/webpod.yaml

- pod 생성 확인

$ sudo kubectl get pods

 

pod가 생성되어 running 상태를 확인할 수 있다.

- Pod 에 exec 로 접근하여 data.txt가 생성되었는지 확인

$ sudo kubectl exec web-pod -c main -- ls -l /workdir/data.txt