vSphere インフラストラクチャ構成ファイル

このページでは、トポロジ ドメインの設定で使用される vSphere インフラストラクチャ構成ファイルのフィールドについて説明します。このファイルは、管理クラスタ構成ファイルの infraConfigFilePath が設定されている場合に必要です。

以降のセクションでは、Secret カスタム リソースと VSphereInfraConfig カスタム リソースのオブジェクトとフィールドについて説明します。フィールドの例については、後述の構成ファイルの例をご覧ください。

「省略可」と記載されていない限り、構成ファイルのすべてのフィールドは必須です。

Secret

各 vCenter Server の認証情報を格納する vSphere 認証情報 Secret を記述します。管理クラスタとユーザー クラスタに使用する vCenter Server インスタンスの数に応じて、必要に応じて Secret を追加または削除します。各オブジェクトは --- で区切る必要があります。管理クラスタの作成が正常に完了したら、この構成ファイルからすべての Secret を削除できます。

Secret.name

変更不可
文字列

Secret の名前。この名前は、VSphereInfraConfig カスタム リソースの credentials.vCenters[i].secretName フィールドの名前のいずれかと一致する必要があります。

Secret.namespace

変更不可
文字列
事前入力: kube-system

Secret が存在する Namespace。この Namespace は、VSphereInfraConfig カスタム リソースの対応する credentials.vCenters[i].secretNamespace フィールドと一致する必要があります。

stringData.admin-usernamestringData.admin-password

vCenter Server 管理者のロールまたは同等の権限を持つ vCenter ユーザー アカウントの認証情報。詳細については、vCenter ユーザー アカウント権限をご覧ください。

stringData.ca-crt

変更可
複数行の文字列

vCenter Server の Base64 でエンコードされた CA 証明書。

Base64 でエンコードされた証明書を表示するコマンドを実行するまで、vCenter CA ルート証明書の取得の手順に沿って操作します。証明書全体をコピーしてこのフィールドに貼り付けます。

VSphereInfraConfig

vSphere インフラストラクチャの構成。この構成は管理クラスタに保存され、管理クラスタとその管理対象のすべてのユーザー クラスタで共有されます。各管理クラスタには、vSphere インフラストラクチャ構成を 1 つだけ設定する必要があります。

VSphereInfraConfig.name

変更不可
文字列
事前入力: デフォルト

vSphere インフラストラクチャ構成の名前。

credentials

vSphere インフラストラクチャ構成で使用される認証情報。

credentials.vCenters

オブジェクトの配列。それぞれに各 vCenter Server の Secret 参照が含まれています。必要に応じてエントリを追加または削除します。管理クラスタの作成後、必要に応じて新しい credentials.vCenters オブジェクトを構成ファイルに追加し、gkectl update admin を実行してクラスタ内の構成を更新できます。

credentials.vCenters[i].address

変更不可
文字列

vCenter Server の IP アドレスまたはホスト名。

詳細については、vCenter Server アドレスの確認をご覧ください。

credentials.vCenters[i].secretName

変更不可
文字列

Secret 名。名前は、Secret カスタム リソースの name と一致している必要があります。

credentials.vCenters[i].secretNamespace

変更不可
文字列
事前入力された kube-system

Secret が存在する Namespace。Namespace は、Secret カスタム リソースの対応する namespace と一致する必要があります。

topologyDomains

オブジェクトの配列。それぞれがトポロジ ドメイン構成を表します。必要に応じてエントリを追加または削除します。管理クラスタの作成後、必要に応じて新しい topologyDomains オブジェクトを構成ファイルに追加し、gkectl update admin を実行してクラスタ内の構成を更新できます。

topologyDomains[i].name

変更不可
文字列

トポロジ ドメインの名前。

topologyDomains[i].topologyLabels

このトポロジ ドメイン内のノードに適用され、Kubernetes スケジューラによって使用されるラベルのリスト。各ラベルは "key":"value" ペアです。トポロジ ドメインごとに 1 つのラベルのみを指定することをおすすめします。

