[Kubernetes] Init Containers의 동작 확인

4704 단어 kubectlkubernetes

소개



이번에는 Init Containers의 동작을 확인하고 싶습니다.
Init Containers는 응용 프로그램 컨테이너 앞에 실행되고 응용 프로그램 컨테이너의 이미지에 존재하지 않는 설치 스크립트와 유틸리티를 포함하는 특수 컨테이너입니다.

유스 케이스로는, 보안의 관점에서 어플리케이션 컨테이너 이미지에 포함하고 싶지 않은 툴의 실행 등이 있습니다.
그 외, 이하의 메뉴얼에도 기재되어 있습니다.

Init 컨테이너는 무엇에 사용할 수 있습니까?

설정



그럼 실제로 Init Containers를 실행하고 싶습니다. 여기에서는 Init Containers를 이용하여 nginx의 index.html 파일을 작성하고 있습니다.
또한 Init Containers는 여러 개 설정할 수 있습니다.

initContainer.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-init
  labels:
    app: app1
spec:
  initContainers:
  - name: init01
    image: centos:latest
    args:
    - /bin/sh
    - -c
    - echo "test" > /test/index.html
    volumeMounts:
    - mountPath: /test
      name: nginx-index
  containers:
  - name: nginx
    image: nginx:latest
    volumeMounts:
    - mountPath: /usr/share/nginx/html/
      name: nginx-index
  volumes:
  - name: nginx-index
    hostPath:
      path: /test
      type: Directory

이 설정을 그림으로 하면 다음과 같이 됩니다.


  • Init Containes 초기화 프로세스에서 마운트된 볼륨에 index.html 파일을 작성합니다.
  • 초기화 프로세스가 끝나면 응용 프로그램 컨테이너를 시작하고 index.html 파일을 만든 볼륨에 마운트합니다.

  • 동작 확인



    위의 매니페스트를 적용합니다. 이 때 다른 터미널에서 Pod 상태를 확인합니다.
    $ kubectl apply -f initContainer.yaml
    pod/nginx-init created
    
    $ kubectl get pod -w
    NAME         READY   STATUS    RESTARTS   AGE
    nginx-init   0/1     Pending   0          0s
    nginx-init   0/1     Pending   0          0s
    nginx-init   0/1     Init:0/1   0          0s
    nginx-init   0/1     Init:0/1   0          1s
    nginx-init   0/1     PodInitializing   0          5s
    nginx-init   1/1     Running           0          9s
    

    포드가 실행되기 전에 Init 처리가 실행 중임을 알 수 있습니다.

    외부 서버에서 액세스하여 확인합니다. LoadBalancer가 작성되었습니다.
    $ kubectl get svc
    NAME            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
    kubernetes      ClusterIP      10.96.0.1       <none>         443/TCP          103d
    load-balancer   LoadBalancer   10.111.156.47   10.20.30.150   8080:30002/TCP   5d22h
    
    [client]$ curl -s http://10.20.30.150:8080
    test
    

    Init Containers에서 만든 index.html에서 요청이 반환되고 있습니다.

    요약



    이번 확인한 Init Containers를 이용하면, 전처리로서 다양한 처리를 할 수 있네요.
    Kubernetes의 기본에서 응용 프로그램에 들어오고 있다고 생각하지만, 앱에 대한 생각이 점점 더 필요해지고 있다고 느끼고 있습니다. 인프라 가게라고 말하지만, 피해서는 통과할 수 없네요. 노력하지 않으면.

    좋은 웹페이지 즐겨찾기