Docker & Kubernetes

초기화 전용 컨테이너 - initContainers

beekei 2022. 2. 4. 01:45
반응형

파드 내에 초기화만을 담당하는 컨테이너를 설정할 수도 있다. 그러면 초기화만을 수행하는 컨테이너와 요청을 처리하는 컨테이너를 별도로 개발하여 각각 재사용할 수 있다.

예를 들어 스토리지를 마운트할 때 '스토리지 안에 새로운 디럭터리를 만들고, 소유자를 변경한 후 데이터를 저장'하는 것과 같은 초기화 처리를 전담할 수 있다.

 

Init-sample.yml

apiVersion: v1
kind: Pod
metadata:
  name: init-sample
spec:
  containers:
  - name: main # 메인 컨테이너
    image: ubuntu
    command: ["/bin/sh"]
    args: ["-c", "tail -f /dev/null"]
    volumeMounts:
    - mountPath: /docs # 마운트 경로
      name: data-vol
      readOnly: false

  initContainers: # 초기화 전용 컨테이너, 메인 컨테이너 전에 실행
  - name: init
    image: alpine
    command: ["/bin/sh"]
    # /mnt/html 디렉터리 생성, 소유자 변경
    args: ["-c", "mkdir /mnt/html; chown 33:33 /mnt/html"] 
    volumeMounts:
    - mountPath: /mnt # 마운트 경로
      name: data-vol
      readOnly: false

  volumes: # 파드상의 공유 볼륨
  - name: data-vol
    emptyDir: {}

 

매니페스트를 적용한다. kubectl exec의 옵션 -c는 파드 내의 컨테이너를 지정하기 위해 사용한다.

생성된 파드에 접속해보면 docs밑에 html의 디렉터리가 생성되어있고 소유자와 그룹이 root가 아닌 www-data로 되어 있는 것을 알 수 있다.

반응형