使用 Azure CLI 创建 Kubernetes 群集

适用于:Azure Stack HCI 版本 23H2

本文介绍如何使用 Azure CLI 在 Azure Stack HCI 中创建 Kubernetes 群集。 工作流如下:

  1. 使用 Azure CLI 在 Azure Stack HCI 23H2 中创建 Kubernetes 群集。 群集默认为 Azure Arc 连接。
  2. 创建群集时,请提供一个Microsoft Entra组,其中包含具有 Kubernetes 群集管理员访问权限的Microsoft Entra用户的列表。
  3. 使用 kubectl 和Microsoft Entra ID访问群集。
  4. 在该群集中运行一个包含 Web 前端和 Redis 实例的示例多容器应用程序。

准备阶段

  • 在开始之前,请确保你已获得本地基础结构管理员提供的以下详细信息:
    • Azure 订阅 ID - Azure Stack HCI 用于部署和注册的 Azure 订阅 ID。
    • 自定义位置 ID - Azure 资源管理器自定义位置的 ID。 自定义位置是在 Azure Stack HCI 群集部署期间配置的。 基础结构管理员应提供自定义位置的资源管理器 ID。 若要创建 Kubernetes 群集,需要此参数。 如果基础结构管理员提供自定义位置名称和资源组名称,也可以使用 获取资源管理器 IDaz customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv
    • 网络 ID - 按照这些步骤创建的 Azure Stack HCI 逻辑网络的 Azure 资源管理器 ID。 管理员应提供逻辑网络的 ID。 若要创建 Kubernetes 群集,需要此参数。 如果知道在其中创建了逻辑网络的资源组,也可以使用 获取 Azure 资源管理器 IDaz stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv
  • 可以在本地开发计算机上运行本文中的步骤,在远程 Azure Stack HCI 部署上创建 Kubernetes 群集。 请确保开发计算机上安装了最新版本的 Az CLI 。 还可以选择使用 az upgrade升级 Az CLI 版本。
  • 若要从任意位置连接到 Kubernetes 群集,请创建Microsoft Entra组并向其添加成员。 Microsoft Entra组中的所有成员都具有群集管理员访问权限。 请确保将自己添加为Microsoft Entra组的成员。 如果不自行添加,则无法使用 kubectl 访问 Kubernetes 群集。 有关创建Microsoft Entra组和添加用户的详细信息,请参阅管理Microsoft Entra组和组成员身份
  • 在开发计算机上下载并安装 kubectl。 Kubernetes 命令行工具 kubectl 使你能够针对 Kubernetes 群集运行命令。 可以使用 kubectl 部署应用程序、检查和管理群集资源以及查看日志。

安装 Azure CLI 扩展

运行以下命令以安装必要的 Azure CLI 扩展:

az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade

创建 Kubernetes 群集

az aksarc create使用 命令在 AKS Arc 中创建 Kubernetes 群集。在运行此命令之前,请确保登录到 Azure。 如果有多个 Azure 订阅,请使用 az account set 命令选择相应的订阅 ID。

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

片刻之后,该命令将会完成,并返回有关群集的 JSON 格式信息。

连接到 Kubernetes 群集

现在,可以通过从开发计算机运行 az connectedk8s proxy 命令连接到 Kubernetes 群集。 在运行此命令之前,请确保登录到 Azure。 如果有多个 Azure 订阅,请使用 az account set 命令选择相应的订阅 ID。

此命令将 Kubernetes 群集的 kubeconfig 下载到开发计算机,并打开指向本地 Kubernetes 群集的代理连接通道。 只要命令运行,通道就处于打开状态。 请让此命令保持运行,直到你不再想要访问群集为止。 如果超时,请关闭 CLI 窗口,打开一个新的,然后再次运行命令。

必须对托管 Kubernetes 群集的资源组具有“参与者”权限,才能成功运行以下命令:

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

预期输出:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.

使此会话保持运行状态,并从其他终端/命令提示符连接到 Kubernetes 群集。 通过运行 kubectl get 命令,验证是否可以连接到 Kubernetes 群集。 此命令返回群集节点的列表:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

以下输出示例演示在前面的步骤中创建的节点。 确保节点状态为 Ready

NAME             STATUS ROLES                AGE VERSION
moc-l0ttdmaioew  Ready  control-plane,master 34m v1.24.11
moc-ls38tngowsl  Ready  <none>               32m v1.24.11

部署应用程序

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

可以使用清单创建运行 Azure Vote 应用程序所需的所有对象。 此清单包含两个 Kubernetes 部署

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

还会创建两个 Kubernetes 服务

  • Redis 实例的内部服务。
  • 用于通过 Internet 访问 Azure Vote 应用程序的外部服务。

创建名为 azure-vote.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.microsoft.com/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.microsoft.com/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

使用 kubectl apply 命令部署 应用程序,并指定 YAML 的名称:

kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config

以下示例输出显示已成功创建了部署和服务:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

测试应用程序

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

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

kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config

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

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

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

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

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

删除群集

az aksarc delete运行 命令以清理创建的群集:

az aksarc delete --resource-group $aksclustername --name $resource_group

后续步骤