创建管理工作站

本页面介绍如何创建最新版本的管理员工作站虚拟机 (VM)

如需升级现有管理员工作站,请参阅升级 GKE On-Prem

概览

管理员工作站是一个 vSphere 虚拟机,它包含创建和管理 GKE On-Prem 集群所需的全部工具。如需创建管理员工作站,请执行本主题中介绍的以下步骤:

  • 下载管理员工作站开放虚拟化设备 (OVA) 文件(管理员工作站虚拟机的压缩映像)。
  • 使用 govc(vSphere 的命令行界面)将 OVA 导入 vSphere 作为虚拟机模板。
  • 复制并填充 HashiCorp Terraform 配置文件。
  • 使用 Terraform 创建虚拟机。

准备工作

  1. 阅读管理员工作站概览
  2. 完成准备安装中的步骤。
  3. 检查您是否已安装 govc
  4. 检查您是否已安装 Terraform 0.11 版。

下载管理员工作站 OVA

从“下载”主题下载最新版本的管理员工作站 OVA。最新的 OVA 文件为:

gke-on-prem-admin-appliance-vsphere-1.1.2-gke.0.ova

其中 1.1.2-gke.0 是最新的 GKE On-Prem 版本。OVA 包括安装和管理 GKE On-Prem 集群所需的所有集群组件、命令行工具和其他实体。最新版本的 OVA 包括这些实体的最新版本。

将此文件保存在用于创建管理员工作站的计算机的某个位置。

使用 govc 将 OVA 导入 vSphere 并将其标记为虚拟机模板

在以下部分中,您将:

  1. 创建一些变量,以声明您的 vCenter Server 和 vSphere 环境的元素。
  2. 将管理员工作站 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 环境配置的资源池的名称。

将 OVA 导入 vSphere:标准交换器

如果您使用的是 vSphere 标准交换器,请使用此命令将 OVA 导入 vSphere:

govc import.ova -options - ~/gke-on-prem-admin-appliance-vsphere-1.1.2-gke.0.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.1.2-gke.0.ova <<EOF
{
  "DiskProvisioning": "thin",
  "MarkAsTemplate": true,
  "NetworkMapping": [
      {
          "Name": "VM Network",
          "Network": "[YOUR_DISTRIBUTED_PORT_GROUP_NAME]"
      }
  ]
}
EOF

复制 Terraform 配置文件

  1. 为 Terraform 文件创建目录:

    mkdir "[TERRAFORM_DIR]"
    

    其中,[TERRAFORM_DIR] 是保存 Terraform 文件的目录路径。

  2. 根据您是要为管理员工作站指定静态 IP 地址还是使用 DHCP 服务器获取 IP地址,请复制以下 Terraform 配置之一。

    请务必同时复制 TF 和 TFVARS 文件。TF 文件是执行虚拟机创建过程的 Terraform HCL 配置

  3. 将配置分别保存到 [TERRAFORM_DIR]/terraform.tf[TERRAFORM_DIR]/terraform.tfvars

DHCP

静态 IP

创建 SSH 公钥

创建 SSH 公钥,以便从本地笔记本电脑或工作站通过 SSH 连接到管理员工作站。在基于 Linux 的操作系统上,您可以使用 ssh-keygen

ssh-keygen -t rsa -f ~/.ssh/vsphere_workstation -N ""

修改 TFVARS 文件

在文本编辑器中打开 terraform.tfvars,并为以下变量提供值。您可以通过登录 vCenter Client 找到其中许多值:

vcenter_user

以字符串的形式提供 vCenter Server 用户帐号。用户帐号应具有管理员角色或同等权限(请参阅系统要求)。例如:

vcenter_user = "administrator@vsphere.local"

vcenter_password

以字符串的形式提供 vCenter Server 用户帐号的密码。例如:

vcenter_password = "#STyZ2T#Ko2o"

vcenter_server

以字符串的形式提供 vCenter Server 的地址(IP 地址或主机名)。例如:

vcenter_server = "198.51.100.0"

ssh_public_key_path

提供 SSH 公钥的路径。您在上一步中创建了此路径:

ssh_public_key_path = "~/.ssh/vsphere_workstation.pub"

vm_name

请为管理员工作站提供您选择的名称:

vm_name = "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"

请参阅为独立主机指定根资源池

network

以字符串形式提供要在其中创建管理员工作站的 vSphere 网络。例如:

network = "VM Network"

vm_template

以字符串形式提供虚拟机模板名称。您已创建并导入 OVA,并在上一步将它标记为模板:

vm_template = "gke-on-prem-admin-appliance-vsphere-[VERSION]"

为您的管理员工作站使用静态 IP 地址

如果您想为管理员工作站使用静态 IP,请复制静态 IP TF 和 TFVARS 文件。在 TFVARS 文件中,输入以下变量的值:

ipv4_address

为管理员工作站提供 IPv4 静态 IP 地址。例如:

ipv4_address = "203.0.113.0"

ipv4_netmask_prefix_length

提供要在其中创建管理员工作站的网络的子网掩码中的位数。例如:

ipv4_netmask_prefix_length = "22"

ipv4_gateway

提供将在其中创建管理员工作站的子网的网关。请参阅 VMware 的 vsphere_virtual_machine 文档。

例如:

ipv4_gateway = "198.51.100.0

dns_nameservers

提供 DNS 域名服务器以供管理员工作站使用,以英文逗号分隔。例如:

