本页介绍 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 所在的命名空间。此命名空间必须与 VSphereInfraConfig
自定义资源中的相应 credentials.vCenters[i].secretNamespace
字段匹配。
“stringData.admin-username
”和“stringData.admin-password
”
具有 vCenter Server Administrator 角色或同等权限的 vCenter 用户账号的凭据。如需了解详情,请参阅 vCenter 用户账号权限。
stringData.ca-crt
可变
多行字符串
vCenter 服务器的 Base64 编码 CA 证书。
按照获取 vCenter CA 根证书中的步骤操作,直到运行显示 Base64 编码证书的命令。将整个证书复制并粘贴到此字段中。
VSphereInfraConfig
vSphere 基础架构配置。此配置将存储在管理员集群中,并由管理员集群及其管理的所有用户集群共享。每个管理员集群应只有一个 vSphere 基础架构配置。
VSphereInfraConfig.name
不可变
字符串
预填充值:default
vSphere 基础架构配置的名称。
credentials
vSphere 基础架构配置使用的凭据。
credentials.vCenters
对象数组,其中每个对象都包含每个 vCenter Server 的 Secret 引用。根据需要添加或删除条目。创建管理员集群后,您可以根据需要向配置文件中添加新的 credentials.vCenters
对象,然后运行 gkectl update admin
以更新集群中的配置。
credentials.vCenters[i].address
不可变
字符串
vCenter Server 的 IP 地址或主机名。
如需了解详情,请参阅查找 vCenter 服务器地址。
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"
作为键,则需要在部署、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 服务器地址。
topologyDomains[i].compute.datacenter
不可变
字符串
vSphere 数据中心的相对路径。
您指定的值是相对于名为 /
的根文件夹而言的。
如果数据中心位于根文件夹中,则该值是数据中心的名称。
topologyDomains[i].compute.cluster
不可变
字符串
vSphere 集群的相对路径,代表此拓扑网域中的集群虚拟机将在其中运行的 ESXi 主机。此 vSphere 集群代表 vCenter 数据中心内的物理 ESXi 主机的一部分。
您指定的值相对于 /.../DATA_CENTER/vm/
。
如果您的 vSphere 集群位于 /.../DATA_CENTER/vm/
文件夹中,则该值是 vSphere 集群的名称。
否则,该值是相对路径,其中包含一个或多个文件夹以及 vSphere 集群的名称。
topologyDomains[i].compute.resourcePool
不可变
字符串
此拓扑网域中虚拟机的 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 文件夹的相对路径。此文件夹将用于存储此拓扑网域中的所有虚拟机。
如果未指定值,则此拓扑域中的所有虚拟机都将放在 /.../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
,则为必需
不可变
字符串
集群节点的虚拟机存储政策的名称。
如需了解详情,请参阅配置存储政策。
您必须为 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。
虚拟机的 DNS 服务器的 IP 地址。
topologyDomains[i].network.ntpServers
不可变
字符串数组
供虚拟机使用的时钟服务器的 IP 地址。
topologyDomains[i].network.searchDomains
可选
不可变
字符串数组
供虚拟机使用的 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"