本页面介绍如何创建可用于安装 GKE On-Prem 的管理员工作站。
在本主题中,您将创建一个具有静态 IP 地址的管理员工作站。
如果您要创建使用动态主机配置协议 (DHCP) 来获取 IP 地址的管理员工作站,请参阅使用 DHCP 创建管理员工作站。
如果您是在 Linux 上运行命令,则可以采用另一种方法,而不是执行本主题中的步骤。另一种方法就是使用 gkeadm
工具,该工具可以自动完成创建管理员工作站的大部分工作。
概览
管理员工作站是一个 vSphere 虚拟机,它包含创建和管理 GKE On-Prem 集群所需的全部工具。如需创建管理员工作站,请执行本主题中介绍的以下步骤:
- 下载管理员工作站开放虚拟化设备 (OVA) 文件(管理员工作站虚拟机的压缩映像)。
- 使用
govc
(vSphere 的命令行界面)将 OVA 导入 vSphere 作为虚拟机模板。 - 复制并填充 HashiCorp Terraform 配置文件。
- 使用 Terraform 0.11 版创建管理员工作站虚拟机。
为已列入许可名单的服务帐号创建密钥
如果已列入许可名单的服务帐号还没有 JSON 密钥文件,请立即创建一个:
gcloud auth login
-
gcloud iam service-accounts keys create whitelisted-key.json \ --iam-account [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]
其中,[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL] 是已列入许可名单的服务帐号的电子邮件地址。
下载管理员工作站 OVA
管理员工作站 OVA 包括安装和管理 GKE On-Prem 集群所需的全部集群组件、命令行工具和其他实体。
激活已列入许可名单的服务帐号:
gcloud auth activate-service-account --key-file [KEY_ALLOWLISTED_ACCOUNT]
其中,[KEY_ALLOWLISTED_ACCOUNT] 是已列入许可名单的服务帐号的 JSON 密钥文件的路径。
下载最新版本的管理员工作站 OVA 及其签名文件:
gsutil cp gs://gke-on-prem-release/admin-appliance/1.4.3-gke.3/gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.{ova,ova.1.sig} ./
使用 openssl
验证 OVA
使用 openssl
通过公钥验证下载的 OVA 文件:
openssl dgst -verify - -signature gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova.1.sig gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
此命令的预期输出为 Verified OK
。
使用 govc
将 OVA 导入 vSphere 并将其标记为虚拟机模板
在以下部分中,您将:
- 创建一些变量,以声明您的 vCenter Server 和 vSphere 环境的元素。
- 将管理员工作站 OVA 导入 vSphere 并将其标记为虚拟机模板。
为 govc
创建变量
在将管理员工作站 OVA 导入 vSphere 之前,您需要提供一些 govc
变量,用于声明您的 vCenter Server 和 vSphere 环境的元素:
export GOVC_URL=https://[VCENTER_SERVER_ADDRESS]/sdk export GOVC_USERNAME=[VCENTER_SERVER_USERNAME] export GOVC_PASSWORD=[VCENTER_SERVER_PASSWORD] export GOVC_DATASTORE=[VSPHERE_DATASTORE] export GOVC_DATACENTER=[VSPHERE_DATACENTER] export GOVC_INSECURE=true
您可以选择使用 vSphere 的默认资源池,也可以创建您自己的资源池:
# If you want to use a resource pool you've configured yourself, export this variable: export GOVC_RESOURCE_POOL=[VSPHERE_CLUSTER]/Resources/[VSPHERE_RESOURCE_POOL]
# If you want to use vSphere's default resource pool, export this variable instead: export GOVC_RESOURCE_POOL=[VSPHERE_CLUSTER]/Resources
其中:
- [VCENTER_SERVER_ADDRESS] 是您的 vCenter Server 的 IP 地址或主机名。
- [VCENTER_SERVER_USERNAME] 是在 vCenter Server 上拥有管理员角色或同等权限的帐号的用户名。
- [VCENTER_SERVER_PASSWORD] 是 vCenter Server 帐号的密码。
- [VSPHERE_DATASTORE] 是您在 vSphere 环境中配置的数据存储区的名称。
- [VSPHERE_DATACENTER] 是您在 vSphere 环境中配置的数据中心的名称。
- [VSPHERE_CLUSTER] 是您在 vSphere 环境中配置的集群的名称。 如果使用非默认资源池,则
- [VSPHERE_RESOURCE_POOL] 是您为 vSphere 环境配置的资源池的名称。
为代理创建变量
如果您使用了代理,请导出变量以获取其 HTTP 和 HTTPS 地址,其中 [PROXY_ADDRESS] 是代理的 IP 地址或主机名:
export HTTP_PROXY=http://[PROXY_ADDRESS] export HTTPS_PROXY=https://[PROXY_ADDRESS]
将 OVA 导入 vSphere:标准交换器
如果您使用的是 vSphere 标准交换器,请使用此命令将 OVA 导入 vSphere:
govc import.ova -options - gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova <<EOF { "DiskProvisioning": "thin", "MarkAsTemplate": true } EOF
将 OVA 导入 vSphere:分布式交换器
如果您使用的是 vSphere 分布式交换器,请使用以下命令将 OVA 导入到 vSphere,其中 [YOUR_DISTRIBUTED_PORT_GROUP_NAME] 是您的分布式端口组的名称:
govc import.ova -options - gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova <<EOF { "DiskProvisioning": "thin", "MarkAsTemplate": true, "NetworkMapping": [ { "Name": "VM Network", "Network": "[YOUR_DISTRIBUTED_PORT_GROUP_NAME]" } ] } EOF
复制 Terraform 配置文件
为 Terraform 文件创建目录:
mkdir [TERRAFORM_DIR]
其中,[TERRAFORM_DIR] 是保存 Terraform 文件的目录路径。
复制以下 TF 和 TFVARS 文件,将其分别保存到 [TERRAFORM_DIR]/terraform.tf
和 [TERRAFORM_DIR]/terraform.tfvars
。
TF 文件是执行虚拟机创建的 Terraform HCL 配置。
此处提供的 Terraform 文件适用于具有静态 IP 地址的管理员工作站。如果您要创建使用 DHCP 来获取其 IP 地址的管理员工作站,则使用 DHCP 创建管理员工作站中提供的 Terraform 文件可供您使用。
创建 SSH 密钥
创建 SSH 密钥,以便从本地笔记本电脑或工作站通过 SSH 连接到管理员工作站。在基于 Linux 的操作系统上,您可以使用 ssh-keygen
:
ssh-keygen -t rsa -f ~/.ssh/vsphere_workstation -N ""
修改 TFVARS 文件
在文本编辑器中打开 terraform.tfvars
,并为以下变量提供值。您可以通过登录 vCenter Client 找到其中许多值:
vcenter_user
以字符串的形式提供 vCenter Server 用户帐号。用户帐号应具有管理员角色或同等权限(请参阅 vSphere 要求)。
例如:
vcenter_user = "administrator@vsphere.local"
vcenter_password
以字符串的形式提供 vCenter Server 用户帐号的密码。例如:
vcenter_password = "#STyZ2T#Ko2o"
vcenter_server
以字符串的形式提供 vCenter Server 的地址(IP 地址或主机名)。例如:
vcenter_server = "198.51.100.2"
ssh_public_key_path
提供 SSH 公钥的路径。您在上一步中创建了此路径:
ssh_public_key_path = "~/.ssh/vsphere_workstation.pub"
vm_name
请为管理员工作站提供您选择的名称。例如:
vm_name = "my-admin-workstation"
datastore
请以字符串形式提供您的 vSphere 数据存储区的名称。例如:
datastore = "MY-DATASTORE"
datacenter
请以字符串形式提供您的 vSphere 数据中心的名称。例如:
datacenter = "MY-DATACENTER"
cluster
请以字符串形式提供您的 vSphere 集群的名称。例如:
cluster = "MY-CLUSTER"
resource_pool
如果您使用的是非默认资源池,请以字符串形式提供 vSphere 资源池的名称。例如:
resource_pool = "MY-POOL"
如果您使用的是默认资源池,请提供以下值:
resource_pool = "[MY_CLUSTER]/Resources"
其中,[MY_CLUSTER] 是您的 vSphere 集群的名称。
请参阅为独立主机指定根资源池。
network
以字符串形式提供要在其中创建管理员工作站的 vSphere 网络。例如:
network = "MY-VM-NETWORK"
vm_template
以字符串形式提供虚拟机模板名称。您已创建并导入 OVA,并在上一步将它标记为模板。请注意,模板名称没有 .ova
扩展名。
vm_template = "gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3"
ipv4_address
为管理员工作站提供 IPv4 静态 IP 地址。例如:
ipv4_address = "203.0.113.1"
ipv4_netmask_prefix_length
提供要在其中创建管理员工作站的网络的子网掩码中的位数。例如:
ipv4_netmask_prefix_length = "22"
ipv4_gateway
提供将在其中创建管理员工作站的子网的默认网关的 IP 地址。例如:
ipv4_gateway = "198.51.100.1
dns_nameservers
提供 DNS 域名服务器以供管理员工作站使用,以英文逗号分隔。例如:
dns_nameservers = "8.8.8.8,8.8.4.4"
创建管理员工作站
现在,您可以创建管理员工作站虚拟机了。对于本部分中的步骤,请使用 Terraform 0.11 版。
转到包含 Terraform 配置文件(TF 和 TFVARS)的目录:
在目录中初始化 Terraform 并应用配置。这可能需要几分钟时间:
terraform init && terraform apply -auto-approve -input=false
通过 SSH 连接到管理员工作站
转到包含 Terraform 配置文件的目录。
检索管理员工作站的 IP 地址:
terraform output ip_address
记下管理员工作站的 IP 地址。
使用您的 SSH 密钥和 IP 地址通过 SSH 连接到管理员工作站:
ssh -i ~/.ssh/vsphere_workstation ubuntu@[ADMIN_WORKSTATION_IP_ADDRESS]
验证管理员工作站是否已正确设置
确认您的管理员工作站上安装了 gkectl
和 docker
:
gkectl version docker version
在管理员工作站上配置 NTP 服务器
默认情况下,管理员工作站使用 ntp.ubuntu.com 作为其网络时间协议 (NTP) 服务器。如果您的组织使用另一个时间服务器,请将管理员工作站配置为与组织中的其他计算机使用相同的 NTP 服务器。
输入以下命令在管理员工作站上配置 NTP 服务器:
sudo mkdir -p /etc/systemd/timesyncd.conf.d/ sudo bash -c "cat >> /etc/systemd/timesyncd.conf.d/cloud-init.conf" << EOF [Time] NTP=[NTP_SERVER] EOF sudo systemctl restart systemd-timesyncd timedatectl status
其中,[NTP_SERVER] 是 NTP 服务器的主机名或 IP 地址。
如需验证 NTP 服务器是否正常工作,请输入以下命令:
timedatectl
输出类似于以下内容:
Local time: Tue 2019-12-17 00:21:50 UTC Universal time: Tue 2019-12-17 00:21:50 UTC RTC time: Tue 2019-12-17 00:21:50 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no
问题排查
下载 OVA 时出现 AccessDeniedException
- 表现
尝试下载管理员工作站 OVA 和签名会返回以下错误:
AccessDeniedException: 403 whitelisted-service-account@project.iam.gserviceaccount.com does not have storage.objects.list access to gke-on-prem-release
- 潜在原因
已列入许可名单的服务帐号未激活。
- 解决方法
确保您已激活已列入许可名单的服务帐号。如果问题仍然存在,请与 Google 联系以获取帮助。
openssl
无法验证管理员工作站 OVA
- 表现
对管理员工作站 OVA 文件运行
openssl dgst
不会返回Verified OK
- 潜在原因
OVA 文件存在问题,导致无法成功验证。
- 解决方法
按照下载管理员工作站 OVA 中的说明,尝试重新下载并部署管理员工作站 OVA。如果问题仍然存在,请与 Google 联系以获取帮助。
如需了解详情,请参阅问题排查。