旧集群配置文件

本页面介绍 GKE On-Prem 版本 1.3 及更低版本使用的集群配置文件中的字段。

在 GKE On-Prem 1.4 版中,配置文件发生了重大变化。新文件称为版本 1 配置文件。低于 1.4 的 GKE On-Prem 版本中使用的配置文件称为版本 0 配置文件。

如果要使用 GKE On-Prem 1.4 中引入的新功能,则必须使用 v1 配置文件。

v0 配置文件与 GKE On-Prem 1.4 中的工具兼容。例如,您可以将 v0 配置文件传递给 GKE On-Prem 1.4 中的 gkectl create cluster 命令。此外,您还可以运行将 v0 配置文件转换为 v1 配置文件的命令。

转换配置文件

GKE On-Prem 1.4 版为管理员集群和用户集群使用不同的配置文件。也就是说,您可以使用一个配置文件创建管理员集群,而使用另一个配置文件来创建用户集群。

要将 v0 配置文件转换为 v1 管理员集群配置文件,请执行以下操作:

gkectl create-config admin --from [OLD_CONFIG_PATH] --config [OUTPUT_PATH]

其中:

  • [OLD_CONFIG_PATH] 是 v0 配置文件的路径。

  • [OUTPUT_PATH] 是您为生成的 v1 管理员集群配置文件选择的路径。如果省略此标志,则 gkectl 将该文件命名为 admin-cluster.yaml,并将其放在当前目录中。

要将 v0 配置文件转换为 v1 用户集群配置文件,请执行以下操作:

gkectl create-config cluster --from [OLD_CONFIG_PATH] --config [OUTPUT_PATH]
  • [OLD_CONFIG_PATH] 是 v0 配置文件的路径。

  • [OUTPUT_PATH] 是您为生成的 v1 用户集群配置文件选择的路径。如果省略此标志,则 gkectl 将该文件命名为 user-cluster.yaml,并将其放在当前目录中。

v0 配置文件的模板

填写 v0 配置文件

如果您使用的是 v0 配置文件,请按照本部分中的说明输入字段值。

bundlepath

GKE On-Prem 软件包文件包含特定 GKE On-Prem 版本中的所有组件。创建管理员工作站时,该工作站会随附完整软件包 (/var/lib/gke/bundles/gke-onprem-vsphere-[VERSION]-full.tgz)。此软件包版本与您用来创建管理员工作站的已导入 OVA 版本一致。

bundlepath 的值设置为管理员工作站的软件包文件的路径。也就是说,将 bundlepath 设置为:

/var/lib/gke/bundles/gke-onprem-vsphere-[VERSION]-full.tgz

其中,[VERSION] 是要安装的 GKE On-Prem 版本。最新版本为 1.4.3-gke.3。

请注意,您可以将软件包文件保存在其他位置,也可以为其指定其他名称。您只需确保配置文件中 bundlepath 的值是软件包文件的路径即可。

vCenter 规范

vcenter 规范包含 vCenter Server 实例的相关信息。GKE On-Prem 需要此信息才能与 vCenter Server 进行通信。

vcenter.credentials.address

vcenter.credentials.address 字段中包含 vCenter 服务器的 IP 地址或主机名。

在填写 vsphere.credentials.address field 之前,请下载并检查您的 vCenter 服务器的服务证书。输入以下命令以下载证书并将其保存到名为 vcenter.pem 的文件中。

true | openssl s_client -connect [VCENTER_IP]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem

打开证书文件以查看主题通用名称和主题备用名称:

openssl x509 -in vcenter.pem -text -noout

输出会显示 Subject 通用名称 (CN)。这可能是 IP 地址,也可能是主机名。例如:

Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example

输出还可能在 Subject Alternative Name 下包含一个或多个 DNS 名称:

X509v3 Subject Alternative Name:
    DNS:vcenter.my-domain.example

选择 Subject 通用名称或 Subject Alternative Name 下的一个 DNS 名称,以在配置文件中用作 vcenter.credentials.address 的值。例如:

vcenter:
  credentials:
    address: "203.0.113.1"
    ...
vcenter:
  credentials:
    address: "my-host.my-domain.example"
    ...

您必须选择证书中显示的值。例如,如果 IP 地址未显示在证书中,则您不能将其用于 vcenter.credentials.address

vcenter.credentials

GKE On-Prem 需要知道您的 vCenter Server 的用户名和密码。如需提供此信息,请在 vcenter.credentials 下设置 usernamepassword 值。例如:

vcenter:
  credentials:
    username: "my-name"
    password: "my-password"

