快速入门

本页面介绍了如何创建集群和节点池,然后使用 Anthos clusters on Azure 部署示例应用。

Terraform 支持

如果您熟悉 Terraform,则可以使用 GitHub 上提供的 Terraform 脚本自动满足前提条件并创建集群。

准备工作

在创建集群之前,请务必满足前提条件。具体而言,您必须提供以下资源:

  • 集群将在其中运行的 Azure 虚拟网络。
  • Kubernetes 控制层面副本的子网。
  • Azure 角色分配,用于向 Anthos clusters on Azure 授予使用服务主帐号访问 Azure 环境的权限。
  • Azure clusters on Azure 用于向 Azure 服务进行身份验证并管理 Azure 帐号中的资源的 AzureClient 资源。
  • 用于访问集群中 Azure 虚拟机的 SSH 密钥对。

您负责创建和管理这些资源,这些资源可在所有集群之间共享。集群的所有其他底层 Azure 资源都由 Azure clusters on Azure 管理。

设定 gcloud CLI 的默认设置

使用 gcloud CLI 为默认项目和 Google Cloud 区域配置默认设置。

您的项目有一个项目 ID 作为唯一标识符。创建项目时,您可以使用自动生成的项目 ID,也可以创建自己的项目 ID。

Google Cloud 地区是用于管理集群的位置。例如 us-west1。如需了解详情,请参阅管理区域

配置这些默认设置后,您无需在运行 Google Cloud CLI 时添加它们。您还可以通过将 --project--location 标志传递给 Google Cloud CLI 来指定设置或替换默认设置。

配置完默认项目和位置后,在创建 Anthos clusters on Azure 资源时,这些资源会在该项目和位置自动创建。

如需设置默认值,请按以下步骤操作:

  1. 设置默认项目:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替换为您的项目 ID。

  2. 设置默认管理位置:

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    GOOGLE_CLOUD_LOCATION 替换为您的位置,例如 us-west1

为您的集群选择 Azure 资源 ID

选择资源组 ID

通过运行以下命令来确定 CLUSTER_RESOURCE_GROUP_ID 集群资源:

az group show --query id --output tsv \
    --resource-group=CLUSTER_RESOURCE_GROUP_NAME

替换以下内容:

  • CLUSTER_RESOURCE_GROUP_NAME 替换为要在其中预配集群资源的现有资源组名称。

保存此值。您之后会用到此内容。

选择虚拟网络 ID

通过运行以下命令确定集群的 VNET_ID

az network vnet show --query id --output tsv \
    --resource-group=VNET_RESOURCE_GROUP_NAME \
    --name=VNET_NAME

替换以下内容:

  • VNET_RESOURCE_GROUP_NAME 替换为包含您的虚拟网络的现有资源组名称。
  • VNET_NAME 替换为您的虚拟网络的名称。

保存此值。您之后会用到此内容。

选择子网 ID

通过运行以下命令确定集群的 SUBNET_ID

az network vnet subnet show --query id --output tsv \
    --resource-group VNET_RESOURCE_GROUP_NAME \
    --vnet-name VNET_NAME \
    --name SUBNET_NAME

替换以下内容:

  • VNET_RESOURCE_GROUP_NAME 替换为包含您的虚拟网络的现有资源组名称。
  • VNET_NAME 替换为您的虚拟网络的名称。
  • SUBNET_NAME 替换为您的子网名称,例如 default

保存此值。您之后会用到此内容。

为您的集群选择 CIDR 范围

Kubernetes 要求为集群提供两个 CIDR 范围。选择这些 CIDR 范围时,应确保它们与 VPC 子网使用的 CIDR 范围不重叠。它们的大小应足以满足集群的最大预期大小。

  • Pod 地址 CIDR 范围:创建新 Pod 时,系统会为其分配此范围内的 IP 地址。示例范围:192.168.208.0/20

  • 服务地址 CIDR 范围:创建新 Service 时,系统会为其分配此范围内的 IP 地址。示例范围:192.168.224.0/20。

创建集群

使用以下命令在 Anthos clusters on Azure 下创建集群。

gcloud container azure clusters create azure-cluster-0 \
    --cluster-version 1.21.6-gke.1500 \
    --azure-region AZURE_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --client CLIENT_NAME \
    --resource-group-id CLUSTER_RESOURCE_GROUP_ID \
    --vnet-id VNET_ID \
    --subnet-id SUBNET_ID \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

