本文档介绍如何为 Anthos clusters on VMware (GKE On-Prem) 的小型概念性安装创建基本集群。
主要步骤如下:
创建管理员工作站。
从管理员工作站创建管理员集群。
从管理员工作站创建用户集群。
准备工作
按照设置极简基础架构中的说明设置您的 vSphere 和 Google Cloud 环境。
收集信息
要准备填写管理员工作站配置文件,请收集以下信息:
您的 vCenter 帐号的用户名和密码
vCenter 服务器的根 CA 证书
vSphere 数据中心的名称
vSphere 集群的名称
vSphere 网络的名称
规划 IP 地址中描述的 IP 地址
您的 Google Cloud 项目的 ID
组件访问服务帐号的 JSON 密钥文件的路径
登录
gkeadm
命令行工具使用您的 SDK account
属性创建服务帐号。因此,在运行 gkeadm
以创建管理员工作站之前,请务必设置 SDK account
属性。
使用任意 Google 帐号登录。这将设置您的 SDK account
属性:
gcloud auth login
验证您的 SDK account
属性是否已正确设置:
gcloud config list
输出会显示 SDK account
属性的值。例如:
[core] account = my-name@google.com disable_usage_reporting = False Your active configuration is: [default]
向您的 SDK 帐号授予角色
您设置为 SDK account
属性的 Google 帐号必须具有以下 IAM 角色,gkeadm
才能为您创建和管理服务帐号:
resourcemanager.projectIamAdmin
serviceusage.serviceUsageAdmin
iam.serviceAccountCreator
iam.serviceAccountKeyAdmin
如需授予角色,您必须拥有 Google Cloud 项目的特定权限。如需了解详情,请参阅授予、更改和撤消对资源的访问权限。
如果您拥有所需的权限,则可以自行授予这些角色。否则,必须由您所在组织中的其他人为您授予这些角色。
要授予这些角色,请执行以下操作:
Linux 和 macOS
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/serviceusage.serviceUsageAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountKeyAdmin"
Windows
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/serviceusage.serviceUsageAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountKeyAdmin"
请替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 IDACCOUNT
:您的 SDKaccount
属性的值
创建管理员工作站。
本部分中的步骤使用 gkeadm
命令行工具,该工具可用于 64 位的 Linux、Windows 10、Windows Server 2019 和 macOS 10.15 及更高版本。
下载 gkeadm
到当前目录。
生成模板
./gkeadm create config
上述命令在当前目录中创建了这些文件:
credential.yaml
admin-ws-config.yaml
填写 credential.yaml
在 credential.yaml
中,填写 vCenter 用户名和密码。例如:
kind: CredentialFile items: - name: vCenter username: "my-account-name" password: "AadmpqGPqq!a"
熟悉管理员工作站配置文件
浏览管理员工作站配置文件的文档,以大致了解该文件中的内容。您可以在单独的标签页或窗口中打开页面,这样方便您在填写字段值时查看该页面。
填写 admin-ws-config.yaml
打开 admin-ws-config.yaml
进行修改。
系统将使用默认值或生成值为您填充以下字段:
vCenter: credentials: fileRef: credentials: entry: adminWorkstation: name: cpus: memoryMB: diskGB: dataDiskName: dataDiskMB: ntpServer:
填写 gcp.componentAccessServiceAccountKeyPath 字段。
填写 vCenter 部分中的以下字段。
credentials: address: datacenter: datastore: cluster: network: caCertPath:
将 vCenter.resourcePool 设置为 CLUSTER_NAME/Resources。将 CLUSTER_NAME 替换为您的 vSphere 集群名称。
如有必要,请填写 proxyURL 字段。
如有必要,请填写 adminWorkstation.proxyURL 字段。
将 adminWorkstation.network.ipAllocationMode 设置为 "static"
。
填写 adminWorkstation.network.hostConfig 部分中的以下字段:
ip: gateway: netmask: dns:
管理员工作站配置文件示例
以下是填写好的管理员工作站配置文件的示例:
gcp: componentAccessServiceAccountKeyPath: "/usr/local/google/home/me/keys/component-access-key.json" vCenter: credentials: address: "vc01.example" fileRef: path: "credential.yaml" entry: "vCenter" datacenter: "vc01" datastore: "vc01-datastore-1" cluster: "vc01-workloads-1" network: "vc01-net-1" resourcePool: "vc01-workloads-1/Resources" caCertPath: "/usr/local/google/home/stevepe/certs/vc01-cert.pem" proxyUrl: "" adminWorkstation: name: gke-admin-ws-220304-014925 cpus: 4 memoryMB: 8192 diskGB: 50 dataDiskName: gke-on-prem-admin-workstation-data-disk/gke-admin-ws-220304-014925-data-disk.vmdk dataDiskMB: 512 network: ipAllocationMode: "static" hostConfig: ip: "172.16.20.49" gateway: "172.16.20.1" netmask: "255.255.255.0" dns: - "203.0.113.1" proxyUrl: "" ntpServer: ntp.ubuntu.com
创建管理员工作站
创建管理员工作站,并自动创建服务帐号:
./gkeadm create admin-workstation --auto-create-service-accounts
输出中会包含有关管理员工作站创建过程的详细信息,并提供一个命令供您通过 SSH 连接到管理员工作站:
... Admin workstation is ready to use. Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation This file is required for future upgrades SSH into the admin workstation with the following command: ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49 ********************************************************************
如需详细了解如何创建管理员工作站,请参阅创建管理员工作站。
查看管理员工作站上的文件
使用上述输出中显示的命令获取与管理员工作站的 SSH 连接。例如:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49
列出主目录中的文件:
ls -1
输出包括 gkeadm
为您创建的两个服务帐号的 JSON 密钥文件:连接注册服务帐号和日志记录监控服务帐号。记下连接和注册服务帐号的 JSON 密钥文件的名称。稍后创建集群时将用到它。例如:
admin-cluster.yaml admin-ws-config.yaml sa-key.json connect-register-sa-2203040617.json credential.yaml log-mon-sa-2203040617.json logs vc01-cert.pem user-cluster.yaml
创建管理员集群
与管理员工作站建立 SSH 连接。
为管理员集群指定静态 IP 地址
如需指定要用于管理员集群、节点的静态 IP 地址,请创建名为 admin-cluster-ipblock.yaml
的 IP 地址块文件。
您的管理员集群中的以下节点需要五个 IP 地址:
用于运行管理员集群控制平面和插件的三个节点
一个额外节点,供升级时临时使用
一个用于为稍后创建的用户集群运行控制平面的节点
以下是一个 IP 地址块文件示例,其中包含五个节点的地址:
blocks: - netmask: 255.255.255.0 gateway: 172.16.20.1 ips: - ip: 172.16.20.50 hostname: admin-vm-1 - ip: 172.16.20.51 hostname: admin-vm-2 - ip: 172.16.20.52 hostname: admin-vm-3 - ip: 172.16.20.53 hostname: admin-vm-4 - ip: 172.16.20.54 hostname: admin-vm-5
ips
字段是 IP 地址和主机名的数组。它们是 Anthos clusters on VMware 将分配给管理员集群节点的 IP 地址和主机名。
在 IP 地址块文件中,您还可以为管理员集群节点指定子网掩码和默认网关。
熟悉管理员集群配置文件
浏览管理员集群配置文件的文档,以大致了解该文件中的内容。您可以在单独的标签页或窗口中打开页面,这样方便您在填写字段值时查看该页面。
填写管理员集群配置文件
当 gkeadm
创建管理员工作站时,它生成了一个名为 admin-cluster.yaml
的配置文件。此配置文件用于创建管理员集群。
打开 admin-cluster.yaml
进行修改。
管理员集群配置文件中的几个字段已填写了默认值、生成的值或您在创建管理员工作站时提供的值。您可以保持这些字段不变。
填写 vCenter.dataDisk 字段。
填写 network.hostConfig 部分中的以下字段:
dnsServers: ntpServers:
将 network.ipMode.type 设置为 "static"
。
将 network.ipMode.ipBlockFilePath 设置为 "admin-cluster-ipblock.yaml"
。
填写 network.serviceCIDR 和 network.podCIDR 的值或保留默认值。
填写 loadBalancer.vips 部分中的以下字段:
controlPlaneVIP: addonsVIP:
将 loadBalancer.kind 设置为 "MetalLB"
。
将 antiAffinityGroups.enabled 设置为 false
。
将 gkeConnect.projectID 设置为您的 Google Cloud 项目的 ID。
将 gkeConnect.registerServiceAccountKeyPath 设置为连接-注册服务帐号的 JSON 密钥文件的路径。
管理员集群配置文件示例
以下是填写好的管理员集群配置文件的示例:
apiVersion: v1 kind: AdminCluster name: "gke-admin-01" bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.11.0-gke.543-full.tgz" vCenter: address: "vc01.example" datacenter: "vc-01" cluster: "vc01-workloads-1" resourcePool: "my-cluster/Resources" datastore: "vc01-datastore-1" caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem"" credentials: fileRef: path: "credential.yaml" entry: "vCenter" dataDisk: "vc01-admin-disk.vmdk" network: hostConfig: dnsServers: - "203.0.113.1" - "198.51.100.1" ntpServers: - "216.239.35.4" ipMode: type: "static" serviceCIDR: "10.96.232.0/24" podCIDR: "192.168.0.0/16" vCenter: networkName: "vc01-net-1" loadBalancer: vips: controlPlaneVIP: "172.16.20.59" addonsVIP: "172.16.20.60" kind: "MetalLB" antiAffinityGroups: enabled: false componentAccessServiceAccountKeyPath: "sa-key.json" gkeConnect: projectID: "my-project-123" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" disableVsphereResourceMetrics: false
验证管理员集群配置文件
验证管理员集群配置文件是否有效以及是否可以创建集群:
gkectl check-config --config admin-cluster.yaml
准备 vSphere 环境
运行 gkectl prepare
以初始化您的 vSphere 环境:
gkectl prepare --config admin-cluster.yaml --skip-validation-all
创建管理员集群
创建管理员集群:
gkectl create admin --config admin-cluster.yaml
发生故障后恢复管理员集群创建
如果管理员集群创建失败或被取消,您可以再次运行 create
命令:
gkectl create admin --config admin-cluster.yaml
找到管理员集群 kubeconfig 文件的位置
gkectl create admin
命令会在当前目录中创建一个名为 kubeconfig
的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与管理员集群进行交互。
验证管理员集群正在运行
验证管理员集群是否正在运行:
kubectl get nodes --kubeconfig kubeconfig
输出会显示管理员集群节点。 例如:
gke-admin-master-hdn4z Ready control-plane,master ... gke-admin-node-7f46cc8c47-g7w2c Ready ... gke-admin-node-7f46cc8c47-kwlrs Ready ...
创建用户集群
您可以在 Google Cloud 控制台中或在管理员工作站上通过命令行创建用户集群。
控制台
本部分介绍了如何使用 MetalLB 作为负载均衡器创建为最小基础架构配置的用户集群。
当您创建用户集群时,Google Cloud 控制台会自动在您为创建集群选择的 Google Cloud 项目中启用 GKE On-Prem API。GKE On-Prem API 在 Google Cloud 的基础架构中运行,并且 Google Cloud 控制台使用此 API 在 vSphere 数据中心内创建集群。如需管理集群,GKE On-Prem API 必须将有关集群状态的元数据存储在创建集群时指定的 Google Cloud 区域中。此元数据可让 GKE On-Prem API 管理用户集群生命周期,并且不包含特定于工作负载的数据。
在 Google Cloud 控制台中,前往 Anthos 集群页面。
选择您要供创建集群的 Google Cloud 项目。所选项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。
点击创建集群。
在对话框中,点击本地。
点击 VMware vSphere 旁边的配置。
查看前提条件,然后点击继续。
集群基本信息
- 输入用户集群的名称。
在管理员集群下,从列表中选择管理员集群。如果要使用的管理员集群未显示,请参阅问题排查部分集群基本信息下拉列表中未显示管理员集群。
在 GCP API 位置字段中,从列表中选择 Google Cloud 区域。除了控制运行 GKE On-Prem API 所在的区域之外,此设置还可控制存储以下内容的区域:
- GKE On-Prem API 管理集群生命周期所需的用户集群元数据
- 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
- Cloud Audit Logs 创建的管理员审核日志
选择用户集群的 Anthos clusters on VMware 版本。
点击继续以前往网络部分。
网络
在本部分中,您将指定集群的节点、Pod 和 Service 的 IP 地址。在一个用户集群中,每个节点都需要一个 IP 地址,此外,该集群还需要一个额外的 IP 地址用于用户集群升级期间的临时节点。如需了解详情,请参阅“用户集群需要多少个 IP 地址?”。
在节点 IP 部分中,为用户集群选择 IP 模式。从下列选项中选择一项:
DHCP:如果您希望集群节点从 DHCP 服务器获取其 IP 地址,请选择 DHCP。
静态:如果您要为集群节点提供静态 IP 地址,请选择静态。
如果您选择了 DHCP,请跳到下一步,以指定 Service 和 Pod CIDR。在静态 IP 地址模式部分,请提供以下信息:
- 输入用户集群的网关的 IP 地址。
输入用户集群节点的子网掩码。
在 IP 地址部分中,输入用户集群中节点的 IP 地址和(可选)主机名。您可以输入单个 IP v4 地址(例如 192.0.2.1)或 IPv4 CIDR 地址块(例如 192.0.2.0/24)。
- 如果您输入 CIDR 地址块,请不要输入主机名。
- 如果您输入单个 IP 地址,则可以选择输入主机名。如果您未输入主机名,则 Anthos clusters on VMware 会使用 vSphere 中的虚拟机名称作为主机名。
根据需要点击 + 添加 IP 地址以输入更多 IP 地址。
在 Service CIDR 和 Pod CIDR 部分中,Google Cloud 控制台为 Kubernetes Service 和 Pod 提供以下地址范围:
- Service CIDR:10.96.0.0/20
- Pod CIDR:192.168.0.0/16
如果您希望输入自己的地址范围,请参阅 Pod 和 Service 的 IP 地址以了解最佳实践。
如果您选择了静态 IP 模式 (Static IP mode),请在主机配置部分中指定以下信息:
- 输入 DNS 服务器的 IP 地址。
- 输入 NTP 服务器的 IP 地址。
- (可选)输入 DNS 搜索网域。
点击继续以转到负载均衡器部分。
负载均衡器
将 MetalLB 配置为负载均衡器。
在负载均衡器类型中,使 MetalLB 保持选中状态。
在虚拟 IP 部分中,输入以下内容:
控制平面 VIP:用于发送到用户集群 Kubernetes API 服务器的流量的目标 IP 地址。此 IP 地址必须与管理员集群节点位于同一 L2 网域中。请勿在地址池部分中添加此地址。
Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。您必须将其添加到地址池部分中的地址池。
在地址池部分中,为 Ingress VIP 指定地址池。
- 点击 + 添加 IP 地址范围。
- 输入地址池的名称。
- 以 CIDR 表示法输入 IP 地址范围(例如,192.0.2.0/26)或范围表示法(例如 192.0.2.64-192.0.2.72)。 各个池中的 IP 地址不能重叠,并且必须与集群节点位于同一子网。
在 IP 地址分配下,选择以下选项之一:
- 自动:如果您希望 MetalLB 控制器自动将地址池中的 IP 地址分配给
LoadBalancer
类型的 Service,请选择此选项。 - 手动:如果您打算使用池中的地址手动为
LoadBalancer
类型的 Service 指定地址,请选择此选项。
- 自动:如果您希望 MetalLB 控制器自动将地址池中的 IP 地址分配给
如果您希望 MetalLB 控制器不使用池中以 .0 或 .255 结尾的地址,请点击避免使用有问题的 IP 地址。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。
根据需要重复上述步骤。 完成后,请点击完成。
点击继续。
控制平面
查看为管理员集群中运行用户集群的控制平面组件的节点配置的默认值。默认值足以满足最小基础架构的需求,但您可以根据需要调整值。
点击继续。
特性
节点池
创建的集群将至少具有一个节点池。节点池是用于在此集群中创建的节点组的模板。如需了解详情,请参阅创建和管理节点池。
查看为节点池配置的默认值。默认值足以满足最小基础架构的需求,但您可以根据需要调整值。
验证并完成
点击验证并完成以创建用户集群。创建用户集群需要 10 分钟或更长时间。Google Cloud 控制台会在验证设置并在数据中心内创建集群时显示状态消息。
创建集群后,在 Google Cloud 控制台中创建用户集群的操作人员会自动登录集群。其他操作人员需要按照从 Cloud Console 登录集群中的步骤获取对集群的访问权限。
如果验证设置时出现错误,Google Cloud 控制台将显示一条错误消息,该消息应足够明确,便于您解决配置问题并再次尝试创建集群。
如需详细了解可能的错误以及解决方法,请参阅排查在 Google Cloud 控制台中创建用户集群的问题。
创建用户集群 kubeconfig 文件
如需通过命令行访问数据中心内的用户集群,您需要从管理员集群获取 kubeconfig
文件。在 Google Cloud 控制台指示用户集群状态为健康后,在管理员工作站上运行以下命令以在本地保存用户集群的新 kubeconfig
文件。替换以下内容:
- CLUSTER_NAME:新创建的用户集群的名称
- ADMIN_CLUSTER_KUBECONFIG:管理员集群
kubeconfig
文件的路径 - USER_CLUSTER_KUBECONFIG:命令输出的用户集群
kubeconfig
文件的名称
kubectl get secret admin \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ -n CLUSTER_NAME \ -o=jsonpath='{.data.admin\.conf}' | base64 -d > USER_CLUSTER_KUBECONFIG
该文件保存后,您可以开始使用 kubectl
访问用户集群,例如:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get namespaces
命令行
与管理员工作站建立 SSH 连接。
为用户集群指定静态 IP。
如需指定您要用于用户集群的静态 IP 地址,请创建一个名为
user-cluster-ipblock.yaml
的 IP 地址块文件。用户集群节点需要三个 IP 地址,升级期间还需要临时使用一个额外地址。以下是包含四个地址的 IP 地址块文件的示例:blocks: - netmask: 255.255.255.0 gateway: 172.16.20.1 ips: - ip: 172.16.20.55 hostname: user-vm-1 - ip: 172.16.20.56 hostname: user-vm-2 - ip: 172.16.20.57 hostname: user-vm-3 - ip: 172.16.20.58 hostname: user-vm-4
填写用户集群配置文件
当 gkeadm
创建管理员工作站时,它生成了一个名为 user-cluster.yaml
的配置文件。此配置文件用于创建用户集群。
熟悉用户集群配置文件。
浏览用户集群配置文件的文档,以大致了解该文件中的内容。您可以在单独的标签页或窗口中打开页面,这样方便您在填写字段值时查看该页面。
打开
user-cluster.yaml
进行修改。用户集群配置文件中的几个字段已填写了默认值、生成的值或您在创建管理员工作站时提供的值。您可以保持这些字段不变。
将 name 设置为您为用户集群选择的名称。
填写网络部分中的字段
在 network.hostConfig 部分中为以下字段输入 IP 地址:
dnsServers: ntpServers:
将 network.ipMode.type 设置为
"static"
。将 network.ipMode.ipBlockFilePath 设置为
"user-cluster-ipblock.yaml"
。填写 network.serviceCIDR 和 network.podCIDR 的值或保留默认值。
填写负载均衡器部分中的字段
填写 loadBalancer.vips 部分中的以下字段:
controlPlaneVIP: ingressVIP:
将 loadBalancer.kind 设置为
"MetalLB"
。填写 loadBalancer.metalLB 部分。如需了解详情,请参阅使用 MetalLB 进行捆绑式负载均衡。
将至少一个节点池的 enableLoadBalancer 设置为
true
。如需了解详情,请参阅使用 MetalLB 进行捆绑式负载均衡。将 antiAffinityGroups.enabled 设置为
false
。
用户集群配置文件示例
以下是填写好的用户集群配置文件的示例:
apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: "1.11.0-gke.543" network: hostConfig: dnsServers: - "203.0.113.1" - "198.51.100.1" ntpServers: - "216.239.35.4" ipMode: type: "static" serviceCIDR: "10.96.0.0/20" podCIDR: "192.168.0.0/16" loadBalancer: vips: controlPlaneVIP: "172.16.20.61" ingressVIP: "172.16.20.62" kind: "MetalLB" metalLB: addressPools: - name: "uc-address-pool" addresses: - "172.16.20.63-172.16.20.72" nodePools: - name: "uc-node-pool" cpus: 4 memoryMB: 8192 replicas: 3 enableLoadBalancer: true antiAffinityGroups: enabled: false gkeConnect: projectID: "my-project-123" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" disableVsphereResourceMetrics: false autoRepair: enabled: true
验证配置并创建集群
验证用户集群配置文件是否有效且可用于创建集群:
gkectl check-config --kubeconfig kubeconfig --config user-cluster.yaml
创建用户集群:
gkectl create cluster --kubeconfig kubeconfig --config user-cluster.yaml
创建集群大约需要 30 分钟。
找到用户集群 kubeconfig 文件的位置
gkectl create cluster
命令会在当前目录中创建一个名为 USER_CLUSTER_NAME-kubeconfig
的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与用户集群进行互动。
验证用户集群是否正在运行
验证用户集群是否正在运行:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
将 USER_CLUSTER_KUBECONFIG 替换为您的 kubeconfig 文件的路径。
输出会显示用户集群节点。例如:
my-user-cluster-node-pool-69-d46d77885-7b7tx Ready ... my-user-cluster-node-pool-69-d46d77885-lsvzk Ready ... my-user-cluster-node-pool-69-d46d77885-sswjk Ready ...