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。
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 kubectl
连接到 Kubernetes 群集。 如果使用的是 Azure Cloud Shell,则 kubectl
已安装。 如果在本地运行命令,则可以使用 Azure CLI 或 Azure PowerShell 安装 kubectl
。
codespace 中的azd
环境会自动下载./devcontainer/devcontainer.json
中找到的所有依赖项。 这包括 Kubernetes CLI 以及任何 Azure 容器注册表 (ACR) 映像。
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
命令将群集部署与应用程序本身打包。 此命令在下一教程中介绍。
使用 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
此解决方法要求安装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 群集。
在下一个教程中,你将了解如何将应用程序部署到群集。