Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第15章 Pod の Preset (プリセット) を使用した情報の Pod への挿入

15.1. 概要

Pod の Preset は、ユーザーが指定する情報を Pod の作成時に Pod に挿入するオブジェクトです。

重要

OpenShift Container Platform 3.7 の時点で、Pod の Preset はサポートされなくなりました。

挿入可能な Pod の Preset オブジェクトを使用します。

開発者は、すべての情報を Pod に追加するために Pod ラベルが PodPreset のラベルセレクターに一致することのみを確認する必要があります。Pod の ラベル は、一致する ラベルセレクター を持つ 1 つ以上の Pod Preset オブジェクトに Pod を関連付けます。

Pod の Preset を使用すると、開発者は Pod が消費するサービスの詳細を把握せずに Pod をプロビジョニングできます。管理者は、開発者が Pod をデプロイできないようにすることなく、サービスの設定項目を開発者に表示されないようにすることができます。たとえば、管理者は環境変数を使ってシークレットおよびデータベースポート経由でデータベースの名前、ユーザー名、パスワードを提供する Pod の Preset を作成できます。Pod 開発者は、すべての情報を Pod に含めるために使用するラベルのみを知っている必要があります。開発者は Pod の Preset を作成し、すべての同じタスクを実行することもできます。たとえば、開発者は環境変数を複数の Pod に自動的に挿入する Preset を作成できます。

Pod の Preset が Pod に適用されると、OpenShift Container Platform は Pod 仕様を変更し、挿入可能なデータを追加し、Pod の Preset で変更されたことを示すアノテーションを Pod 仕様に付けます。アノテーションの形式は以下のとおりです。

podpreset.admission.kubernetes.io/<pod-preset name>: `resource version`

クラスターで Pod の Preset を使用するには、以下を実行します。

  • 管理者は、/etc/origin/master/master -config.yaml で Pod の Preset 受付コントローラープラグインを有効 にする必要があります。
  • Pod の Preset の作成者は Pod の Preset で API タイプの settings.k8s.io/v1alpha1/podpreset を有効にし、挿入可能な情報を Pod の Preset に追加する必要があります。

Pod の作成時にエラーが生じる場合は、Pod の Preset から挿入されたリソースなしに Pod が作成されている場合です。

Pod 仕様の podpreset.admission.kubernetes.io/exclude: "true" パラメーターを使用して、Pod の Preset 変更によって特定の Pod が変更されないようにすることができます。以下の Pod 仕様の例 を参照してください。

注記

Pod の Preset 機能は、サービスカタログ がインストールされている場合にのみ利用できます。

Pod の Preset オブジェクトの例

kind: PodPreset
apiVersion: settings.k8s.io/v1alpha1 1
metadata:
  name: allow-database 2
spec:
  selector:
    matchLabels:
      role: frontend 3
  env:
    - name: DB_PORT 4
      value: "6379" 5
  envFrom:
    - configMapRef: 6
      name: etcd-env-config
    - secretKeyRef: 7
      name: test-secret
  volumeMounts: 8
    - mountPath: /cache
      name: cache-volume
  volumes: 9
    - name: cache-volume
      emptyDir: {}

1
settings.k8s.io/v1alpha1 API を指定します。
2
Pod の Preset の名前。この名前は Pod アノテーションで使用されます。
3
Pod 仕様のラベルに一致するラベルセレクターです。
4 5
コンテナーに渡す環境変数を作成します。
6
ConfigMap を Pod 仕様に追加します。
7
シークレットオブジェクトを Pod 仕様に追加します。
8
外部ストレージボリュームをコンテナー内にマウントするかどうかを指定します。
9
コンテナーが利用できるストレージボリュームを定義します。

Pod 仕様の例

apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: website
    role: frontend 1
spec:
  containers:
    - name: website
      image: ecorp/website
      ports:
        - containerPort: 80

1
Pod の Preset のラベルセレクターに一致するラベルです。

Pod の Preset 適用後の Pod 仕様の例

apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: website
    role: frontend
  annotations:
    podpreset.admission.kubernetes.io/allow-database: "resource version" 1
spec:
  containers:
    - name: website
      image: ecorp/website
      volumeMounts: 2
        - mountPath: /cache
          name: cache-volume
      ports:
        - containerPort: 80
      env: 3
        - name: DB_PORT
          value: "6379"
      envFrom: 4
        - configMapRef:
          name: etcd-env-config
        - secretKeyRef:
          name: test-secret
  volumes: 5
    - name: cache-volume
      emptyDir: {}

1
Pod 仕様が変更を禁止するように設定されていない場合に、Pod の Preset が挿入されたことを示すアノテーションが追加されます。
2
ボリュームマウントが Pod に追加されます。
3
環境変数が Pod に追加されます。
4
Pod に追加される ConfigMap およびシークレットオブジェクト。
5
ボリュームマウントが Pod に追加されます。

Pod を Pod の Preset から除外する Pod 仕様の例

apiVersion: v1
kind: Pod
metadata:
  name: no-podpreset
  labels:
    app: website
    role: frontend
  annotations:
    podpreset.admission.kubernetes.io/exclude: "true" 1
spec:
  containers:
    - name: hello-pod
      image: docker.io/ocpqe/hello-pod

1
Pod の Preset 機能がこの Pod を挿入できないようにするにはこのパラメーターを追加します。