创建管理员和用户集群

了解如何使用基本配置创建管理员集群和用户集群。

本主题中的步骤假定您使用 gkeadm 创建管理员工作站。如果您未使用 gkeadm,而是按照高级主题创建具有静态 IP 地址的管理员工作站进行操作,则可能需要按照每个步骤中的说明进行调整。对于 DHCP 管理员工作站,您必须使用相应的 DHCP 安装指南

如果您使用了代理,则所有 gkectl 命令都会自动针对来自管理员工作站的互联网请求,使用您在配置文件中设置的同一代理。如果您的管理员工作站不在同一代理后面,请参阅“创建管理员工作站”高级主题静态 IP | DHCP 中的“手动代理选项”。

通过 SSH 连接到管理员工作站

按照与管理员工作站建立 SSH 连接中的说明,通过 SSH 连接到管理员工作站。

您的管理员工作站已激活您列入许可名单的服务帐号。在管理员工作站上完成本主题中的所有其余步骤。

为您的管理员集群配置静态 IP

如需指定您要用于管理员集群的静态 IP 地址,请创建一个名为 admin-hostconfig.yaml 的主机配置文件。在本练习中,您需要指定五个 IP 地址以供管理员集群使用。

以下是包含五个主机的主机配置文件的示例:

hostconfig:
  dns: 172.16.255.1
  tod: 216.239.35.0
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.10
      hostname: admin-host1
    - ip: 172.16.20.11
      hostname: admin-host2
    - ip: 172.16.20.12
      hostname: admin-host3
    - ip: 172.16.20.13
      hostname: admin-host4
    - ip: 172.16.20.14
      hostname: admin-host5

ips 字段是 IP 地址和主机名的数组。它们是 GKE On-Prem 将分配给管理员集群节点的 IP 地址和主机名。

在主机配置文件中,您还可以指定管理员集群节点将使用的 DNS 服务器、时间服务器和默认网关的地址。

searchdomainsfordns 字段是要在集群中使用的一组 DNS 搜索网域。这些网域会用作网域搜索列表的一部分。

为您的用户集群配置静态 IP

如需指定您要用于用户集群的静态 IP 地址,请创建一个名为 user-hostconfig.yaml 的主机配置文件。

以下是包含三个主机的主机配置文件的示例:

hostconfig:
  dns: 172.16.255.1
  tod: 216.239.35.0
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.15
      hostname: user-host1
    - ip: 172.16.20.16
      hostname: user-host2
    - ip: 172.16.20.17
      hostname: user-host3

ips 字段是 IP 地址和主机名的数组。它们是 GKE On-Prem 将分配给用户集群节点的 IP 地址和主机名。

在主机配置文件中,您还可以指定用户集群节点将使用的 DNS 服务器、时间服务器和默认网关的地址。

searchdomainsfordns 字段是要在集群中使用的一组 DNS 搜索网域。这些网域会用作网域搜索列表的一部分。

GKE On-Prem 配置文件中的填充字段

回想一下,在创建管理员工作站时,您填写了名为 admin-ws-config.yaml 的配置文件。gkeadm 命令行工具使用 admin-ws-config.yaml 文件创建管理员工作站。

gkeadm 创建管理员工作站时,它生成了另一个名为 config.yaml 的配置文件。此配置文件位于管理员工作站上,用于创建 GKE On-Prem 集群。

admin-ws-config.yamlconfig.yaml 文件具有多个相同的字段。这些常用字段的值已填充到您的 config.yaml 文件中。

这些字段已使用您在创建管理员工作站时提供的值进行填充:

vcenter:
  credentials:
    address:
    username:
    password:
  datacenter:
  datastore:
  cluster:
  network:
  resourcepool:
  cacertpath:
gkeconnect:
  projectid:
  registerserviceaccountkeypath:
  agentserviceaccountkeypath:
stackdriver:
  projectid:
  serviceaccountkeypath:
gcrkeypath:

填写 GKE On-Prem 配置文件的其余部分

接下来,您需要填写 config.yaml 文件中的其余字段。

bundlepath

GKE On-Prem 软件包文件包含特定 GKE On-Prem 版本中的所有组件。将 bundlepath 的值设置为管理员工作站的软件包文件的路径。

bundlepath: /var/lib/gke/bundles/gke-onprem-vsphere-1.3.2-gke.1-full.tgz

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 版中,已知问题是系统会要求您提供文件夹的通用唯一标识符 (UUID),而不是文件夹的路径。

proxy

如果您的网络位于代理服务器后面,您必须指定代理地址以及不应通过代理服务器的所有地址。

设置 proxy.url 以指定代理服务器的 HTTP 地址。即使端口号与架构的默认端口相同,也必须包含端口号。您在此处指定的代理服务器会被 GKE On-Prem 集群使用。此外,除非您在管理员工作站上设置 HTTPS_PROXY 环境变量,否则您的管理员工作站会自动配置为使用同一代理服务器。

