本文是开始使用 Azure Stack Hub 上的 Azure Kubernetes 服务(AKS)服务的指南。 本文介绍了一组主要方案,帮助你熟悉 Azure Stack Hub 上的 AKS。 Azure Stack Hub 中提供的功能是公共 Azure 中可用的功能的 子集 。
在以下部分中,你将:
- 完成在 Azure Stack Hub 上使用 AKS 的先决条件。 
- 使用 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 计算机的示例输出:
               
              
            
Azure CLI 应为 2.28.0 或更高版本。
连接到 Azure Stack Hub
- 连接到 Azure Stack Hub 终结点。 需要使用 Azure CLI 建立要连接到的特定 Azure Stack Hub 环境。 可以在 “连接到 Azure Stack Hub”中找到相关说明。 
- 注册环境,以便 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"
- 设置活动环境。 - az cloud set -n aks-preview-test
- 更新环境配置。 - az cloud update --profile 2020-09-01-hybrid
- 连接到环境。 - 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 
- 使用以下命令将 Azure CLI 会话中的订阅设置为默认值: - az account set --subscription <subscription-id>
- 注册 Azure Kubernetes 服务资源提供程序。 列出订阅中可用的资源提供程序。 - az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table- 输出应如下所示:   
- 记下 Microsoft.ContainerService 资源提供程序,然后注册提供程序: - az provider register --namespace Microsoft.ContainerService
- 重新运行步骤 7 以验证资源提供程序注册状态。 注册可能需要几分钟才能完成。 
完成这些先决条件步骤后,可以测试以下方案。
创建 AKS 群集
可以在 使用 Azure CLI 部署 Azure Kubernetes 服务群集中找到全局 Azure 说明。 此处的说明反映了在 Azure Stack Hub 上使用 AKS 的限制。 可以使用 Azure CLI 为 Linux 或 Windows 容器创建 AKS 群集。
- 创建资源组: - az group create --name myResourceGroup --location <Azure Stack Hub location>
- 确保你已准备好服务主体 ID,并且对订阅具有参与者权限,以在订阅中创建群集。 
- 创建三个代理节点的 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 key files '/home/azureuser/.ssh/id_rsa'下生成- '/home/azureuser/.ssh/id_rsa.pub'和- \~/.ssh,以允许通过 SSH 访问 VM。 将这些密钥存储在安全的位置,以防需要通过 SSH 连接到 VM,就像排查问题时的情况一样。
连接到群集
- 若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 若要在本地安装 kubectl ,请使用 - az aks install-cli命令(可能需要在开始时使用“sudo”才能安装它):- az aks install-cli
- 若要配置 kubectl 以连接到 Kubernetes 群集,请使用 - az aks get-credentials命令。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。- az aks get-credentials --resource-group myResourceGroup --name myakscluster --admin
- 若要验证与群集的连接,请使用 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 地址必须在整个网络空间中是唯一的,并且必须进行计划。
以下文章将指导你完成规划自定义虚拟网络部署的过程。 你可以找到适合你的需求的各种网络配置,并对其进行测试。 对于初始测试,以下两个步骤显示了基本过程:
- 按照 本文 中的说明使用 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
- 请注意,在 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
- 按照“连接到群集”部分中的说明连接到 Kubernetes 群集并部署应用程序。 
一致性检查
Azure 与 Azure Stack Hub 之间的一致性检查
- 从上面测试的命令、“命令参考”部分或你自己的日常脚本中选择命令的组合。 
- 将它们应用到 Azure,稍后将其应用到 Azure Stack Hub。 请注意任何未预期的差异,并提供 反馈。 
