第20章 Azure の設定

20.1. 概要

OpenShift Container Platform は、Microsoft Azure ディスクをアプリケーションデータの永続ストレージとして使用するなど、Azure インフラストラクチャーにアクセスするように設定できます。これを実行するには、Microsoft Azure を適切に設定した後に OpenShift Container Platform ホストで追加の設定を行う必要があります。

20.2. パーミッション

OpenShift Container Platform 向けに Microsoft Azure を設定するには、以下のロールが必要です。

Contributor

すべての種類の Microsoft Azure リソースを作成し、管理します。

管理者ロールの追加に関する詳細情報は、「Azure サブスクリプション管理者の追加または変更」を参照してください。

20.3. 前提条件

  • OpenShift Container Platform バージョン 3.5 以降で、Microsoft Azure Disk を永続ボリュームとして使用する場合には、Azure Cloud Provider を有効化する必要があります。
  • Microsoft Azure で実行している OpenShift Container Platform ノードの仮想マシン (VM) はすべて、単一のリソースグループに所属する必要があります。
  • Microsoft Azure 仮想マシンは、OpenShift Container Platform ノードと同じにする必要があり、これには大文字を含めることはできません。
  • Azure Managed Disks (マネージドディスク) を使用する予定の場合:

    • OpenShift Container Platform バージョン 3.7 以降が必要です。
    • Azure マネージドディスクで、仮想マシンを作成する必要があります。
  • アンマネージドディスクを使用する予定の場合:

    • アンマネージドディスクで、仮想マシンを作成する必要があります。
  • OpenShift Container Platform クラスターに、カスタムの DNS 設定を使用する場合やクラスターノードが別の Microsoft Azure Virtual Networks (VNet) に含まれる場合には、クラスター内の各ノードが他のノードの IP アドレスを解決できるように、DNS を設定する必要があります。

20.4. Azure 設定ファイル

Azure ついて OpenShift Container Platform を設定するには、各ノードホストに /etc/azure/azure.conf ファイルが必要です。

ファイルが存在しない場合は、ファイルを作成し、以下を追加します。

tenantId: <> 1
subscriptionId: <> 2
aadClientId: <> 3
aadClientSecret: <> 4
aadTenantId: <> 5
resourceGroup: <> 6
cloud: <> 7
location: <> 8
vnetName: <> 9
securityGroupName: <> 10
primaryAvailabilitySetName: <> 11
1
クラスターがデプロイされているサブスクリプションの AAD テナント ID。
2
クラスターがデプロイされている Azure サブスクリプション ID。
3
Azure RM API と対話するための RBAC アクセス権を持つ AAD アプリケーションのクライアント ID。
4
Azure RM API と対話するための RBAC アクセス権を持つ AAD アプリケーションのクライアントシークレット。
5
これがテナント ID と同一であることを確認します (オプション)。
6
Azure VM が属する Azure のリソースグループ名。
7
特定のクラウドリージョン。AzurePublicCloud など。
8
コンパクトな形式の Azure リージョン。southeastasia など (オプション)。
9
インスタンスを含む仮想ネットワーク。ロードバランサー作成時に使用します。
10
インスタンスとロードバランサーに関連付けられているセキュリティーグループ名。
11
ロードバランサーなどのリソースの作成時に使用するように設定されている可用性 (オプション)。
重要

インスタンスへのアクセスに使用される NIC には internal-dns-name が設定されている必要があります。これがないと、ノードはクラスターに再結合できず、コンソールにビルドログを表示できず、oc rsh が正常に機能しなくなる可能性があります。

20.4.1. クラスターのインストール中の Azure の設定

クラスターのインストール時に、Azure は以下のパラメーターを使用して設定できます。これらのパラメーターは、インベントリーファイルで設定可能です。

# Cloud Provider Configuration
#
# Note: You may make use of environment variables rather than store
# sensitive configuration within the ansible inventory.
# For example:
openshift_cloudprovider_kind=azure
openshift_cloudprovider_azure_client_id="{{ lookup('env','AZURE_CLIENT_ID') }}"
openshift_cloudprovider_azure_client_secret="{{ lookup('env','AZURE_CLIENT_SECRET') }}"
openshift_cloudprovider_azure_tenant_id="{{ lookup('env','AZURE_TENANT_ID') }}"
openshift_cloudprovider_azure_subscription_id="{{ lookup('env','AZURE_SUBSCRIPTION_ID') }}"
openshift_cloudprovider_azure_resource_group=openshift
openshift_cloudprovider_azure_location=australiasoutheast
注記

Ansible が Azure を設定する際に、以下のファイルがユーザー用に追加で作成されます。

  • /etc/origin/cloudprovider/azure.conf

20.4.2. Azure 向けのマスターホストの手動設定

すべてのマスターで、マスター設定ファイル (デフォルトは /etc/origin/master/master-config.yaml) を編集するか、または作成し、apiServerArgumentscontrollerArguments の各セクションの内容を更新します。

kubernetesMasterConfig:
  ...
  apiServerArguments:
    cloud-provider:
      - "azure"
    cloud-config:
      - "/etc/azure/azure.conf"
  controllerArguments:
    cloud-provider:
      - "azure"
    cloud-config:
      - "/etc/azure/azure.conf"
重要

コンテナー化インストールをトリガーすると、/etc/origin/var/lib/origin のディレクトリーのみがマスターとノードのコンテナーにマウントされます。したがって、master-config.yaml/etc/ ではなく /etc/origin/master になければなりません。

20.4.3. Azure 向けのノードホストの手動設定

  1. 適切なノード設定マップを編集して、kubeletArguments セクションの内容を更新します。

    kubeletArguments:
      cloud-provider:
        - "azure"
      cloud-config:
        - "/etc/azure/azure.conf"
    重要

    コンテナー化インストールをトリガーすると、/etc/origin/var/lib/origin のディレクトリーのみがマスターとノードのコンテナーにマウントされます。したがって、node-config.yaml/etc/ ではなく /etc/origin/node になければなりません。

20.4.4. 手動による設定変更の適用

マスターおよびノードのすべてのホストで OpenShift Container Platform サービスを起動または再起動し、設定の変更を適用します。「OpenShift Container Platform サービスの再起動」を参照してください。

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

クラウドプロバイダーを使用しない状態から、使用するように切り替えると、エラーメッセージが表示されます。クラウドプロバイダーを追加すると、ノードが hostnameexternalID として使用する (クラウドプロバイダーが使用されていなかった場合のケース) 代わりに、クラウドプロバイダーの instance-id (クラウドプロバイダーによって指定される) の使用に切り替えるため、ノードの削除が試みられます。この問題を解決するには、以下を実行します。

  1. CLI にクラスター管理者としてログインします。
  2. 既存のノードラベルをチェックし、これらをバックアップします。

    $ oc describe node <node_name> | grep -Poz '(?s)Labels.*\n.*(?=Taints)'
  3. ノードを削除します。

    $ oc delete node <node_name>
  4. 各ノードホストで OpenShift Container Platform サービスを再起動します。

    # systemctl restart atomic-openshift-node
  5. 以前に使用していた各ノードのラベルを再度追加します。