vSphere 基础架构配置文件

本页介绍 vSphere 基础架构配置文件中的字段,该文件用于设置拓扑网域。如果在管理员集群配置文件中设置了 infraConfigFilePath,则必须使用此文件。

以下部分介绍了 SecretVSphereInfraConfig 自定义资源中的对象和字段。请参阅下文的示例配置文件部分,其中显示了这些字段的示例值。

除非注明为“可选”,否则配置文件中的所有字段均为必填字段。

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.policyNamestorage.datastore 指定值,但不能同时为这两者指定值。

topologyDomains[i].storage.policyName

如果未指定 storage.datastore,则为必需
不可变
字符串

集群节点的虚拟机存储政策的名称。

如需了解详情,请参阅配置存储政策

您必须为 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

不可变
字符串数组。
数组中的元素数量上限为 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"