例:

topologyDomains:
- name: "td-01"
  topologyLabel: "topology.examplepetstore.com/zone": "zone-1"

キーには、組み込みのデフォルト制約で説明されている Kubernetes クラスタレベルのデフォルト制約 "topology.kubernetes.io/zone" を使用できます。

クラスタが作成されると、指定したトポロジラベルがトポロジ ドメイン内のノードのラベルに入力されます。キーとして "topology.kubernetes.io/zone" を使用しない場合は、Deployment、StatefulSet、または ReplicaSet の PodTemplate でトポロジ キーを構成する必要があります。

たとえば、トポロジラベルでキーを "topology.examplepetstore.com/zone" と定義したとします。PodTemplate で、topologySpreadConstraints.topologyKey フィールドの値としてキーを指定します。これにより、Kubernetes スケジューラはトポロジ ドメインに Pod を分散して、高可用性を確保し、障害が発生した場合に単一の領域に過度に集中するのを防ぐことができます。

topologySpreadConstraints の構成の詳細については、Kubernetes ドキュメントの Pod トポロジの分散制約をご覧ください。

topologyDomains[i].compute

このトポロジ ドメインに割り振られたコンピューティング リソース。

topologyDomains[i].compute.vcenter

変更不可
文字列

vCenter Server の IP アドレスまたはホスト名。

詳細については、vCenter Server アドレスの確認をご覧ください。

topologyDomains[i].compute.datacenter

変更不可
文字列

vSphere データセンターの相対パス。

指定する値は、/ という名前のルートフォルダを基準とします。

データセンターがルートフォルダにある場合、値はデータセンターの名前です。

topologyDomains[i].compute.cluster

変更不可
文字列

このトポロジ ドメイン内のクラスタ VM が実行される ESXi ホストを表す vSphere クラスタの相対パス。この vSphere クラスタは、vCenter データセンターの物理 ESXi ホストのサブセットを表します。

指定する値は、/.../DATA_CENTER/vm/ を基準とします。

vSphere クラスタが /.../DATA_CENTER/vm/ フォルダにある場合、値は vSphere クラスタの名前です。

それ以外の場合、値は 1 つ以上のフォルダと vSphere クラスタの名前を含む相対パスになります。

topologyDomains[i].compute.resourcePool

変更不可
文字列

このトポロジ ドメイン内の VM の vCenter リソースプール

デフォルトのリソースプールを使用する場合は、これを VSPHERE_CLUSTER/Resources に設定します。

例:

topologyDomains:
- name: "td-01"
  compute:
    resourcePool: "my-vsphere-cluster/Resources"

すでに作成したリソースプールを使用する場合は、これにリソースプールの相対パスを設定します。

指定する値は /.../DATA_CENTER/host/.../VSPHERE_CLUSTER/Resources/ を基準とします。

リソースプールが /.../DATA_CENTER/host/.../VSPHERE_CLUSTER/Resources/ の直接の子である場合、値はリソースプールの名前となります。

例:

topologyDomains:
- name: "td-01"
  compute:
    resourcePool: "my-resource-pool"

それ以外の場合、値は 2 つ以上のリソースプールを含む相対パスになります。

例:

topologyDomains:
- name: "td-01"
  compute:
    resourcePool: "resource-pool-1/resource-pool-2"

topologyDomains[i].compute.folder

省略可
変更不可
文字列

事前に作成していた vSphere フォルダの相対パス。このフォルダには、このトポロジ ドメイン内のすべての VM が保持されます。

値を指定しない場合、このトポロジ ドメイン内のすべての VM は /.../DATA_CENTER/vm/ に配置されます。

値を指定すると、/.../DATA_CENTER/vm/ を基準とします。

値にはフォルダの名前を指定できます。

例:

topologyDomains:
- name: "td-01"
  compute:
    folder: "my-folder"

複数のフォルダを含む相対パスを値に指定することもできます。

例:

