通过 CLI 使用 Azure Stack Hub 上的 Azure Kubernetes 服务

本指南可帮助你开始使用 Azure Stack Hub 上的 Azure Kubernetes 服务 (AKS)。 本文介绍了一组主要方案,帮你熟悉 Azure Stack Hub 上的 AKS。 Azure Stack Hub 中可用的功能是公共 Azure 中可用功能的子集

在以下部分中,你将:

  1. 完成使用 Azure Stack Hub 上的 AKS 的先决条件。
  2. 使用 Azure CLI 和 Azure Stack Hub 用户门户完成 AKS 群集的生命周期操作。

安装 Azure CLI

你需要为计算机安装支持 AKS 的 Azure CLI。 准备一台干净的 Linux 或 Windows 计算机,以安装支持 AKS 的 Azure CLI 预览版。 确保计算机未安装 Azure CLI,以免与你接下来将要安装的 Azure CLI 预览版发生冲突。 下面的大多数说明假定你使用的是 Linux VM,但你可以在产品文档中找到 Windows 中的等效步骤。

安装支持 AKS 的 Azure CLI 后,请勿升级 Azure CLI。 如果进行升级,它将被缺少 AKS 支持的生产就绪版本取代。

对于 Ubuntu 计算机,请按照在 Linux 上安装 Azure CLI 中的说明进行操作。

安装支持 AKS 的 Azure CLI 后,通过运行以下 Azure CLI 命令来验证安装是否正确:

    az --version

下面是 Linux 计算机的输出:

Linux 计算机的输出

Azure CLI 应为 2.28.0 或更高版本。

连接到 Azure Stack Hub

  1. 连接到 Azure Stack Hub 终结点。 你需要使用 Azure CLI 来建立要连接的特定 Azure Stack Hub 环境。 有关说明,请参阅连接到 Azure Stack Hub

  2. 注册环境,以便 Azure CLI 可以连接到实例的 Azure Stack Hub 资源管理器终结点。 更新以下代码片段中的 URL 并运行以下命令:

    az cloud register \
        -n aks-preview-test \
        --endpoint-resource-manager "https://management.redmond.xbx.nxn.microsoft.com" \
        --suffix-storage-endpoint "redmond.xbx.nxn.microsoft.com" \
        --suffix-keyvault-dns ".vault.redmond.xbx.nxn.microsoft.com"
    
  3. 设置活动的环境。

    az cloud set -n aks-preview-test
    
  4. 更新环境配置。

    az cloud update --profile 2020-09-01-hybrid
    
  5. 连接到环境。

    az login -u 'user@contoso.onmicrosoft.com' -p 'xxxxxxx' --tenant 'contoso.onmicrosoft.com'
    

    注意

    如果触发“证书验证失败”错误,可能是因为客户端计算机不信任用于 Azure 资源管理器终结点的证书。 如果是这样,你需要导出 Azure Stack Hub 终结点中使用的证书并信任它。 有关说明,请参阅导出 Azure Stack Hub CA 根证书

    特别是对于 Linux 计算机,请参阅:Linux 上的 Microsoft Entra ID

  6. 使用以下命令将 Azure CLI 会话中的订阅设置为默认值:

    az account set --subscription <subscription-id>
    
  7. 注册 Azure Kubernetes 服务资源提供程序。 列出订阅中可用的资源提供程序。

    az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table
    

    输出应如下所示:

    输出应如下所示

  8. 记下 Microsoft.ContainerService 资源提供程序,然后注册该提供程序:

    az provider register --namespace Microsoft.ContainerService
    
  9. 重新运行步骤 7 以验证资源提供程序的注册状态。 注册可能需要几分钟才能完成。

完成这些必备步骤后,可以继续测试以下方案。

创建 AKS 群集

有关全局 Azure 说明,请参阅使用 Azure CLI 部署 Azure Kubernetes 服务群集。 此处的说明反映了 Azure Stack Hub 上 AKS 的使用限制。 可以使用 Azure CLI 为 Linux 或 Windows 容器创建 AKS 群集。

  1. 创建资源组:

    az group create --name myResourceGroup --location <Azure Stack Hub location>
    
  2. 确保你已准备好服务主体 ID,并且对订阅具有参与者权限,以在订阅中创建群集。

    1. 若要使用 Microsoft Entra ID 创建服务主体 (SPN),请按照这些说明操作。
    2. 若要使用 Active Directory 联合身份验证服务 (AD FS) 创建 SPN,请遵循这些说明
    3. 若要将“参与者”角色分配给 SPN,请参阅说明。 确保选择“参与者”角色。
  3. 创建一个包含三个代理节点的 AKS 群集。 为以下参数提供值,示例如下。 运行:

    az aks create \
    --resource-group myResourceGroup \
    --name myakscluster \
    --dns-name-prefix myakscluster \
    --nodepool-name mynodepool \
    --admin-username azureuser \
    --service-principal xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --node-count 3 \
    --generate-ssh-keys \
    --load-balancer-sku basic \
    --vm-set-type VirtualMachineScaleSets \
    --location <Azure Stack Hub location> \
    --kubernetes-version 1.20.7
    

    此操作的输出将采用 json 格式并包含群集规范,其中包括生成的 ssh 公钥、群集中使用的完全限定域名 (FQDN) 以及其他属性。 请注意,该命令将输出下面这样突出显示私钥位置的文本:已在 \~/.ssh 下生成 SSH key files '/home/azureuser/.ssh/id_rsa''/home/azureuser/.ssh/id_rsa.pub',以允许 SSH 访问 VM。 将这些密钥存储在安全的位置,以防需要通过 ssh 连接到 VM,就像排查问题时一样。

  4. 现在可以继续重复测试扩展部署应用删除

