vSphere 基礎架構設定檔

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

建立管理員叢集後,請保留這個檔案。您需要這個檔案,才能使用 gkectl update admin 更新管理員叢集,而 gkectl get-config 不會產生這個檔案。詳情請參閱拓撲網域限制。

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

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

Secret

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

Secret.name

不可變動
字串

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

Secret.namespace

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

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

stringData.admin-username 和 stringData.admin-password

vCenter 使用者帳戶的憑證,該帳戶具備 vCenter Server 管理員角色或同等權限。詳情請參閱「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].compute.hostGroups

適用於 1.32.200 版和 1.33 以上版本:
選用
不可變動
字串陣列

填寫這個部分,將拓撲網域設為使用 VM 主機親和性。陣列中的每個字串都是 vSphere 環境中主機 DRS 群組的名稱。建立虛擬機器群組,並使用 VM 主機親和性規則,將這些群組與主機群組繫結。

範例:

topologyDomains:
- name: "td-01"
  compute:
    hostGroups:
    - "my-hostgroup"

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

不可變動
字串陣列。
陣列中的元素數量上限為三個。

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"