教程 - 创建 Azure Kubernetes 服务 (AKS) 群集
本文内容
Kubernetes 为容器化应用程序提供一个分布式平台。 使用 Azure Kubernetes 服务 (AKS),可以快速创建生产就绪的 Kubernetes 群集。
在本教程(教程系列的第 3 部分,共 7 部分)中,你将在 AKS 中部署一个 Kubernetes 群集。 学习如何:
部署一个可向 Azure 容器注册表 (ACR) 进行身份验证的 AKS 群集。
安装 Kubernetes CLI kubectl
。
配置 kubectl
以连接到 AKS 群集。
开始之前
在前面的教程中,你已创建一个容器映像并将其上传到 ACR 实例。 从教程 1 - 为 AKS 准备应用程序 开始学习。
如果你使用的是 Azure CLI,本教程要求运行 Azure CLI 2.0.53 或更高版本。 使用 az --version
检查版本。 若要安装或升级,请参阅安装 Azure CLI 。
如果使用的是 Azure PowerShell,本教程要求运行 Azure PowerShell 5.9.0 或更高版本。 使用 Get-InstalledModule -Name Az
检查版本。 若要进行安装或升级,请参阅安装 Azure PowerShell 。
如果你使用的是 Azure Developer CLI,本教程要求运行 Azure Developer CLI 版本 1.5.1 或更高版本。 使用 azd version
检查版本。 若要安装或升级,请参阅安装 Azure Developer CLI 。
创建 Kubernetes 群集
AKS 群集可以使用 Kubernetes 基于角色的访问控制 (Kubernetes RBAC) ,它允许你根据分配给用户的角色定义对资源的访问权限。 如果为用户分配了多个角色,则权限会合并。 可将权限范围限定为单个命名空间或整个群集。
若要详细了解 AKS 和 Kubernetes RBAC,请参阅在 AKS 中使用 Kubernetes RBAC 和 Microsoft Entra 标识控制对群集资源的访问 。
本教程需要 Azure CLI 2.0.53 或更高版本。 使用 az --version
检查版本。 若要安装或升级,请参阅安装 Azure CLI 。
本教程需要 Azure PowerShell 版本 5.9.0 或更高版本。 使用 Get-InstalledModule -Name Az
检查版本。 若要进行安装或升级,请参阅安装 Azure PowerShell 。
安装 Kubernetes CLI
可以使用 Kubernetes CLI kubectl
连接到 Kubernetes 群集。 如果使用的是 Azure Cloud Shell,则 kubectl
已安装。 如果在本地运行命令,则可以使用 Azure CLI 或 Azure PowerShell 安装 kubectl
。
codespace 中的azd
环境会自动下载./devcontainer/devcontainer.json
中找到的所有依赖项。 这包括 Kubernetes CLI 以及任何 Azure 容器注册表 (ACR) 映像。
创建 AKS 群集
AKS 群集可以使用 Kubernetes 基于角色的访问控制 (Kubernetes RBAC) ,它允许你根据分配给用户的角色定义对资源的访问权限。 为用户分配多个角色时,将合并权限。 可将权限范围限定为单个命名空间或整个群集。 有关详细信息,请参阅在 AKS 中使用 Kubernetes RBAC 和 Microsoft Entra ID 控制对群集资源的访问 。
有关 AKS 资源限制和区域可用性的信息,请参阅 AKS 中的配额、虚拟机大小限制和区域可用性 。
若要允许 AKS 群集与其他 Azure 资源交互,Azure 平台会自动创建群集标识。 在此示例中,为群集标识授予了从你在上一教程中创建的 ACR 实例拉取映像的权限 。 若要成功执行该命令,需要在 Azure 订阅中拥有“所有者 ”或“Azure 帐户管理员 ”角色。
使用 az aks create
命令创建 AKS 群集。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集。 此资源组是上一教程 中在 chinaeast2 区域中创建的。
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 2 \
--generate-ssh-keys \
--attach-acr <acrName>
注意
如果已生成 SSH 密钥,可能会遇到类似于 linuxProfile.ssh.publicKeys.keyData is invalid
的错误。 若要继续,请在不使用 --generate-ssh-keys
参数的情况下重试该命令。
为避免需要“所有者”或“Azure 帐户管理员”角色,还可以手动配置服务主体,以从 ACR 中提取映像 。 有关详细信息,请参阅使用服务主体进行 ACR 身份验证 或使用请求密码从 Kubernetes 进行身份验证 。 或者,可以使用托管标识 而不是服务主体,以便更轻松地进行管理。
若要允许 AKS 群集与其他 Azure 资源交互,Azure 平台会自动创建群集标识。 在此示例中,为群集标识授予了从你在上一教程中创建的 ACR 实例拉取映像的权限 。 若要成功执行该命令,需要在 Azure 订阅中拥有“所有者 ”或“Azure 帐户管理员 ”角色。
使用 New-AzAksCluster
cmdlet 创建 AKS 群集。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集。 此资源组是上一教程 中在 chinaeast2 区域中创建的。
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeCount 2 -GenerateSshKey -AcrNameToAttach <acrName>
注意
如果已生成 SSH 密钥,可能会遇到类似于 linuxProfile.ssh.publicKeys.keyData is invalid
的错误。 若要继续,请在不使用 -GenerateSshKey
参数的情况下重试该命令。
为避免需要“所有者”或“Azure 帐户管理员”角色,还可以手动配置服务主体,以从 ACR 中提取映像 。 有关详细信息,请参阅使用服务主体进行 ACR 身份验证 或使用请求密码从 Kubernetes 进行身份验证 。 或者,可以使用托管标识 而不是服务主体,以便更轻松地进行管理。
azd
使用azd up
命令将群集部署与应用程序本身打包。 此命令在下一教程中介绍。
使用 kubectl 连接到群集
使用 az aks get-credentials
命令将 kubectl
配置为连接到你的 Kubernetes 群集。 以下示例获取 myResourceGroup 中名为 myAKSCluster 的 AKS 群集的凭据。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用 kubectl get nodes
命令验证与群集的连接,该命令将返回群集节点的列表。
kubectl get nodes
以下示例输出显示群集节点的列表。
NAME STATUS ROLES AGE VERSION
aks-nodepool1-19366578-vmss000002 Ready agent 47h v1.25.6
aks-nodepool1-19366578-vmss000003 Ready agent 47h v1.25.6
使用 Import-AzAksCredential
cmdlet 将 kubectl
配置为连接到你的 Kubernetes 群集。 以下示例获取 myResourceGroup 中名为 myAKSCluster 的 AKS 群集的凭据。
Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
使用 kubectl get nodes
命令验证与群集的连接,该命令将返回群集节点的列表。
kubectl get nodes
以下示例输出显示群集节点的列表。
NAME STATUS ROLES AGE VERSION
aks-nodepool1-19366578-vmss000002 Ready agent 47h v1.25.6
aks-nodepool1-19366578-vmss000003 Ready agent 47h v1.25.6
使用azd auth login
命令配置对群集的身份验证。
azd auth login
按照身份验证方法的说明进行操作。
使用 kubectl get nodes
命令验证与群集之间的连接。
kubectl get nodes
以下示例输出显示群集节点的列表
NAME STATUS ROLES AGE VERSION
aks-nodepool1-19366578-vmss000002 Ready agent 47h v1.25.6
aks-nodepool1-19366578-vmss000003 Ready agent 47h v1.25.6
azd auth 解决方法
此解决方法要求安装Azure CLI 。
打开终端窗口,使用az login
命令通过 Azure CLI 登录,--scope
参数设置为https://microsoftgraph.chinacloudapi.cn/.default
。
az login --scope https://microsoftgraph.chinacloudapi.cn/.default
应重定向到新选项卡中的身份验证页以创建浏览器访问令牌,如以下示例所示:
https://login.partner.microsoftonline.cn/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
复制尝试使用azd auth login
登录后收到的网页的 localhost URL。
在新终端窗口中,使用以下curl
请求登录。 请确保将<localhost>
占位符替换为在上一步中复制的 localhost URL。
curl <localhost>
成功登录会输出 HTML 网页,如以下示例所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="refresh" content="60;url=https://learn.microsoft.com/cli/azure/">
<title>Login successfully</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
code {
font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
display: inline-block;
background-color: rgb(242, 242, 242);
padding: 12px 16px;
margin: 8px 0px;
}
</style>
</head>
<body>
<h3>You have logged into Azure!</h3>
<p>You can close this window, or we will redirect you to the <a href="https://learn.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p>
<h3>Announcements</h3>
<p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p>
<p>You may opt-in to use WAM by running the following commands:</p>
<code>
az config set core.allow_broker=true<br>
az account clear<br>
az login
</code>
</body>
</html>
关闭当前终端并打开原始终端。 应看到订阅的 JSON 列表。
复制要使用的订阅的id
字段。
使用 az account set
命令设置订阅。
az account set --subscription <subscription_id>
后续步骤
在本教程中,你已在 AKS 中部署了一个 Kubernetes 群集并配置了 kubectl
以连接到该群集。 你已了解如何执行以下操作:
部署一个可向 ACR 进行身份验证的 AKS 群集。
安装 Kubernetes CLI kubectl
。
配置 kubectl
以连接到 AKS 群集。
在下一个教程中,你将了解如何将应用程序部署到群集。