将 Azure Stack Hub 上的 Azure Kubernetes 服务与 CLI 配合使用

本文是开始使用 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 计算机,请参阅: Microsoft Linux 上的 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 CLI 部署 Azure Kubernetes 服务群集中找到全局 Azure 说明。 此处的说明反映了在 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 群集后随时缩放群集。 若要将群集从最初的三个节点扩展到 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

使用自定义虚拟网络创建 AKS 群集

创建要部署在用户提供的网络中的群集是一种常见方案。 规划网络配置需要一些准备。 此外,请注意,使用 AKS 时,默认网络插件是 Azure CNI,而不是 Kubenet,AKS 引擎的情况也是如此。

使用 Azure CNI 时,每个 Pod 都会从子网获取 IP 地址,并且可以直接访问(无需像 Kubenet 那样使用路由表)。 这些 IP 地址必须在整个网络空间中是唯一的,并且必须进行计划。

以下文章将指导你完成规划自定义虚拟网络部署的过程。 你可以找到适合你的需求的各种网络配置,并对其进行测试。 对于初始测试,以下两个步骤显示了基本过程:

  1. 按照 本文 中的说明使用 Azure CNI 规划部署。 例如,可以使用门户在名为“myTest-rg”的资源组中创建名为“myAKSVnet”的虚拟网络,其 IP 范围为 10.0.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,需要指定额外的参数,如以下示例所示。 虚拟网络子网 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。 请注意任何未预期的差异,并提供 反馈

后续步骤