vcenter.datacenter、.datastore、.cluster、.network

GKE On-Prem 需要一些有关您的 vSphere 环境结构的信息。设置 vcenter 下的值以提供此信息。例如:

vcenter:
  datacenter: "MY-DATACENTER"
  datastore: "MY-DATASTORE"
  cluster: "MY-VSPHERE-CLUSTER"
  network: "MY-VIRTUAL-NETWORK"

vcenter.resourcepool

vSphere 资源池是指 vSphere 集群中 vSphere 虚拟机的逻辑分组。如果您使用的不是默认资源池,请将其名称提供给 vcenter.resourcepool。例如:

vcenter:
  resourcepool: "my-pool"

如果您希望 GKE On-Prem 将其节点部署到 vSphere 集群的默认资源池,请向 vcenter.resourcepool 提供空字符串。例如:

vcenter:
  resourcepool: ""

vcenter.datadisk

GKE On-Prem 会创建一个虚拟机磁盘 (VMDK) 来保存管理员集群的 Kubernetes 对象数据。安装程序会为您创建 VMDK,但您必须在 vcenter.datadisk 字段中提供 VMDK 的名称。例如:

vcenter:
  datadisk: "my-disk.vmdk"
vSAN 数据存储区:为 VMDK 创建文件夹

如果您使用的是 vSAN 数据存储区,则需要将 VMDK 放在一个文件夹中。您必须提前手动创建文件夹。为此,您可以使用 govc 创建文件夹:

govc datastore.mkdir -namespace=true my-gke-on-prem-folder

然后将 vcenter.datadisk 设置为 VMDK 的路径(包括文件夹)。例如:

vcenter:
datadisk: "my-gke-on-prem-folder/my-disk.vmdk"

在 1.1.1 版及更早版本中,一个已知问题会要求您向 vcenter.datadisk 提供文件夹的通用唯一标识符 (UUID) 路径,而不是文件路径。从上述 govc 命令的输出中复制该值。

然后,在 vcenter.datadisk 字段中提供该文件夹的 UUID。请勿在 UUID 前添加正斜杠。例如:

vcenter:
datadisk: "14159b5d-4265-a2ba-386b-246e9690c588/my-disk.vmdk"

此问题已在 1.1.2 版及更高版本中得到修复。

vcenter.cacertpath

当客户端(如 GKE On-Prem)向 vCenter Server 发送请求时,服务器必须通过提供证书或证书软件包向客户端证明其身份。为了验证证书或软件包,GKE On-Prem 必须具有信任链中的根证书。

vcenter.cacertpath 设置为根证书的路径。例如:

vcenter:
  cacertpath: "/my-cert-folder/the-root.crt"

VMware 安装的证书授权机构 (CA) 会向您的 vCenter 服务器颁发证书。信任链中的根证书是由 VMware 创建的自签名证书。

如果您不想使用默认的 VMWare CA,则可以将 VMware 配置为使用其他证书授权机构

如果 vCenter 服务器使用默认 VMware CA 颁发的证书,您可以通过以下几种方式获取根证书:

  • curl -k "https://[SERVER_ADDRESS]/certs/download.zip" > download.zip

    其中,[SERVER_ADDRESS] 是 vCenter 服务器的地址。

  • 在浏览器中,输入 vCenter 服务器的地址。在右侧的灰色框中,点击下载受信任的根 CA 证书 (Download trusted root CA certificates)。

  • 输入以下命令以获取服务证书:

    true | openssl s_client -connect [SERVER_ADDRESS]:443 -showcerts

    在输出结果中,找到如下网址:https://[SERVER_ADDRESS]/afd/vecs/ca。在浏览器中输入该网址。此时会下载根证书。

下载的文件名为 downloads.zip

解压该文件:

unzip downloads.zip

如果首次解压缩命令无效,请再次输入该命令。

certs/lin 中可找到证书文件。

代理规范

如果您的网络位于代理服务器后面,请用 HTTPS 代理以及要从代理中排除的地址填充 proxy 字段。例如:

proxy:
  url: "https://username:password@domain"
  noproxy: "10.0.1.0/24,private-registry.example,10.0.2.1"

管理员集群规范

admincluster 规范包含 GKE On-Prem 创建管理员集群所需的信息。

admincluster.vcenter.network

admincluster.vcenter.network 中,您可以为管理员集群节点指定一个 vCenter 网络。请注意,这会替换您在 vcenter 中提供的全局设置。例如:

admincluster:
  vcenter:
    network: MY-ADMIN-CLUSTER-NETWORK

admincluster.ipblockfilepath