topologyDomains:
- name: "td-01"
  compute:
    folder: "folders/folder-1"

topologyDomains[i].storage

このトポロジ ドメインのストレージ構成。これは、仮想マシンのデータディスクとブートディスクでのみ使用されます。CNS ボリューム(PVC と PV によってプロビジョニングされる)は含まれません。

storage.policyName または storage.datastore のいずれかの値を指定してください。両方を指定することはできません。

topologyDomains[i].storage.policyName

storage.datastore が指定されていない場合は必須
変更不可
文字列

クラスタノードの VM ストレージ ポリシーの名前。

詳細については、ストレージ ポリシーを構成するをご覧ください。

storage.datastore または storage.policyName のいずれかの値を指定する必要があります。両方を指定することはできません。このフィールドの値を指定する場合は、storage.datastore の値を指定しないでください。

topologyDomains[i].storage.datastore

storage.policyName が指定されていない場合は必須
変更不可
文字列

管理クラスタの vSphere データストアの名前。

指定する値は、パスではなく、名前にする必要があります。値にはフォルダを含めないでください。

例:

topologyDomains:
- name: "td-01"
  storage:
    datastore: "my-datastore"

storage.datastore または storage.PolicyName のいずれかの値を指定する必要があります。両方を指定することはできません。このフィールドの値を指定する場合は、storage.PolicyName の値を指定しないでください。

topologyDomains[i].network

このトポロジ ドメインのネットワーク構成。

topologyDomains[i].network.vsphereNetwork

変更不可
文字列

クラスタノードの vSphere ネットワークの名前。

例:

topologyDomains:
- name: "td-01"
  network:
    vsphereNetwork: "my-network"

名前に特殊文字が含まれる場合は、エスケープ シーケンスを使用する必要があります。