替换以下内容:

  • AZURE_REGION:与您的 Google Cloud 区域关联的受支持的 Azure 区域
  • FLEET_PROJECT_ID 替换为将在其中注册集群的舰队宿主项目 ID。
  • CLIENT_NAME:您的 AzureClient 名称。
  • CLUSTER_RESOURCE_GROUP_ID 替换为集群资源的 Azure 资源组 ID。
  • VNET_ID 替换为集群的 Azure 虚拟网络 ID。
  • SUBNET_ID 替换为集群的 Azure 子网 ID。
  • POD_CIDR_BLOCK:集群的 Pod 地址范围
  • SERVICE_CIDR_BLOCK:您的集群的 Service 地址范围
  • SSH_PUBLIC_KEY 替换为您的 SSH 公钥文本。 如果您已将公钥保存到环境变量,请使用 ${SSH_PUBLIC_KEY}

如需了解详情和可选参数,请参阅 gcloud 容器 azure 集群创建参考页面。

创建节点池

使用 Google Cloud CLI 创建节点池:

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.21.6-gke.1500 \
    --vm-size Standard_B2s \
    --max-pods-per-node 110 \
    --min-nodes 1 \
    --max-nodes 5 \
    --ssh-public-key SSH_PUBLIC_KEY \
    --subnet-id SUBNET_ID \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

替换以下内容:

  • SSH_PUBLIC_KEY 替换为您的 SSH 公钥文本。
  • SUBNET_ID 替换为您的 Azure 子网 ID。

获取用于集群的身份验证凭据

创建集群后,您需要获取身份验证凭据才能与该集群交互:

gcloud container azure clusters get-credentials azure-cluster-0

此命令将 kubectl 配置为访问您使用 Connect 网关创建的集群。您至少需要一个节点池才能使用 Connect 网关,因为它依赖于 Connect 代理,该代理在集群中作为 Deployment 运行。

将应用部署到集群

现在您已创建了一个集群,可以向其部署容器化应用了。在本快速入门中,您可以部署我们的 hello-app 示例 Web 应用。

您可以使用 Kubernetes 对象创建和管理集群的资源。您可以使用 Deployment 对象来部署网络服务器等无状态应用。 Service 对象则用于定义从互联网访问您的应用时需要遵循的规则和负载均衡器。

创建 Deployment

如需在集群中运行 hello-app,您需要运行以下命令来部署应用:

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

此 Kubernetes 命令 kubectl create deployment 会创建名为 hello-server 的 Deployment。此 Deployment 的 Pod 运行 hello-app 容器映像。

在此命令中:

  • --image 指定了要部署的容器映像。在本示例中,该命令会从 Artifact Registry 代码库 us-docker.pkg.dev/google-samples/containers/gke/hello-app 中拉取示例映像。 :1.0 指示要拉取的特定映像版本。如果您未指定版本,则会使用标记为 latest 的映像。

公开 Deployment

部署应用后,您需要将其公开到互联网,以便用户访问该应用。您可以通过创建 Service 来公开应用,这是一种 Kubernetes 资源,可以将您的应用公开给外部流量。

如需公开您的应用,请运行以下 kubectl expose 命令:

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

如果传入 --type LoadBalancer 标志,则系统会为您的容器创建 Azure 负载均衡器。--port 标志会初始化连接到互联网的公共端口 80,--target-port 标志会将流量路由到应用的端口 8080。

负载均衡器根据 Azure 负载均衡器价格计费。

检查和查看应用

  1. 使用 kubectl get pods 检查正在运行的 Pod:

    kubectl get pods
    

    您应该会看到一个 hello-server Pod 正在您的集群上运行。

  2. 使用 kubectl get service 检查 hello-server Service:

    kubectl get service hello-server
    

    从此命令的输出结果的 EXTERNAL-IP 列中,复制 Service 的外部 IP 地址。

  3. 在您的网络浏览器中使用外部 IP 地址及公开的端口查看应用:

    http://EXTERNAL-IP
    

您刚刚在 Anthos clusters on Azure 部署了一个容器化 Web 应用。

清理

  1. 删除应用的 Service 和 Deployment:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. 运行 gcloud container azure node-pools delete 以删除您的节点池:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. 运行 gcloud container azure clusters delete 以删除您的集群:

    gcloud container azure clusters delete azure-cluster-0
    

后续步骤