由于您使用的是静态 IP 地址,因此必须有一个主机配置文件,如配置静态 IP 地址中所述。在 admincluster.ipblockfilepath 字段中提供主机配置文件的路径。例如:

admincluster:
  ipblockfilepath: "/my-config-folder/my-admin-hostconfig.yaml"

admincluster.manuallbspec(手动负载平衡模式)

管理员集群中的 Ingress 控制器实现为 NodePort 类型的 Service。该 Service 有一个用于 HTTP 的 ServicePort 和一个用于 HTTPS 的 ServicePort。如果您使用的是手动负载平衡模式,则必须为这些 ServicePort 选择 nodePort 值。在 ingresshttpnodeportingresshttpsnodeport 中指定 nodePort 值。例如:

admincluster:
  manuallbspec:
    ingresshttpnodeport: 32527
    ingresshttpsnodeport: 30139

管理员集群中的 Kubernetes API 服务器实现为 NodePort 类型的 Service。如果您使用的是手动负载平衡,则必须为该 Service 选择 nodePort 值。在 controlplanenodeport 中指定 nodePort 值,例如:

admincluster:
  manuallbspec:
    controlplanenodeport: 30968

管理员集群中的插件服务器实现为 NodePort 类型的 Service。如果您使用的是手动负载平衡,则必须为该 Service 选择 nodePort 值。在 controlplanenodeport 中指定 nodePort 值,例如:

admincluster:
  manuallbspec:
    addonsnodeport: 30562

admincluster.bigip.credentials(集成负载平衡模式)

如果您未使用集成负载平衡模式,请将 admincluster.bigip 注释掉。

如果您使用的是集成负载平衡模式,则 GKE On-Prem 需要知道 F5 BIG-IP 负载平衡器的 IP 地址、主机名、用户名和密码。设置 admincluster.bigip 下的值以提供此信息。例如:

admincluster:
  bigip:
    credentials:
      address: "203.0.113.2"
      username: "my-admin-f5-name"
      password: "rJDlm^%7aOzw"

admincluster.bigip.partition(集成负载平衡模式)

如果您使用的是集成负载平衡模式,则必须为管理员集群创建 BIG-IP 分区。将 admincluster.bigip.partition 设置为分区的名称。例如:

admincluster:
  bigip:
    partition: "my-admin-f5-partition"

admincluster.vips

无论您是为管理员集群使用集成负载平衡还是手动负载平衡,都需要填写 admincluster.vips 字段。

admincluster.vips.controlplanevip 的值设置为您已选择在负载平衡器上为管理员集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip 的值设置为您已选择在负载平衡器上为管理员集群的 Ingress 控制器配置的 IP 地址。例如:

admincluster:
  vips:
    controlplanevip: 203.0.113.3
    ingressvip: 203.0.113.4

admincluster.serviceiprange 和 admincluster.podiprange

管理员集群必须拥有用于 Service 的 IP 地址范围以及用于 pod 的 IP 地址范围。这些范围由 admincluster.serviceiprangeadmincluster.podiprange 字段指定。当您运行 gkectl create-config 时,系统会填充这些字段。您也可以将填充值更改为您选择的值。

Service 和 pod 范围不得重叠。此外,Service 和 pod 范围不得与任何集群中节点的 IP 地址重叠。

例如:

admincluster:
  serviceiprange: 10.96.232.0/24
  podiprange: 192.168.0.0/16

用户集群规范

用户集群规范 usercluster 包含 GKE On-Prem 创建初始用户集群所需的信息。

usercluster.vcenter.network

usercluster.vcenter.network 中,您可以为您的用户集群节点指定 vCenter 网络。请注意,这会替换您在 vcenter 中提供的全局设置。例如:

usercluster:
  vcenter:
    network: MY-USER-CLUSTER-NETWORK

usercluster.ipblockfilepath

由于您使用的是静态 IP 地址,因此必须有一个主机配置文件,如配置静态 IP 地址中所述。在 usercluster.ipblockfilepath 字段中提供主机配置文件的路径。例如:

usercluster:
  ipblockfilepath: "/my-config-folder/my-user-hostconfig.yaml"

usercluster.manuallbspec(手动负载平衡模式)

用户集群中的 Ingress 控制器实现为 NodePort 类型的 Service。该 Service 有一个用于 HTTP 的 ServicePort 和一个用于 HTTPS 的 ServicePort。如果您使用的是手动负载平衡模式,则必须为这些 ServicePort 选择 nodePort 值。在 ingresshttpnodeportingresshttpsnodeport 中指定 nodePort 值。例如:

