本頁說明 vSphere 基礎架構設定檔中的欄位,這些欄位用於設定拓撲網域。如果管理員叢集設定檔中的 infraConfigFilePath
已設定,則必須提供這個檔案。
以下各節說明 Secret
和 VSphereInfraConfig
自訂資源中的物件和欄位。請參閱下方的「設定檔範例」一節,瞭解欄位的範例值。
除非註明為「選填」,否則設定檔中的所有欄位均為必填。
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-username
和 stringData.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.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"