连接到群集

  1. 若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 若要在本地安装 kubectl,请使用 az aks install-cli 命令(可能需要在开始阶段使用“sudo”才能获取安装权限):

    az aks install-cli
    
  2. 若要将 kubectl 配置为连接到 Kubernetes 群集,请使用 az aks get-credentials 命令。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。

    az aks get-credentials --resource-group myResourceGroup --name myakscluster --admin
    
  3. 若要验证与群集的连接,请使用 kubectl get 命令返回群集节点列表。

    kubectl get nodes
    

验证与群集的连接

缩放群集

另一个群集管理任务是扩展群集。 可以在使用 az aks scale 命令创建群集后随时对其进行扩展。 若要将群集从最初的 3 个节点扩展到 4 个节点,请运行:

    az aks scale --resource-group myResourceGroup --name myakscluster --node-count 4

成功扩展群集后,输出将包含类似于以下示例的“agentPoolProfiles”:

    "agentPoolProfiles": [
        {
        "availabilityZones": null,
        "count": 4,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "maxCount": null,
        "maxPods": 110,
        "minCount": null,
        "mode": "System",
        "name": "mynodepool",
        "nodeLabels": {},
        "nodeTaints": null,
        "orchestratorVersion": "1.20.7",
        "osDiskSizeGb": 100,
        "osType": "Linux",
        "provisioningState": "Succeeded",
        "scaleSetEvictionPolicy": null,
        "scaleSetPriority": null,
        "spotMaxPrice": null,
        "tags": null,
        "type": "VirtualMachineScaleSets",
        "vmSize": " Standard_DS2_v2",
        "vnetSubnetId": null
        }
    ]

删除群集

执行完前面的操作后,可以继续删除群集。 运行:

az aks delete --name myakscluster --resource-group myResourceGroup

使用自定义 VNET 创建 AKS 群集

创建要部署到用户提供的网络的群集是一种常见方案。 规划网络配置需要一些准备工作。 另请注意,使用 AKS 时,默认网络插件是 Azure CNI,而不是使用 AKS 引擎时的 Kubenet。 借助 Azure CNI,每个 Pod 从子网中获取一个 IP 地址,并且可以直接访问这些 Pod(不需要像使用 Kubenet 时一样使用路由表)。 这些 IP 地址在网络空间中必须唯一,并且必须仔细规划。 以下文章逐步讲解规划自定义 VNET 部署的过程。 你可以找到适合你需求的各种网络配置并对其进行测试。 对于初始测试,以下两个步骤将展示基本过程:

  1. 按照本文中的说明使用 Azure CNI 规划部署。 例如,可以使用门户在名为“myTest-rg”的资源组中创建一个名为“myAKSVnet”的 VNet,其 IP 范围为 10.0.0.0/8,子网为“myAKSSubnet”,子网 IP 范围为 10.240.0.0/16。 然后使用下一步创建群集。

    az network vnet create \
        --resource-group myTest-rg \
        --name myAKSVnet \
        --address-prefixes 10.0.0.0/8 \
        --subnet-name myAKSSubnet \
        --subnet-prefix 10.240.0.0/16    
    
  2. 请注意,在 Azure 上部署时,Azure 文章中提供的群集命令可以正常工作。若要部署到 Azure Stack Hub,则需指定额外的参数,如以下示例所示。 VNet 子网 ID 应类似于“/subscriptions/dfdfdff-5dfdf-dfdf-dfdf-dfdfdfdfdfd/resourceGroups/myTest-rg/providers/Microsoft.Network/virtualNetworks/myAKSVnet/subnets/myAKSSubnet”:

    az aks create  \ 
    --resource-group myTest-rg \
    --name aksvnet \
    --dns-name-prefix  aksvnet \
    --nodepool-name mynodepool \
    --admin-username azureuser \
    --service-principal xvxvxvxvx-ffff-ffff-xvxvxvx-8xbxbxbx8  \
    --client-secret dccbcbcbcbcbcbcbcbbcbcbcbcbcbcbc-LNX \
    --node-count 3 \
    --generate-ssh-keys \
    --load-balancer-sku basic \
    --vm-set-type VirtualMachineScaleSets \
    --network-plugin azure \
    --vnet-subnet-id '<subnet-resource-id>' \
    --skip-subnet-role-assignment \
    --docker-bridge-address 172.17.0.1/16 \
    --dns-service-ip 10.0.0.10 \
    --location redmond
    
  3. 按照“连接到群集”部分的说明连接到 Kubernetes 群集并部署应用程序。

一致性检查

Azure 和 Azure Stack Hub 之间的一致性检查

  1. 从上面测试的命令、下面的“命令参考”部分或你自己的日常脚本中选择命令组合。
  2. 将它们应用到 Azure,然后再应用到 Azure Stack Hub。 注意任何非预期的差异并提供反馈

后续步骤

了解 AKS on Azure Stack Hub