6.2.2. Init Container 생성

다음 예제에서는 Init Container 두 개가 있는 간단한 Pod를 간략하게 설명합니다. 첫 번째 컨테이너는 myservice를 기다리고 두 번째 컨테이너는 mydb를 기다립니다. 두 컨테이너가 모두 완료되면 Pod가 시작됩니다.

프로세스

  1. Init Container에 대한 YAML 파일을 생성합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: registry.access.redhat.com/ubi8/ubi:latest
        command: ['sh', '-c', 'echo The app is running! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: registry.access.redhat.com/ubi8/ubi:latest
        command: ['sh', '-c', 'until getent hosts myservice; do echo waiting for myservice; sleep 2; done;']
      - name: init-mydb
        image: registry.access.redhat.com/ubi8/ubi:latest
        command: ['sh', '-c', 'until getent hosts mydb; do echo waiting for mydb; sleep 2; done;']
  2. myservice 서비스에 대한 YAML 파일을 생성합니다.

    kind: Service
    apiVersion: v1
    metadata:
      name: myservice
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9376
  3. mydb 서비스에 대한 YAML 파일을 생성합니다.

    kind: Service
    apiVersion: v1
    metadata:
      name: mydb
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9377
  4. 다음 명령을 실행하여 myapp-pod를 생성합니다.

    $ oc create -f myapp.yaml

    출력 예

    pod/myapp-pod created

  5. Pod 상태를 확인합니다.

    $ oc get pods

    출력 예

    NAME                          READY     STATUS              RESTARTS   AGE
    myapp-pod                     0/1       Init:0/2            0          5s

    이 Pod 상태는 대기 중임을 나타냅니다.

  6. 다음 명령을 실행하여 서비스를 생성합니다.

    $ oc create -f mydb.yaml
    $ oc create -f myservice.yaml
  7. Pod 상태를 확인합니다.

    $ oc get pods

    출력 예

    NAME                          READY     STATUS              RESTARTS   AGE
    myapp-pod                     1/1       Running             0          2m