特殊文字 エスケープ シーケンス
スラッシュ(/ %2f
バックスラッシュ(\ %5c
パーセント記号(% %25

データセンターでネットワーク名が一意でない場合は、フルパスを指定できます。

例:

topologyDomains:
- name: "td-01"
  network:
    vsphereNetwork: "/data-centers/data-center-1/network/my-network"

topologyDomains[i].network.gateway

このトポロジ ドメイン内のクラスタノードのサブネットのゲートウェイ アドレス。IP アドレスは、IP ブロック ファイルのゲートウェイ アドレスと同じにする必要があります。例については、トポロジ ドメインの IP ブロック ファイルの例をご覧ください。

topologyDomains[i].network.dnsServers

不変
文字列の配列。
配列内の要素の最大数は 3 つです。

VM の DNS サーバーの IP アドレス。

topologyDomains[i].network.ntpServers

変更不可
文字列の配列

VM が使用する時刻サーバーの IP アドレス。

topologyDomains[i].network.searchDomains

省略可
不変
文字列の配列

VM が使用する DNS 検索ドメイン。これらのドメインは、ドメイン検索リストの一部として使用されます。

例:

topologyDomains:
- name: "td-01"
  network:
    hostConfig:
      searchDomainsForDNS:
      - "my.local.com"

topologyDomains[i].defaultTopologyDomain

変更不可
省略可
文字列

デフォルトのトポロジ ドメインの名前。この名前は、topologyDomains[i].name の名前のいずれかと一致する必要があります。クラスタの作成時にデフォルト名を指定しなかった場合は、必要に応じて構成ファイルの名前を更新し、gkectl update admin を実行してクラスタ内の構成を更新できます。

コントロール プレーン ノードまたはノードプール内のノードにトポロジ ドメインを設定しない限り、ノードはデフォルトのトポロジ ドメインに割り振られます。

例: 構成ファイル

次の例は、値が入力された構成ファイルを示しています。

apiVersion: v1
kind: Secret
metadata:
  namespace: kube-system
  name: "vsphere-auth-0"
stringData:
  admin-username: "example-admi1n@vsphere.local"
  admin-password: "GltFl4@5f"
  ca-crt: |
    -----BEGIN CERTIFICATE-----
    MIIEITCCAwmgAwIBAgIJAPFVaTIKdyCbMA0GCSqGSIb3DQEBCwUAMIGbMQswCQYD
    VQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZ
    FgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExHTAbBgNV
    BAoMFGF0bC1xdWFsLXZjMDMuYW50aG9zMRswGQYDVQQLDBJWTXdhcmUgRW5naW5l
    ZXJpbmcwHhcNMjIwODA3MDIzNTQ4WhcNMzIwODA0MDIzNTQ4WjCBmzELMAkGA1UE
    AwwCQ0ExFzAVBgoJkiaJk/IsZAEZFgd2c3BoZXJlMRUwEwYKCZImiZPyLGQBGRYF
    bG9jYWwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMR0wGwYDVQQK
    DBRhdGwtcXVhbC12YzAzLmFudGhvczEbMBkGA1UECwwSVk13YXJlIEVuZ2luZWVy
    aW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz5MOjTQ4FHcIYjzo
    bcIFJmnVDjSnLGYDdVayhmUo1+CC5RqJRuAnJmDYt9PY/lJhVDVUSFHWJdvRjeAP
    0+xjRs33VJctzjDqwy2xRMVxoA+c8DfvALHIK+rHwIidGNt5eb2HOrB1MSCB5KFi
    gkXhJf/2kiEPiTMqbu2nWySdBfZRVSYs1jSiAuz/cgyglfVUcRFn4oRhR35QZ8gj
    t54IGY9atzKCYuvFAgeTCGBxI30cZRQDCtkWyWHPdK3GniNW/qh4C7gC+VI+Pnh+
    fUGtAx3Px/O5h5RpHDmvuSqMNoWEsChKGgbrbkZGB9OWL8OsVAUnz8TXC6s4/AG1
    0GGDGQIDAQABo2YwZDAdBgNVHQ4EFgQUM8RXjNIlar+S6uZBSH+3oVkUdGwwHwYD
    VR0RBBgwFoEOZW1haWxAYWNtZS5jb22HBH8AAAEwDgYDVR0PAQH/BAQDAgEGMBIG
    A1UdEwEB/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBABIO4RO3Jk6PaDyt
    +PGP1ng5fpcKbwCi90KfEkfAd/HV3YM6suEhCar6azKXJutL9gGzidi9NvKv43Pg
    hOOuTQWbdwuhqgF3YPKZ1HJWSV0NR5J9WFjp9rk1EdM6NApUwmy7EIbo8TY7M6SL
    jaR8VgaelG2PSf2S4ybxKdJ2gx2pPTcoYpd/+d9qaDFLNWa4irzB6sqBUVlkAMX+
    JW4FmMs8ym4aLzlFBzG5gjK1PCsBugbVRSAbF+Y8LwnMoe2WMiF1nNXoKSiaQm0A
    Z0psC1b37G9dKzr9soLS5OENFrAEClfVD5luETvUHo51VhanetWbZmL5dK8iGAuj
    otykS2w=
    -----END CERTIFICATE-----

---
apiVersion: v1
kind: Secret
metadata:
  namespace: kube-system
  name: "vsphere-auth-1"
stringData:
  admin-username: "example-admin2@vsphere.local"
  admin-password: "xuBAcK5lT@uq2Ix"
  ca-crt: |
    -----BEGIN CERTIFICATE-----
    MIIEITCCAwmgAwIBAgIJAMJPzGX27yKBMA0GCSqGSIb3DQEBCwUAMIGbMQswCQYD
    VQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZ
    FgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExHTAbBgNV
    BAoMFGF0bC1xdWFsLXZjMTMuYW50aG9zMRswGQYDVQQLDBJWTXdhcmUgRW5naW5l
    ZXJpbmcwHhcNMjMxMjAzMjM0NDM5WhcNMzMxMTMwMjM0NDM5WjCBmzELMAkGA1UE
    AwwCQ0ExFzAVBgoJkiaJk/IsZAEZFgd2c3BoZXJlMRUwEwYKCZImiZPyLGQBGRYF
    bG9jYWwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMR0wGwYDVQQK
    DBRhdGwtcXVhbC12YzEzLmFudGhvczEbMBkGA1UECwwSVk13YXJlIEVuZ2luZWVy
    aW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6d2PidzORMEOuIKa
    XOXB4nB7ukYGOeju1nKJ90KnvKfZBNjN1JKuNPQcZelFyEcUEHnI18cA2VGbpXbF
    O9jMlxu5VlhPepjEPAgtcAuCZNlxzRDip9u9ar3ma2SxMCogz91qDZKSE/PQpqNI
    Ozpus6YsHmK3jzAUq/Zs1+wl9HFot0e5kPf79oqQC8gPxJqmFQyGm50SdOMwj5sD
    pYm/3TZZ1gw4WftBhDecO9hKwcReCVjeVgp5omMcFHwIhqUBqZM3qX5gJaxE7ELO
    xu66VibA1g70Xzso2hGVQ13ruGjgUAjDsICOTpHHcT33KoMRzn2BWlKtmsnThIrE
    nbR9QQIDAQABo2YwZDAdBgNVHQ4EFgQUI84+93Iniliyzs3HSDatbYGsiJ4wHwYD
    VR0RBBgwFoEOZW1haWxAYWNtZS5jb22HBH8AAAEwDgYDVR0PAQH/BAQDAgEGMBIG
    A1UdEwEB/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAIIihWWIcl+sKRmS
    QB4wkjR9UA7QV96lbm+HFE5qvP5xVXss+PmSjLjeNZFfX65tGlKXWDmYstcw/jon
    hnJVe/jxjIZ3GddrVfHdwOEQ+FORQyfxkLAQuHKvm/2PobGNsU0rOw14Ur4Eea6P
    pIl70eJhRX22dkOhb+y6jz+k+L52HbzMz/X6yUnTFAJzobJD0C1vGAx3FgPdbUqF
    fXYO/Q8NNrk+4561eT3x9T4RIj/0ZkBal0yQEdYnd+lOIkEmk7vmO1/eyb6+66rs
    3wz4DIxtfhJIUlj0mBL0KkyDDDoc0oFTf5V/xrYls1dJ35DNFoG/KBJGgGbaW41t
    vTz+0JA=
    -----END CERTIFICATE-----

---
apiVersion: v1
kind: Secret
metadata:
  namespace: kube-system
  name: "vsphere-auth-2"
stringData:
  admin-username: "example-admin3@vsphere.local"
  admin-password: "nWKCITwqKTaY5@M5"
  ca-crt: |
    -----BEGIN CERTIFICATE-----
    MIIEITCCAwmgAwIBAgIJAN4alqihWQukMA0GCSqGSIb3DQEBCwUAMIGbMQswCQYD
    VQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZ
    FgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExHTAbBgNV
    BAoMFGF0bC1xdWFsLXZjMDcuYW50aG9zMRswGQYDVQQLDBJWTXdhcmUgRW5naW5l
    ZXJpbmcwHhcNMjMwMzI2MTc0NjE1WhcNMzMwMzIzMTc0NjE1WjCBmzELMAkGA1UE
    AwwCQ0ExFzAVBgoJkiaJk/IsZAEZFgd2c3BoZXJlMRUwEwYKCZImiZPyLGQBGRYF
    bG9jYWwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMR0wGwYDVQQK
    DBRhdGwtcXVhbC12YzA3LmFudGhvczEbMBkGA1UECwwSVk13YXJlIEVuZ2luZWVy
    aW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuvM3aSemSrBxWVei
    6pYlRvLWaCva2Q0MQvmUdVISa9uul/PHE2lwAcTAAr3Sayat2D5IRjd7NWbzaLVQ
    Sxel0TINpMfITDT0x6lZ8FfKgrRpY30CPZQlgVo16rGKE0V+wHTkGYIzRITETzuu
    z6nkpzvryh6JadSf4wrGj1TmrYpqYEmdzf7bLmz4Rql5PgVco7z+pqo0BA+UU/Uc
    /OtEcVKAyaifHzZwPlscOpKpskQrP4Ke6i3iuyrEmaDH+4sQ1TDrcYpUBfqkl+xT
    0G6ZKHs6KP18x0Xg4ifeC8x7sgajJ20TpbkDY4KtBdraj3HB4gZCxg7qY/0G75yF
    C2bZ4wIDAQABo2YwZDAdBgNVHQ4EFgQUeE+R+gRo1oU578dyiyq4tPYefpIwHwYD
    VR0RBBgwFoEOZW1haWxAYWNtZS5jb22HBH8AAAEwDgYDVR0PAQH/BAQDAgEGMBIG
    A1UdEwEB/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBADzBUXsxICPGxt1o
    wPrbmWhkrPy2pNr9unP/d+Py20groZ/KQ/d6dzDN7pxc6BtQbMfho7pij+mf3aHq
    oBo+J80Ha/vZExMMwYrp/OTlxy2Jdb5pzxZQtWqNVS5SkzNtDs7DhXDTY19TBZhZ
    4d+/g2eSq2/dRT7zF8q3LH6mmq0EbSRSDOm8r6AUdWt+Ov7YKTYk9c+5UTL9M9u4
    1+VBkF34hB/xc1fsFSPHTQQDOlAy5HTZgM3ygtuhmAY+UUQVLZf+8sJh+5zqc6gw
    Ecnz7HRcRPUitKACsxUm4f5VHiKUMrIBP5U1dovl4kUN8Ue0e+KnIjIGKjp4wrHi
    UtQboUw=
    -----END CERTIFICATE-----

---
apiVersion: vmware.cluster.gke.io/v1alpha1
kind: VSphereInfraConfig
metadata:
  name: default
credentials:
  vCenters:
  - address: "vc03.example"
    secretName: "vsphere-auth-0"
    secretNamespace: "kube-system"
  - address: "vc13.example"
    secretName: "vsphere-auth-1"
    secretNamespace: "kube-system"
  - address: "vc07.example"
    secretName: "vsphere-auth-2"
    secretNamespace: "kube-system"
topologyDomains:
- name: "topology-domain-0"
  topologyLabels:
    "topology.kubernetes.io/zone": "zone-0"
  compute:
    vcenter: "vc03.example"
    datacenter: "vc03"
    cluster: "workloads3"
    resourcePool: "vc03-default-pool"
  storage:
    datastore: "vsanDatastore"
  network:
    vsphereNetwork: "qual-343"
    gateway: "203.0.113.1"
    dnsServers:
    - "192.0.2.1"
    - "192.0.2.2"
    ntpServers:
    - "203.0.113.50"
- name: "topology-domain-1"
  topologyLabels:
    "topology.kubernetes.io/zone": "zone-1"
  compute:
    vcenter: "vc13.example"
    datacenter: "vc13-dc1"
    cluster: "workloads13-1"
    resourcePool: "vc13-dc1-default-pool"
  storage:
    datastore: "vsanDatastore-1c"
  network:
    vsphereNetwork: "scale-332"
    gateway: "203.0.113.2"
    dnsServers:
    - "192.0.2.10"
    - "192.0.2.11"
    ntpServers:
    - "203.0.113.51"
- name: "topology-domain-2"
  topologyLabels:
    "topology.kubernetes.io/zone": "zone-2"
  compute:
    vcenter: "vc07.example"
    datacenter: "vc07"
    cluster: "workloads7"
    resourcePool: "vc07-default-pool"
  storage:
    datastore: "vsanDatastore"
  network:
    vsphereNetwork: "qual-323"
    gateway: "203.0.113.3"
    dnsServers:
    - "192.0.2.21"
    - "192.0.2.22"
    ntpServers:
    - "203.0.113.52"