6.4.2. Pod の Projected ボリュームの設定

Projected ボリュームを作成する場合は、Pprojected ボリュームについてで説明されているボリュームファイルパスの状態を考慮します。

以下の例では、Projected ボリュームを使用して、既存のシークレットボリュームソースをマウントする方法が示されています。以下の手順は、ローカルファイルからユーザー名およびパスワードのシークレットを作成するために実行できます。その後に、シークレットを同じ共有ディレクトリーにマウントするために Projected ボリュームを使用して 1 つのコンテナーを実行する Pod を作成します。

手順

既存のシークレットボリュームソースをマウントするために Projected ボリュームを使用するには、以下を実行します。

  1. 以下を入力し、パスワードおよびユーザー情報を適宜置き換えて、シークレットを含むファイルを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      pass: MWYyZDFlMmU2N2Rm
      user: YWRtaW4=

    user および pass の値には、base64 でエンコーティングされた任意の有効な文字列を使用できます。

    以下の例は、base64 の admin を示しています。

    $ echo -n "admin" | base64

    出力例

    YWRtaW4=

    以下の例は、base64 のパスワード 1f2d1e2e67df を示しています。

    $ echo -n "1f2d1e2e67df" | base64

    出力例

    MWYyZDFlMmU2N2Rm

  2. 以下のコマンドを使用してシークレットを作成します。

    $ oc create -f <secrets-filename>

    以下に例を示します。

    $ oc create -f secret.yaml

    出力例

    secret "mysecret" created

  3. シークレットが以下のコマンドを使用して作成されていることを確認できます。

    $ oc get secret <secret-name>

    以下に例を示します。

    $ oc get secret mysecret

    出力例

    NAME       TYPE      DATA      AGE
    mysecret   Opaque    2         17h

    $ oc get secret <secret-name> -o yaml

    以下に例を示します。

    $ oc get secret mysecret -o yaml
    apiVersion: v1
    data:
      pass: MWYyZDFlMmU2N2Rm
      user: YWRtaW4=
    kind: Secret
    metadata:
      creationTimestamp: 2017-05-30T20:21:38Z
      name: mysecret
      namespace: default
      resourceVersion: "2107"
      selfLink: /api/v1/namespaces/default/secrets/mysecret
      uid: 959e0424-4575-11e7-9f97-fa163e4bd54c
    type: Opaque
  4. volumes セクションが含まれる以下のような Pod 設定ファイルを作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-projected-volume
    spec:
      containers:
      - name: test-projected-volume
        image: busybox
        args:
        - sleep
        - "86400"
        volumeMounts:
        - name: all-in-one
          mountPath: "/projected-volume"
          readOnly: true
      volumes:
      - name: all-in-one
        projected:
          sources:
          - secret:      1
              name: user
          - secret:      2
              name: pass
    1 2
    作成されたシークレットの名前。
  5. 設定ファイルから Pod を作成します。

    $ oc create -f <your_yaml_file>.yaml

    以下に例を示します。

    $ oc create -f secret-pod.yaml

    出力例

    pod "test-projected-volume" created

  6. Pod コンテナーが実行中であることを確認してから、Pod への変更を確認します。

    $ oc get pod <name>

    以下に例を示します。

    $ oc get pod test-projected-volume

    出力は以下のようになります。

    出力例

    NAME                    READY     STATUS    RESTARTS   AGE
    test-projected-volume   1/1       Running   0          14s

  7. 別のターミナルで、oc exec コマンドを使用し、実行中のコンテナーに対してシェルを開きます。

    $ oc exec -it <pod> <command>

    以下に例を示します。

    $ oc exec -it test-projected-volume -- /bin/sh
  8. シェルで、projected-volumes ディレクトリーに展開されるソースが含まれることを確認します。

    / # ls

    出力例

    bin               home              root              tmp
    dev               proc              run               usr
    etc               projected-volume  sys               var