vSphere 基礎架構設定檔

本頁說明 vSphere 基礎架構設定檔中的欄位,這些欄位用於設定拓撲網域。如果管理員叢集設定檔中的 infraConfigFilePath 已設定,則必須提供這個檔案。

以下各節說明 SecretVSphereInfraConfig 自訂資源中的物件和欄位。請參閱下方的「設定檔範例」一節,瞭解欄位的範例值。

除非註明為「選填」,否則設定檔中的所有欄位均為必填。

Secret

說明 vSphere 憑證 Secret,其中儲存每個 vCenter Server 的憑證。視您打算用於管理員叢集和使用者叢集的 vCenter Server 執行個體數量,視需要新增或刪除密鑰。每個物件都必須以 --- 分隔。成功建立管理員叢集後,即可從這個設定檔中移除所有密鑰。

Secret.name

不可變動
字串

密鑰名稱。這個名稱必須與 VSphereInfraConfig 自訂資源中 credentials.vCenters[i].secretName 欄位的其中一個名稱相符。

Secret.namespace

不可變動
字串
預先填入:kube-system

Secret 所在的命名空間。這個命名空間必須與 VSphereInfraConfig 自訂資源中的對應 credentials.vCenters[i].secretNamespace 欄位相符。

stringData.admin-usernamestringData.admin-password

具有 vCenter Server 管理員角色或同等權限的 vCenter 使用者帳戶憑證。詳情請參閱「vCenter 使用者帳戶權限」。

stringData.ca-crt

可變動
多行字串

vCenter Server 的 Base64 編碼 CA 憑證。

按照「取得 vCenter CA 根憑證」一文中的步驟操作,直到執行顯示 Base64 編碼憑證的指令為止。複製並貼上完整憑證到這個欄位。

VSphereInfraConfig

vSphere 基礎架構設定。這項設定會儲存在管理員叢集中,並由管理員叢集和所有管理的使用者叢集共用。每個管理員叢集只能有一個 vSphere 基礎架構設定。

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 所在的命名空間。命名空間必須與 Secret 自訂資源中的對應 namespace 相符。

topologyDomains

物件陣列,每個物件都說明拓撲網域設定。 視需要新增或刪除項目。建立管理員叢集後,您可以視需要將新的 topologyDomains 物件新增至設定檔,然後執行 gkectl update admin更新叢集中的設定

topologyDomains[i].name

不可變動
字串

拓撲網域的名稱。

topologyDomains[i].topologyLabels

Kubernetes 排程器會使用這個拓撲網域內的節點標籤清單。每個標籤都是 "key":"value" 配對。建議您為每個拓撲網域指定一個標籤。

範例:

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,確保高可用性,並避免在發生故障時,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

不可變動
字串

vSphere 叢集的相對路徑,代表這個拓撲網域中叢集 VM 執行的 ESXi 主機。這個 vSphere 叢集代表 vCenter 資料中心內的實體 ESXi 主機子集。

指定的值與 /.../DATA_CENTER/vm/ 相關。

如果 vSphere 叢集位於 /.../DATA_CENTER/vm/ 資料夾中,則值為 vSphere 叢集的名稱。

否則,該值是相對路徑,包含一或多個資料夾,以及 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"

否則,該值是具有兩個以上資源集區的相對路徑。

範例:

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.policyNamestorage.datastore 的值,但不得同時指定兩者。

topologyDomains[i].storage.policyName

如未指定 storage.datastore,則為必要欄位
不可變動
字串

叢集節點的VM 儲存空間政策名稱。

詳情請參閱「設定儲存空間政策」。

你必須指定 storage.datastorestorage.policyName 的值,但不能同時指定兩者。如果為這個欄位指定值,請勿為 storage.datastore 指定值。

topologyDomains[i].storage.datastore

如未指定 storage.policyName,則為必要欄位
不可變動
字串

管理員叢集的 vSphere 資料儲存庫名稱。

指定的值必須是名稱,而非路徑。值中不得包含任何資料夾。

範例:

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

你必須指定 storage.datastorestorage.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

不可變更的字串陣列。

陣列中的元素數量上限為三個。

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"