在 GKE on Azure 上部署应用
本页面介绍了如何创建集群和节点池,然后使用 GKE on Azure 部署示例应用。
Terraform 支持
如果您熟悉 Terraform,则可以使用 GitHub 上提供的 Terraform 脚本自动满足前提条件并创建集群。
准备工作
在创建集群之前,请务必满足前提条件。具体而言,您必须提供以下资源:
- 集群将在其中运行的 Azure 虚拟网络。
- Kubernetes 控制层面副本的子网。
- Azure 角色分配,用于向 GKE on Azure 授予使用服务主账号访问 Azure 环境的权限。
- GKE on Azure 用于向 Azure 服务进行身份验证并管理 Azure 账号中的资源的 AzureClient 资源。
- 用于访问集群中 Azure 虚拟机的 SSH 密钥对。
您负责创建和管理这些资源,这些资源可在所有集群之间共享。集群的所有其他底层 Azure 资源都由 GKE on Azure 管理。
配置 gcloud CLI 的默认设置
使用 gcloud CLI 为默认项目和 Google Cloud 区域配置默认设置。
您的项目有一个项目 ID 作为唯一标识符。创建项目时,您可以使用自动生成的项目 ID,也可以创建自己的项目 ID。
Google Cloud 地区是用于管理集群的位置。例如 us-west1
。如需了解详情,请参阅管理区域。
配置这些默认设置后,您无需在运行 Google Cloud CLI 时添加它们。您还可以通过将 --project
和 --location
标志传递给 Google Cloud CLI 来指定设置或替换默认设置。
配置完默认项目和位置后,在创建 GKE on Azure 资源时,这些资源会在该项目和位置自动创建。
如需设置默认值,请按以下步骤操作:
设置默认项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID
替换为您的项目 ID。设置默认管理位置:
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
替换为要在其中预配集群资源的资源组,该资源组在创建 Azure 资源组前提条件步骤中设置。
选择虚拟网络 ID
运行以下命令,将集群的 VNet ID 保存到环境变量:
VNET_ID=$(az network vnet show --query id --output tsv \
--resource-group=VNET_RESOURCE_GROUP_NAME \
--name=VNET_NAME)
替换以下内容:
- 将
VNET_RESOURCE_GROUP_NAME
替换为包含虚拟网络的资源组的名称,该名称在创建 Azure 虚拟网络前提条件步骤中设置。 - 将
VNET_NAME
替换为您的虚拟网络名称,该名称在创建 Azure 虚拟网络前提条件步骤中设置。
选择子网 ID
运行以下命令,将集群的子网 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
替换为包含您的虚拟网络的现有资源组名称。这是您在创建 Azure 虚拟网络中设置的资源组名称。 - 将
VNET_NAME
替换为您的虚拟网络的名称。这是您在创建 Azure 虚拟网络中设置的虚拟网络的名称。 - 将
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。
创建集群
可使用以下命令在 GKE on Azure 下创建集群。
gcloud container azure clusters create azure-cluster-0 \
--cluster-version 1.29.3-gke.600 \
--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 名称。POD_CIDR_BLOCK
:集群的 Pod 地址范围SERVICE_CIDR_BLOCK
:您的集群的 Service 地址范围- 将
SSH_PUBLIC_KEY
替换为 SSH 公钥的文本,该公钥在创建 SSH 密钥对前提条件步骤中设置。如果您在该步骤中将公钥保存到环境变量中,则可以使用${SSH_PUBLIC_KEY}
。
如需了解详情和可选参数,请参阅 gcloud 容器 azure 集群创建参考页面。
创建节点池
使用 Google Cloud CLI 创建节点池:
gcloud container azure node-pools create pool-0 \
--cluster azure-cluster-0 \
--node-version 1.29.3-gke.600 \
--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 公钥的文本,该公钥在创建 SSH 密钥对前提条件步骤中创建。如果您已将公钥保存到环境变量,则可以使用 ${SSH_PUBLIC_KEY}
。
查看集群状态
创建集群和节点池后,您可以使用 Google Cloud CLI 或 Google Cloud 控制台来查看集群的状态。如需查看集群的状态,请选择您使用的是 Google Cloud CLI 还是 Google Cloud 控制台,然后按照以下步骤操作:
gcloud
使用 gcloud container azure clusters describe
命令获取有关集群的详细信息:
gcloud container azure clusters describe CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
:管理集群的 Google Cloud 位置的名称
Google Cloud 控制台
在 Google Cloud 控制台中,进入 Google Kubernetes Engine 集群概览页面。
您的集群按其名称和位置列出。
点击集群的名称。此时会显示一个面板,其中包含集群的相关信息,包括其状态和已启用的功能。
获取用于集群的身份验证凭据
创建集群后,您需要获取身份验证凭据才能与该集群交互:
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 负载均衡器价格计费。
检查和查看应用
使用
kubectl get pods
检查正在运行的 Pod:kubectl get pods
您应该会看到一个
hello-server
Pod 正在您的集群上运行。使用
kubectl get service
检查hello-server
Service:kubectl get service hello-server
从此命令的输出结果的
EXTERNAL-IP
列中,复制 Service 的外部 IP 地址。在您的网络浏览器中使用外部 IP 地址及公开的端口查看应用:
http://EXTERNAL-IP
您刚刚将一个容器化 Web 应用部署到 GKE on Azure。
清理
删除应用的 Service 和 Deployment:
kubectl delete service hello-server kubectl delete deployment hello-server
运行
gcloud container azure node-pools delete
以删除您的节点池:gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
运行
gcloud container azure clusters delete
以删除您的集群:gcloud container azure clusters delete azure-cluster-0