Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第27章 グローバルビルドのデフォルトと上書きの設定

27.1. 概要

開発者はプロジェクト内の特定のビルド設定において、Git クローン作成のためのプロキシー設定などの設定を定義することができます。開発者に特定の設定をそれぞれのビルド設定で定義するように要求するのではなく、管理者が受付制御プラグインを使用して、すべてのビルドでこの設定を自動的に使用するグローバルビルドのデフォルトと上書きを設定することができます。

これらのプラグインから取得した設定は、ビルドプロセス時に使用されるだけで、ビルド設定やビルド自体で設定されません。プラグインでの設定を使用することで、管理者はグローバル設定をいつでも変更することができ、既存のビルド設定またはビルドから実行されたビルドに、新規設定が割り当てられます。

  • BuildDefaults 受付制御プラグインを使用すると、管理者は Git HTTP や HTTPS プロキシーなどの設定についてのグローバルなデフォルトと、デフォルトの環境変数を設定することができます。これらのデフォルトによって、特定のビルド用に設定された値が上書きされることはありません。ただし、それらの値がビルド定義に存在しない場合は、デフォルト値に設定されます。
  • BuildOverrides 受付制御プラグインを使用すると、管理者はビルドに保存されている値に関係なく、ビルドの設定を上書きできます。現時点では、このプラグインには、ビルド時にレジストリーからのローカルイメージが強制的に更新されるように、ビルドストラテジーの forcePull フラグを上書きするサポートがあります。更新することで、ユーザーはプル可能なイメージでしかビルドできないようにします。このプラグインは、イメージラベルセットが全ビルドイメージに適用されるように設定することも可能です。

    BuildOverrides の受付制御プラグインと上書き可能な値の設定に関する情報は、「グローバルビルドの上書きの手動設定」を参照してください。

デフォルトのノードセレクターおよび、BuildDefaults または BuildOverride 受付プラグインは以下のように連携されます。

  • マスター設定ファイルの projectConfig.defaultNodeSelector フィールドに定義されているデフォルトのプロジェクトノードセレクターは、指定の nodeSelector 値なしに、全プロジェクトに作成済みの Pod に適用されます。これらの設定は、BuildDefaults または BuildOverride ノードセレクターが設定されていないクラスターで、nodeSelector="null" が指定されているビルドに適用されます。
  • nodeSelector="null" パラメーターがビルド設定に設定されている場合のみ、クラスター全体のデフォルトのビルドノードセレクター admissionConfig.pluginConfig.BuildDefaults.configuration.nodeSelector が適用されます。nodeSelector=null はデフォルト設定です。
  • デフォルトのプロジェクトまたはクラスター全体のノードセレクターの場合には、デフォルト設定がビルドのノードセレクターに AND として追加されます。このビルドのノードセレクターは、BuildDefaults または BuildOverride 受付プラグインで設定されます。これらの設定は、BuildOverrides ノードセレクターとプロジェクトのデフォルトノードセレクターの条件を満たすノードに対してのみ、ビルドがスケジューリングされるという意味です。

    注記

    RunOnceDuration プラグインを使用することで、ビルド Pod の実行時間のハード制限を定義できます。

27.2. グローバルビルドのデフォルトの設定

グローバルビルドのデフォルトは以下の 2 通りの方法で設定できます。

27.2.1. Ansible を使用したグローバルビルドのデフォルトの設定

通常インストール (Advanced installation) の実行時に、インベントリーファイルで設定可能な 以下のパラメーターを使用して BuildDefaults プラグインを設定することができます。

  • openshift_builddefaults_http_proxy
  • openshift_builddefaults_https_proxy
  • openshift_builddefaults_no_proxy
  • openshift_builddefaults_git_http_proxy
  • openshift_builddefaults_git_https_proxy
  • openshift_builddefaults_git_no_proxy
  • openshift_builddefaults_image_labels
  • openshift_builddefaults_nodeselectors
  • openshift_builddefaults_annotations
  • openshift_builddefaults_resources_requests_cpu
  • openshift_builddefaults_resources_requests_memory
  • openshift_builddefaults_resources_limits_cpu
  • openshift_builddefaults_resources_limits_memory

