5.2.2. Init コンテナーの作成

以下の例は、2 つの init コンテナーを持つ単純な Pod の概要を示しています。1 つ目は myservice を待機し、2 つ目は mydb を待機します。両方のコンテナーが完了すると、Pod が開始されます。

手順

  1. init コンテナーの YAML ファイルを作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: busybox
        command: ['sh', '-c', 'echo The app is running! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: busybox
        command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
      - name: init-mydb
        image: busybox
        command: ['sh', '-c', 'until nslookup 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