usercluster:
  manuallbspec:
    ingresshttpnodeport: 30243
    ingresshttpsnodeport: 30879

用户集群中的 Kubernetes API 服务器实现为 NodePort 类型的 Service。如果您使用的是手动负载平衡,则必须为该 Service 选择 nodePort 值。在 controlplanenodeport 中指定 nodePort 值。例如:

usercluster:
  manuallbspec:
    controlplanenodeport: 30562

usercluster.bigip.credentials(集成负载平衡模式)

如果您使用的是集成负载平衡模式,GKE On-Prem 需要知道要用于用户集群的 F5 BIG-IP 负载平衡器的 IP 地址或主机名、用户名和密码。设置 usercluster.bigip 下的值以提供此信息。例如:

usercluster:
  bigip:
    credentials:
      address: "203.0.113.5"
      username: "my-user-f5-name"
      password: "8%jfQATKO$#z"

usercluster.bigip.partition(集成负载平衡模式)

如果您使用的是集成负载平衡模式,则必须为用户集群创建 BIG-IP 分区。将 usercluster.bigip.partition 设置为分区的名称。例如:

usercluster:
  bigip:
    partition: "my-user-f5-partition"

usercluster.vips

无论您是为用户集群使用集成负载平衡还是手动负载平衡,都需要填写 usercluster.vips 字段。

usercluster.vips.controlplanevip 的值设置为您已选择在负载平衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip 的值设置为您已选择在负载平衡器上为用户集群的 Ingress 控制器配置的 IP 地址。例如:

usercluster:
  vips:
    controlplanevip: 203.0.113.6
    ingressvip: 203.0.113.7

usercluster.serviceiprangeusercluster.podiprange

用户集群必须拥有用于 Service 的 IP 地址范围以及用于 pod 的 IP 地址范围。这些范围由 usercluster.serviceiprangeusercluster.podiprange 字段指定。当您运行 gkectl create-config 时,系统会填充这些字段。您也可以将填充值更改为您选择的值。

Service 和 pod 范围不得重叠。此外,Service 和 pod 范围不得与任何集群中节点的 IP 地址重叠。

例如:

usercluster:
  serviceiprange: 10.96.233.0/24
  podiprange: 172.16.0.0/12

usercluster.clustername

usercluster.clustername 的值设置为您选择的名称。请选择长度不超过 40 个字符的名称。例如:

usercluster:
  clustername: "my-user-cluster-1"

usercluster.masternode.replicas

usercluster.masternode.replicas 字段指定您希望用户集群具有的控制层面节点数。用户集群的控制层面节点运行用户控制层面,即 Kubernetes 控制层面组件。此值必须为 13

  • 将此字段设置为 1 以运行一个用户控制层面。
  • 如果您想拥有由三个控制层面节点(均运行用户控制层面)组成的高可用性 (HA) 用户控制层面,请将此字段设置为 3

usercluster.masternode.cpususercluster.masternode.memorymb

usercluster.masternode.cpususercluster.masternode.memorymb 字段指定为用户集群的每个控制层面节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:

usercluster:
  masternode:
    cpus: 4
    memorymb: 8192

usercluster.workernode.replicas

usercluster.workernode.replicas 字段指定您希望用户集群拥有的工作器节点数。工作器节点运行集群工作负载。

usercluster.workernode.cpususercluster.workernode.memorymb

usercluster.masternode.cpususercluster.masternode.memorymb 字段指定为用户集群的每个工作器节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:

usercluster:
  workernode:
    cpus: 4
    memorymb: 8192
    replicas: 3

usercluster.oidc

如果您希望用户集群的客户端使用 OIDC 身份验证,请为 usercluster.oidc 下的字段设置值。配置 OIDC 是可选操作。

如需了解如何配置 OIDC,请参阅使用 OIDC 进行身份验证

关于安装 1.0.2-gke.3 版

1.0.2-gke.3 版本引入了以下 OIDC 字段 (usercluster.oidc)。这些字段允许从 Google Cloud 控制台登录集群:

  • usercluster.oidc.kubectlredirecturl
  • usercluster.oidc.clientsecret
  • usercluster.oidc.usehttpproxy

在 1.0.2-gke.3 版中,如果要使用 OIDC,即使您不想从 Google Cloud 控制台登录集群,也必须填写 clientsecret 字段。在这种情况下,您可以为 clientsecret 提供一个占位值:

oidc:
clientsecret: "secret"

usercluster.sni

服务器名称指示 (SNI) 是传输层安全协议 (TLS) 的扩展,可让服务器在单个 IP 地址和 TCP 端口上提供多个证书,具体取决于客户端指定的主机名。