设置 proxy.noproxy 以定义不应通过代理服务器的 IP 地址、IP 地址范围、主机名和域名的列表。当 GKE On-Prem 向其中一个地址、主机或网域发送请求时,该请求会直接发送。

示例:

proxy:
  url: "http://my-proxy.example.local:80"
  noproxy: "10.151.222.0/24, my-host.example.local,10.151.2.1"

admincluster.ipblockfilepath

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

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

admincluster.bigip.credentials

GKE On-Prem 需要知道 F5 BIG-IP 负载平衡器的 IP 地址或主机名、用户名和密码。设置 admincluster.bigip 下的值以提供此信息。在 credentials 之后放置一个锚标记 &bigip-credentials,这样您就不必在 usercluster 部分中重复此信息。例如:

admincluster:
  ...
  bigip:
    credentials: &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.controlplanevip 的值设置为您已选择在负载平衡器上为管理员集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip 的值设置为您已选择在负载平衡器上为管理员集群的 Ingress 服务配置的 IP 地址。例如:

admincluster:
  ...
  vips:
    controlplanevip: 203.0.113.3
    ingressvip: 203.0.113.4

admincluster.serviceiprangeadmincluster.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.ipblockfilepath

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

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

usercluster.bigip.credentials

usercluster.bigip.credentials 之后添加参考 *bigip-credentials,以使用您在 admincluster.bigip.credentials 中指定的同一 addressusernamepassword。例如:

usercluster:
  ...
  bigip:
    credentials: *bigip-credentials

usercluster.bigip.partition

您之前为用户集群创建了 BIG-IP 分区。将 usercluster.bigip.partition 设置为分区的名称。例如:

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

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

停用 VMware DRS 反亲和性规则

GKE On-Prem 会自动为您的用户集群节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布到数据中心内的至少三个物理主机上。

为了使用此功能,您的 vSphere 环境必须满足以下条件:

  • VMware DRS 已启用。VMware DRS 需要 vSphere Enterprise Plus 许可版本。如需了解如何启用 DRS,请参阅在集群中启用 VMware DRS
  • vcenter 字段中提供的 vSphere 用户帐号拥有 Host.Inventory.EditCluster 权限。
  • 至少有三个物理主机可用。

回想一下,如果您拥有 vSphere Standard 许可,则无法启用 VMware DRS。

如果您没有启用 DRS,或者没有至少三个主机可供安排 vSphere 虚拟机,请将 usercluster.antiaffinitygroups.enabled: false 添加到您的配置文件中。例如:

usercluster:
  ...
  antiaffinitygroups:
    enabled: false

如需了解详情,请参阅 1.1.0-gke.6 版的版本说明

lbmode

lbmode 设置为 "Integrated"。例如:

lbmode: "Integrated"

stackdriver.clusterlocation

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

stackdriver.enablevpc

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

配置文件中的其他字段

除了本主题中显示的字段之外,GKE On-Prem 配置文件还有几个字段。例如,您可以使用 manuallbspec 字段将 GKE On-Prem 配置为在手动负载平衡模式下运行。

如需查看配置文件中字段的完整说明,请参阅使用 DHCP 安装使用静态 IP 地址安装

验证配置文件

修改配置文件后,请运行 gkectl check-config 验证文件是否有效并可用于安装:

gkectl check-config --config config.yaml

如果该命令返回任何 FAILURE 消息,请修复问题并再次验证文件。

如果您想跳过更耗时的验证,请传递 --fast 标志。如需跳过各项验证,请使用 --skip-validation-xxx 标志。如需详细了解 check-config 命令,请参阅运行预检检查

运行 gkectl prepare

运行 gkectl prepare 以初始化您的 vSphere 环境:

gkectl prepare --config config.yaml --skip-validation-all

创建管理员集群和用户集群

  1. 通过运行 gkectl create cluster 命令创建管理员集群和用户集群。

    gkectl create cluster --config config.yaml --skip-validation-all

    gkectl create cluster 命令会在当前目录中创建名为 [CLUSTER_NAME]-kubeconfigkubeconfig 文件,其中 [CLUSTER_NAME]您为 cluster 设置的名称。示例:MY-CLUSTER-kubeconfig

    GKE On-Prem 文档使用以下占位符来引用这些 kubeconfig 文件:

    • 管理员集群:[ADMIN_CLUSTER_KUBECONFIG]
    • 用户集群:[USER_CLUSTER_KUBECONFIG]
  2. 验证集群是否已创建且可正常运行:

    1. 如需验证管理员集群,请运行以下命令:

      kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

      输出会显示管理员集群节点。

    2. 如需验证用户集群,请运行以下命令:

      kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]

      输出会显示用户集群节点。例如:

      NAME                        STATUS   ROLES    AGE   VERSION
      xxxxxx-1234-ipam-15008527   Ready    <none>   12m   v1.14.7-gke.24
      xxxxxx-1234-ipam-1500852a   Ready    <none>   12m   v1.14.7-gke.24
      xxxxxx-1234-ipam-15008536   Ready    <none>   12m   v1.14.7-gke.24
      

继续阅读下一部分,了解如何将应用部署到您的用户集群。