例27.1 Ansible を使用したビルドのデフォルトの設定例

# These options configure the BuildDefaults admission controller which injects
# configuration into Builds. Proxy related values will default to the global proxy
# config values. You only need to set these if they differ from the global proxy settings.
openshift_builddefaults_http_proxy=http://USER:PASSWORD@HOST:PORT
openshift_builddefaults_https_proxy=https://USER:PASSWORD@HOST:PORT
openshift_builddefaults_no_proxy=mycorp.com
openshift_builddefaults_git_http_proxy=http://USER:PASSWORD@HOST:PORT
openshift_builddefaults_git_https_proxy=https://USER:PASSWORD@HOST:PORT
openshift_builddefaults_git_no_proxy=mycorp.com
openshift_builddefaults_image_labels=[{'name':'imagelabelname1','value':'imagelabelvalue1'}]
openshift_builddefaults_nodeselectors={'nodelabel1':'nodelabelvalue1'}
openshift_builddefaults_annotations={'annotationkey1':'annotationvalue1'}
openshift_builddefaults_resources_requests_cpu=100m
openshift_builddefaults_resources_requests_memory=256Mi
openshift_builddefaults_resources_limits_cpu=1000m
openshift_builddefaults_resources_limits_memory=512Mi

# Or you may optionally define your own build defaults configuration serialized as json
#openshift_builddefaults_json='{"BuildDefaults":{"configuration":{"apiVersion":"v1","env":[{"name":"HTTP_PROXY","value":"http://proxy.example.com.redhat.com:3128"},{"name":"NO_PROXY","value":"ose3-master.example.com"}],"gitHTTPProxy":"http://proxy.example.com:3128","gitNoProxy":"ose3-master.example.com","kind":"BuildDefaultsConfig"}}}'

27.2.2. グローバルビルドのデフォルトの手動設定

BuildDefaults プラグインを設定するには、以下の手順を実行します。

  1. マスターノードの /etc/origin/master/master-config.yaml ファイルにプラグインの設定を追加します。

    admissionConfig:
      pluginConfig:
        BuildDefaults:
          configuration:
            apiVersion: v1
            kind: BuildDefaultsConfig
            gitHTTPProxy: http://my.proxy:8080 1
            gitHTTPSProxy: https://my.proxy:8443 2
            gitNoProxy: somedomain.com, otherdomain.com 3
            env:
            - name: HTTP_PROXY 4
              value: http://my.proxy:8080
            - name: HTTPS_PROXY 5
              value: https://my.proxy:8443
            - name: BUILD_LOGLEVEL 6
              value: 4
            - name: CUSTOM_VAR 7
              value: custom_value
            imageLabels:
            - name: url 8
              value: https://containers.example.org
            - name: vendor
              value: ExampleCorp Ltd.
            nodeSelector: 9
              key1: value1
              key2: value2
            annotations: 10
              key1: value1
              key2: value2
            resources: 11
              requests:
                cpu: "100m"
                memory: "256Mi"
              limits:
                cpu: "100m"
                memory: "256Mi"
    1
    Git リポジトリーからソースコードのクローンを作成する場合に使用する HTTP プロキシーを設定します。
    2
    Git リポジトリーからソースコードのクローンを作成する場合に使用する HTTPS プロキシーを設定します。
    3
    プロキシーを実行しないドメインの一覧を設定します。
    4
    ビルド時に使用する HTTP プロキシーを設定するデフォルトの環境変数。この環境変数は、アセンブルおよびビルドの段階で依存関係をダウンロードするために使用できます。
    5
    ビルド時に使用する HTTPS プロキシーを設定するデフォルトの環境変数。この環境変数は、アセンブルおよびビルドの段階で依存関係をダウンロードするために使用できます。
    6
    ビルド時にビルドのログレベルを設定するデフォルトの環境変数。
    7
    すべてのビルドに追加されるその他のデフォルトの環境変数。
    8
    すべてのイメージビルドに適用されるラベル。このラベルは BuildConfig で上書きできます。
    9
    ビルド Pod は key1=value2 および key2=value2 のラベルが付いたノード上でのみ実行されます。ユーザーは、これらの値が無視される場合に、ビルドに対して異なる nodeSelectors セットを定義することができます。
    10
    ビルド Pod にはこれらのアノテーションが追加されます。
    11
    BuildConfig に関連リソースが定義されていない場合は、デフォルトのリソースをビルド Pod に設定します。
  2. 変更を有効にするために、マスターサービスを再起動します。

    # systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers

27.3. グローバルビルドの上書きの設定

グローバルビルドの上書きは以下の 2 通りの方法で設定できます。

27.3.1. Ansible を使用したグローバルビルドの上書きの設定

通常インストール (Advanced installation) の実行時に、インベントリーファイルで設定可能な以下のパラメーターを使用して BuildOverrides プラグインを設定できます。

  • openshift_buildoverrides_force_pull
  • openshift_buildoverrides_image_labels
  • openshift_buildoverrides_nodeselectors
  • openshift_buildoverrides_annotations
  • openshift_buildoverrides_tolerations

例27.2 Ansible を使用したビルドの上書きの設定例

# These options configure the BuildOverrides admission controller which injects
# configuration into Builds.
openshift_buildoverrides_force_pull=true
openshift_buildoverrides_image_labels=[{'name':'imagelabelname1','value':'imagelabelvalue1'}]
openshift_buildoverrides_nodeselectors={'nodelabel1':'nodelabelvalue1'}
openshift_buildoverrides_annotations={'annotationkey1':'annotationvalue1'}
openshift_buildoverrides_tolerations=[{'key':'mykey1','value':'myvalue1','effect':'NoSchedule','operator':'Equal'}]

# Or you may optionally define your own build overrides configuration serialized as json
#openshift_buildoverrides_json='{"BuildOverrides":{"configuration":{"apiVersion":"v1","kind":"BuildOverridesConfig","forcePull":"true","tolerations":[{'key':'mykey1','value':'myvalue1','effect':'NoSchedule','operator':'Equal'}]}}}'

27.3.2. グローバルビルドの上書きの手動設定

BuildOverrides プラグインを設定するには、以下の手順を実行します。

  1. マスターの /etc/origin/master/master-config.yaml ファイルにプラグインの設定を追加します。

    admissionConfig:
      pluginConfig:
        BuildOverrides:
          configuration:
            apiVersion: v1
            kind: BuildOverridesConfig
            forcePull: true 1
            imageLabels:
            - name: distribution-scope 2
              value: private
            nodeSelector: 3
              key1: value1
              key2: value2
            annotations: 4
              key1: value1
              key2: value2
            tolerations: 5
            - key: mykey1
              value: myvalue1
              effect: NoSchedule
              operator: Equal
            - key: mykey2
              value: myvalue2
              effect: NoExecute
              operator: Equal
    1
    ビルドの開始前に、すべてのビルドがビルダーイメージとソースイメージをプルするよう強制的に実行します。
    2
    すべてのイメージビルドに適用される追加のラベル。ここで定義されたラベルは BuildConfig で定義されたラベルよりも優先されます。
    3
    ビルド Pod は key1=value2 および key2=value2 のラベルが付けられたノード上でのみ実行されます。ユーザーはキー/値のラベルを追加定義して、ビルドが実行されるノードのセットをさらに制限することができます。ただし、ノードには少なくともこれらのラベルを付ける必要があります。
    4
    ビルド Pod にはこれらのアノテーションが追加されます。
    5
    ビルド Pod にある既存の容認はここに一覧されている値で上書きされます。
  2. 変更を有効にするために、マスターサービスを再起動します。

    # systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers