第21章 VMWare vSphere の設定

21.1. 概要

OpenShift Container Platform は、VMWare vSphere VMDK ボリュームをアプリケーションデータの永続ストレージとして使用するなど、VMWare vSphere VMDK ボリュームにアクセスするように設定できます。

vSphere クラウドプロバイダーは、OpenShift Container Platform 内での vSphere の管理対象ストレージの使用を許可します。vSphere クラウドプロバイダーは以下に対応しています。

  • ボリューム
  • 永続ボリューム
  • ストレージクラスとボリュームのプロビジョニング

21.2. VMWare vSphere クラウドプロバイダーの有効化

重要

VMware vSphere を有効化すると、各ノードの仮想マシンに VMware ツールをインストールする必要があります。詳しい情報は、「VMware ツールのインストール」を参照してください。

OpenShift Container Platform で VMWare vSphere クラウドプロバイダーを有効にするには、以下を実行します。

  1. VM フォルダーを作成し、OpenShift Container Platform ノード VM をこのフォルダーに移動します。
  2. ノードの VM 名が正規表現 [a-z](()?[0-9a-z])?(\.[a-z0-9](([-0-9a-z])?[0-9a-z])?)* に従っていることを確認します。

    重要

    VM 名では以下が禁止されています。

    • 数字から始めることはできません。
    • 大文字を含めることはできません。
    • - 以外の特殊文字を含めることはできません。
    • 文字数は 3 文字未満、64 文字以上に指定できません。
  3. 各ノード VM で disk.EnableUUID パラメーターを TRUE に設定します。これにより VMDK は常に一貫した UUID を VM に提供し、ディスクが適切にマウントされるようになります。クラスターに参加するすべての仮想マシンノードについては、以下の GOVC ツールを使用する手順に従ってください。

    1. GOVC 環境をセットアップします。

      export GOVC_URL='vCenter IP OR FQDN'
      export GOVC_USERNAME='vCenter User'
      export GOVC_PASSWORD='vCenter Password'
      export GOVC_INSECURE=1
    2. ノード VM パスを見つけます。

      govc ls /datacenter/vm/<vm-folder-name>
    3. すべての VM で disk.EnableUUID を true に設定します。

      govc vm.change -e="disk.enableUUID=1" -vm='VM Path'
      注記

      OpenShift Container Platform ノード VM がテンプレート VM で作成されている場合、disk.EnableUUID=1 をテンプレート VM に設定することができます。このテンプレートからクローン作成される VM はこのプロパティーを継承します。

  4. ロールを作成して、ロールを vSphere クラウドプロバイダーユーザーと vSphere エンティティーに割り当てます。vSphere クラウドプロバイダーでは、vCenter と対話するために以下の権限が必要になります。カスタムロール、ユーザーおよびロールの割り当てを作成する手順については、vSphere Documentation Center を参照してください。

    ロール権限エンティティー子への伝播

    manage-k8s-node-vms

    Resource.AssignVMToPool System.Anonymous System.Read System.View VirtualMachine.Config.AddExistingDisk VirtualMachine.Config.AddNewDisk VirtualMachine.Config.AddRemoveDevice VirtualMachine.Config.RemoveDisk VirtualMachine.Inventory.Create VirtualMachine.Inventory.Delete

    クラスター、ホスト、VM フォルダー

    必要

    manage-k8s-volumes

    Datastore.AllocateSpace Datastore.FileManagement System.Anonymous System.Read System.View

    データストア

    No

    k8s-system-read-and-spbm-profile-view

    StorageProfile.View System.Anonymous System.Read System.View

    vCenter

    No

    ReadOnly

    System.Anonymous System.Read System.View

    データセンター、データストアクラスター、データストアストレージフォルダー

    No

注記

vSphere クラウドプロバイダーを有効にすると、ノード名が vCenter インベントリーの VM 名に設定されます。

21.3. VMWare vSphere 設定ファイル

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

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

[Global]
        user = "username" 1
        password = "password" 2
        server = "10.10.0.2" 3
        port = "443" 4
        insecure-flag = "1" 5
        datacenter = "datacenter-name" 6
        datastore = "datastore-name" 7
        working-dir = "vm-folder-path" 8
        vm-uuid = "vm-uuid" 9
[Disk]
    scsicontrollertype = pvscsi
1
vSphere クラウドプロバイダーの vCenter ユーザー名。
2
指定されたユーザーの vCenter パスワード。
3
vCenter サーバーの IP アドレスまたは FQDN。
4
(オプション) vCenter サーバーのポート番号。デフォルトはポート 443 になります。
5
vCenter が自己署名証明書を使用している場合は 1 に設定します。
6
ノード VM がデプロイされているデータセンターの名前。
7
ストレージクラスまたは動的プロビジョニングを使ったボリュームのプロビジョニングに使用されるデータストアの名前。データストアがストレージフォルダー内にある場合やデータストアがデータストアクラスターのメンバーである場合には、データストアの完全なパスを指定します。vSphere クラウドプロバイダーユーザーには、データストアを検索できるように、データストアクラスターまたはストレージフォルダーで読み取り権限が設定されている必要があります。
8
(オプション) ノード VM が置かれている vCenter VM フォルダーパス。ノード VM がルートの VM フォルダーにある場合、空のパス (working-dir = "") に設定することができます。
9
(オプション) ノード VM の VM インスタンス UUID。空 (vm-uuid = "") に設定することができます。空に設定する場合、これは仮想マシン上の /sys/class/dmi/id/product_serial ファイルから取得されます (root アクセス権が必要)。

21.4. マスターの設定

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

kubernetesMasterConfig:
  admissionConfig:
    pluginConfig:
      {}
  apiServerArguments:
    cloud-provider:
    - "vsphere"
    cloud-config:
    - "/etc/origin/cloudprovider/vsphere.conf"
  controllerArguments:
    cloud-provider:
    - "vsphere"
    cloud-config:
    - "/etc/origin/cloudprovider/vsphere.conf"
重要

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

21.5. ノードの設定

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

    kubeletArguments:
      cloud-provider:
        - "vsphere"
      cloud-config:
        - "/etc/origin/cloudprovider/vsphere.conf"
    重要

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

21.6. 設定変更の適用

マスターおよびノードのすべてのホストで 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. 以前に使用していた各ノードのラベルを再度追加します。

21.7. 永続ボリュームのバックアップ

OpenShift Container Platform は、自由にクラスター内のノードにあるボリュームをアタッチしたり、アタッチ解除できるように、個別の永続ディスク として新規ボリュームをプロビジョニングします。そのため、スナップショットを使用するボリュームはバックアップできません

以下の方法で、PV のバックアップを作成します。

  1. PV を使用してアプリケーションを停止します。
  2. 永続ディスクのクローンを作成します。
  3. アプリケーションを再起動します。
  4. クローンしたディスクのバックアップを作成します。
  5. クローンしたディスクを削除します。