快速入门:使用 PowerShell 部署 Azure Kubernetes 服务群集

Azure Kubernetes 服务 (AKS) 是可用于快速部署和管理群集的托管式 Kubernetes 服务。 在本快速入门中,请执行以下操作:

  • 使用 PowerShell 部署 AKS 群集。
  • 在该群集中运行一个包含 Web 前端和 Redis 实例的多容器应用程序。

若要详细了解如何创建 Windows Server 节点池,请参阅创建支持 Windows Server 容器的 AKS 群集

Voting app deployed in Azure Kubernetes Service

本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念

先决条件

如果没有 Azure 订阅,请在开始前创建一个试用版订阅帐户。

如果你在本地运行 PowerShell,请安装 Az PowerShell 模块,并使用 Connect-AzAccount -Environment AzureChinaCloud cmdlet 连接到 Azure 帐户。 有关安装 Az PowerShell 模块的详细信息,请参阅安装 Azure PowerShell

如果你有多个 Azure 订阅,请使用 Set-AzContext cmdlet 选择应在其中计收资源费用的相应订阅 ID。

Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000

创建资源组

Azure 资源组是用于部署和管理 Azure 资源的逻辑组。 创建资源组时,系统会提示你指定一个位置。 此位置是:

  • 资源组元数据的存储位置。
  • 在创建资源期间未指定另一个区域时,资源在 Azure 中的运行位置。

以下示例在 chinaeast2 区域创建名为 myResourceGroup 的资源组。

使用 New-AzResourceGroup cmdlet 创建资源组。

New-AzResourceGroup -Name myResourceGroup -Location chinaeast2

成功创建的资源组的输出:

ResourceGroupName : myResourceGroup
Location          : chinaeast2
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup

创建 AKS 群集

  1. 使用 ssh-keygen 命令行实用工具生成 SSH 密钥对。 有关详细信息,请参阅:

  2. 使用 New-AzAksCluster cmdlet 创建 AKS 群集。

    以下示例创建一个具有一个节点的名为 myAKSCluster 的群集。

    New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeCount 1
    

几分钟后,该命令将完成并返回有关群集的信息。

注意

创建 AKS 群集时,会自动创建另一个资源组来存储 AKS 资源。 有关详细信息,请参阅为什么使用 AKS 创建两个资源组?

连接到群集

若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl

  1. 使用 Install-AzAksKubectl cmdlet 在本地安装 kubectl

    Install-AzAksKubectl
    
  2. 使用 Import-AzAksCredential cmdlet 将 kubectl 配置为连接到你的 Kubernetes 群集。 以下 cmdlet 将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。

    Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
    
  3. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    kubectl get nodes
    

    输出显示在上一步骤中创建的单个节点。 确保节点状态为 Ready

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31718369-0   Ready    agent   6m44s   v1.15.10
    

运行应用程序

Kubernetes 清单文件定义群集的所需状态,例如,要运行哪些容器映像。

在本快速入门中,你将使用清单来创建运行 Azure Vote 应用程序所需的所有对象。 此清单包含两个 Kubernetes 部署

  • 示例 Azure Vote Python 应用程序。
  • 一个 Redis 实例。

此外,还会创建两个 Kubernetes 服务

  • Redis 实例的内部服务。
  • 用于通过 Internet 访问 Azure Vote 应用程序的外部服务。
  1. 创建名为 azure-vote.yaml 的文件。

    • 可以使用 vinano 来创建此文件,就像在虚拟或物理系统中操作一样
  2. 复制以下 YAML 定义:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-back
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-back
      template:
        metadata:
          labels:
            app: azure-vote-back
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-back
            image: mcr.azk8s.cn/oss/bitnami/redis:6.0.8
            env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 6379
              name: redis
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-back
    spec:
      ports:
      - port: 6379
      selector:
        app: azure-vote-back
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-front
      template:
        metadata:
          labels:
            app: azure-vote-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-front
            image: mcr.azk8s.cn/azuredocs/azure-vote-front:v1
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 80
            env:
            - name: REDIS
              value: "azure-vote-back"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-front
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-vote-front
    
  3. 使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称:

    kubectl apply -f azure-vote.yaml
    

    输出显示已成功创建的部署和服务:

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    

测试应用程序

应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。

使用带有 --watch 参数的 kubectl get service 命令来监视进度。

kubectl get service azure-vote-front --watch

azure-vote-front 服务的 EXTERNAL-IP 输出最初显示为 pending

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s

EXTERNAL-IP 地址从 pending 更改为实际公共 IP 地址后,请使用 CTRL-C 来停止 kubectl 监视进程。 以下示例输出显示向服务分配了有效的公共 IP 地址:

azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

若要查看 Azure Vote 应用的实际效果,请打开 Web 浏览器并转到服务的外部 IP 地址。

Voting app deployed in Azure Kubernetes Service

删除群集

为了避免产生 Azure 费用,请清理不需要的资源。 使用 Remove-AzResourceGroup cmdlet 删除资源组、容器服务及所有相关资源。

Remove-AzResourceGroup -Name myResourceGroup

注意

删除群集时,AKS 群集使用的 Azure Active Directory 服务主体不会被删除。 有关如何删除服务主体的步骤,请参阅 AKS 服务主体的注意事项和删除

如果你使用了托管标识,则该标识由平台托管,不需要删除。

获取代码

本快速入门使用现有的容器映像创建了 Kubernetes 部署。 GitHub 上提供了相关的应用程序代码、Dockerfile 和 Kubernetes 清单文件。

后续步骤

在本快速入门中,你部署了一个 Kubernetes 群集,然后在其中部署了多容器应用程序。

若要详细了解 AKS 并演练部署示例的完整代码,请继续阅读“Kubernetes 群集”教程。