dns_nameservers = "8.8.8.8,8.8.4.4"

创建管理员工作站

完成上述步骤后,您就可以创建管理员工作站虚拟机了:

  1. 切换到包含 Terraform 配置文件(TF 和 TFVARS)的目录:

    cd [TERRAFORM_DIR]
    
  2. 在目录中初始化 Terraform 并应用配置。这可能需要几分钟时间:

    terraform init && terraform apply -auto-approve -input=false

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

  1. 切换到包含 Terraform 配置文件的目录。

  2. 检索管理员工作站的 IP 地址:

    terraform output ip_address

    记下管理员工作站的 IP 地址,或在 shell 中将其导出为变量。

  3. 使用生成的密钥和 IP 地址通过 SSH 连接到管理员工作站:

    ssh -i ~/.ssh/vsphere_workstation ubuntu@$(terraform output ip_address)

    或者,如果您只想使用其地址:

    ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]
    

验证管理员工作站是否已正确设置

验证是否已安装 gkectldocker

gkectl version
docker version

为您的管理员工作站配置代理

如果您的环境在代理后面,请按照以下部分配置 Google Cloud CLI 和 Docker 以使用您的代理。

配置 Google Cloud CLI 以使用您的代理

在管理员工作站虚拟机上完成以下步骤。

如果您使用代理从笔记本电脑或工作站连接到互联网,则需要为代理配置 Google Cloud CLI,以便运行 gcloudgsutil 命令。如需查看相关说明,请参阅配置 gcloud CLI 以在代理/防火墙后使用

配置 Docker 注册表以通过代理拉取

在管理员工作站虚拟机上完成以下步骤。

如果您想使用 Docker 注册表并且您的网络运行在代理之后,则需要配置在管理员工作站上运行的 Docker 守护程序以通过代理提取映像

  1. 收集 HTTP 和 HTTPS 代理的地址。

  2. 收集您需要联系但无需代理的每个主机的 IP 地址和主机名,包括:

    • vCenter 服务器的 IP 地址。
    • 所有 ESXi 主机的 IP 地址。
    • 您打算在负载平衡器上配置的 IP 地址。
    • 范围 192.168.0.0/16。

    在管理员工作站中,将以下地址添加到 no_proxy 变量中:

    printf -v no_proxy '%s,' [ADDRESSES];
    

    (可选)您可以将范围导出到一个环境变量以供稍后参考。请记住,应用和进程可能会使用此变量:

    export no_proxy="${no_proxy%,}";
  3. 打开 Docker 的配置文件,该文件存储在 /root/.docker/config.json/home/[USER]/.docker/config.json 或其他位置,具体取决于您的设置。

  4. config.json 中,添加以下行:

    "proxies": {
    
    "default": {
           "httpProxy": "[HTTP_PROXY]",
           "httpsProxy": "[HTTPS_PROXY]",
           "noProxy": "[ADDRESSES]"
               }
    }

    其中:

    • [HTTP_PROXY] 是您的 HTTP 代理(如果有)。
    • [HTTPS_PROXY] 是您的 HTTPS 代理(如果有)。
    • [ADDRESSES] 是用英文逗号分隔的列表,其中包含您需要在不使用代理的情况下访问的地址和主机名。
  5. 重启 Docker 以使更改生效:

    sudo systemctl restart docker

问题排查

如需了解详情,请参阅问题排查

Terraform vSphere 提供商会话数限制

GKE On-Prem 使用 Terraform 的 vSphere 提供商在您的 vSphere 环境中启动虚拟机。提供商的会话数上限为 1000。当前实现不会在使用后关闭活动会话。如果您运行的会话过多,则可能会遇到 503 错误。

会话会在 300 秒后自动关闭。

表现

如果您运行的会话过多,则可能会遇到以下错误:

Error connecting to CIS REST endpoint: Login failed: body:
  {"type":"com.vmware.vapi.std.errors.service_unavailable","value":
  {"messages":[{"args":["1000","1000"],"default_message":"Sessions count is
  limited to 1000. Existing sessions are 1000.",
  "id":"com.vmware.vapi.endpoint.failedToLoginMaxSessionCountReached"}]}},
  status: 503 Service Unavailable
潜在原因

您的环境中运行的 Terraform 提供商会话过多。

解决方法

目前,此功能按预期运行。会话会在 300 秒后自动关闭。如需了解详情,请参阅 GitHub 问题 #618

为 Docker 使用代理:oauth2: cannot fetch token

表现

使用代理时,您遇到以下错误:

oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: proxyconnect tcp: tls: oversized record received with length 20527
潜在原因

您提供的可能是 HTTPS 代理,而不是 HTTP。

解决方法

在 Docker 配置中,将代理地址更改为 http:// 而不是 https://

验证许可是否有效

请务必验证您的许可是否有效,特别是在使用试用许可的情况下。如果您的 F5、ESXi 主机或 vCenter 许可已过期,您可能会遇到意外故障。

openssl 无法验证管理员工作站 OVA

表现

对管理员工作站 OVA 文件运行 openssl dgst 不会返回 Verified OK

潜在原因

OVA 文件存在问题,导致无法成功验证。

解决方法

按照下载管理员工作站 OVA 中的说明,尝试重新下载并部署管理员工作站 OVA。如果问题仍然存在,请与 Google 联系以获取帮助。

后续步骤