如果您的 CA 已作为受信任的 CA 分发到用户集群外部的客户端,并且您希望依赖此链来识别可信集群,则可以使用向负载平衡器的外部客户端提供的额外证书来配置 Kubernetes API 服务器 IP 地址。

如需将 SNI 用于您的用户集群,您需要拥有自己的 CA 和公钥基础架构 (PKI)。您可以为每个用户集群预配单独的服务证书,GKE On-Prem 会将每个额外的服务证书添加到其各自的用户集群。

如需为用户集群的 Kubernetes API 服务器配置 SNI,请提供 usercluster.sni.certpath(外部证书的路径)和 usercluster.sni.keypath(外部证书私钥文件的路径)的值。例如:

usercluster:
  sni:
    certpath: "/my-cert-folder/example.com.crt"
    keypath: "/my-cert-folder/example.com.key"

lbmode

您可以使用集成负载平衡或手动负载平衡。您选择的负载平衡模式将用于管理员集群和初始用户集群。它也将用于您未来创建的任何其他用户集群。

通过将 lbmode 的值设置为 IntegratedManual 来指定负载平衡选项。例如:

lbmode: Integrated

gkeconnect

gkeconnect 规范包含 GKE On-Prem 通过 Google Cloud Console 设置本地集群管理所需的信息。

gkeconnect.projectid 设置为您要在其中管理本地集群的 Google Cloud 项目的 ID。

gkeconnect.registerserviceaccountkeypath 的值设置为注册服务帐号的 JSON 密钥文件的路径。将 gkeconnect.agentserviceaccountkeypath 的值设置为 Connect 服务帐号的 JSON 密钥文件路径。

例如:

gkeconnect:
  projectid: "my-project"
  registerserviceaccountkeypath: "/my-key-folder/register-key.json"
  agentserviceaccountkeypath: "/my-key-folder/connect-key.json"

stackdriver

stackdriver 规范包含 GKE On-Prem 在存储由本地集群生成的日志条目时所需的信息。

stackdriver.projectid 设置为 Google Cloud 项目的 ID,您可以在其中查看与本地集群有关的 Stackdriver 日志。

stackdriver.clusterlocation 设置为您要在其中存储 Stackdriver 日志的 Google Cloud 地区。建议选择一个靠近您的本地数据中心的区域。

如果集群的网络由 VPC 控制,请将 stackdriver.enablevpc 设置为 true。这样可以确保所有遥测流都通过 Google 的受限 IP 地址。

stackdriver.serviceaccountkeypath 设置为 Stackdriver Logging 服务帐号的 JSON 密钥文件路径。

例如:

stackdriver:
  projectid: "my-project"
  clusterlocation: "us-west1"
  enablevpc: false
  serviceaccountkeypath: "/my-key-folder/stackdriver-key.json"

privateregistryconfig

如果您有私有 Docker 注册表,则 privateregistryconfig 字段包含 GKE On-Prem 用于将映像推送到该私有注册表的信息。如果您没有指定私有注册表,则 gkectl 会在安装期间从其 Container Registry 代码库 gcr.io/gke-on-prem-release 中拉取 GKE On-Prem 的容器映像。

privatedockerregistry.credentials 下,将 address 设置为运行您的私有 Docker 注册表的机器的 IP 地址。将 usernamepassword 设置为您的私有 Docker 注册表的用户名和密码。您为 address 设置的值会自动添加到 proxy.noproxy 中。

当 Docker 从您的私有注册表中拉取映像时,该注册表必须通过提供证书来证明其身份。注册表的证书由证书授权机构 (CA) 签名。Docker 使用 CA 的证书来验证该注册表的证书。

privateregistryconfig.cacertpath 设置为 CA 的证书路径。例如:

privateregistryconfig:
  cacertpath: /my-cert-folder/registry-ca.crt

gcrkeypath

gcrkeypath 的值设置为您已列入许可名单的服务帐号的 JSON 密钥文件的路径。

例如:

gcrkeypath: "/my-key-folder/whitelisted-key.json"

cloudauditlogging

如果要将 Kubernetes 审核日志发送到您的 Google Cloud 项目,请填充 cloudauditlogging 规范。例如:

cloudauditlogging:
  projectid: "my-project"
  # A GCP region where you would like to store audit logs for this cluster.
  clusterlocation: "us-west1"
  # The absolute or relative path to the key file for a GCP service account used to
  # send audit logs from the cluster
  serviceaccountkeypath: "/my-key-folder/audit-logging-key.json"