设置 Azure 环境
在本单元中,你将使用 Azure CLI 创建后续单元中所需的 Azure 资源。 在开始输入命令之前,请确保 Linux 上的 Docker Desktop 或 Docker 引擎已安装并运行。
本模块中的示例使用 Bash 语法,包括 export 和反斜杠行延续。 使用本地 Bash 会话完成这些练习。 在Windows,使用启用了 Docker Desktop 集成的 WSL 2 Linux 分发版;在该分发版中安装和使用 Linux Azure CLI 和 Git。 在 macOS 或 Linux 上,使用具有 Docker 守护程序访问权限的本地 Bash 会话。
Azure Cloud Shell可以运行Azure管理命令,但它不支持运行 Docker 守护程序,并且不能替代此模块的本地映像生成和容器运行步骤。 原生 PowerShell 和命令提示符需要不同的变量和续行语法。
在你用于练习的 Bash 会话中,在创建 Azure 资源之前检查工具:
git --version
az version
docker version
确认所有三个命令都成功,并且 docker version 显示可访问的 Server 以及客户端。 如果服务器不可用,请先修复 Docker Desktop、Docker 引擎或 WSL 集成,然后再继续。
若要节省时间,可以指示 Azure 先预配资源,然后再转到下一个单元。 创建 Azure Kubernetes 服务(AKS)群集最多可能需要 10 分钟。 此过程可以在后台运行,您可以同时继续学习后续单元。
使用 Azure 资源管理器进行身份验证
使用以下命令登录:
az login
选择 Azure 订阅
Azure 订阅是用于在 Azure 中预配资源的逻辑容器。 使用以下命令列出 Azure 订阅,然后找到计划在此模块中使用的订阅 ID - SubscriptionId 值。
az account list --output table
使用以下命令来确保使用 Azure 订阅,以便为本模块创建资源,并将首选 SubscriptionId 值替换为占位符:
az account set --subscription "<your-subscription-ID>"
定义局部变量
若要简化稍后使用的命令,请设置以下环境变量。 请务必将以下占位符替换为你自己的值:
- 用您选择的区域替换
<your-Azure-region>- 例如eastus。 - 将
<your-container-registry>替换为一个唯一的值。 此值用于在创建 Azure 容器注册表时为 Azure 容器注册表生成唯一的完全限定域名(FQDN)。 - 将
<your-unique-DNS-prefix-to-access-your-AKS-cluster>替换为一个唯一的值。 此值用于在创建 AKS 群集时为 AKS 群集生成唯一的 FQDN。
注释
Azure容器注册表名称必须在Azure全局唯一,并且仅包含 5-50 个字母数字字符(字母和数字)。 不允许连字符和下划线。 在设置<your-container-registry>之前,将AZ_CONTAINER_REGISTRY替换为合规且可用的名称。 有关详细信息,请参阅 容器注册表命名要求。
export AZ_RESOURCE_GROUP=java-containerization-demo-rg
export AZ_CONTAINER_REGISTRY=<your-container-registry>
export AZ_KUBERNETES_CLUSTER=java-containerization-demo-aks
export AZ_LOCATION=<your-Azure-region>
export AZ_KUBERNETES_CLUSTER_DNS_PREFIX=<your-unique-DNS-prefix-to-access-your-AKS-cluster>
创建 Azure 资源组
Azure 资源组是 Azure 订阅中的 Azure 容器,用于保存 Azure 解决方案的相关资源。 使用以下命令创建资源组:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
| jq
注释
此模块使用 jq 默认情况下安装在 Azure Cloud Shell 上的工具来显示 JSON 数据,并使该工具更具可读性。
如果不想使用 jq 工具,则可以安全地删除此模块中所有命令的 | jq 部分。
创建 Azure 容器注册表
使用 Azure 容器注册表可以生成、存储和管理容器映像,包括此 Java 应用的容器映像。 使用以下命令创建容器注册表:
az acr create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_CONTAINER_REGISTRY \
--sku Basic \
--role-assignment-mode rbac \
| jq
--role-assignment-mode rbac 选项明确选择仅限基于角色的访问控制 (RBAC) 权限。 这保留了本练习中使用的 --attach-acr 和 AcrPull 集成。
对于使用 RBAC 注册表和 ABAC 存储库权限(支持基于属性的访问控制)的任何新注册表或复用的注册表,--attach-acr 都不受支持。
启用 ABAC 的集成工作流则要求 kubelet 标识具有 Container Registry Repository Reader,并要求发布标识具有相应的存储库权限。 遵循该工作流,而不是原样运行此练习的集成命令。 Microsoft建议使用启用 ABAC 的模式;此练习中仅限 RBAC 的设置并不意味着建议将现有已启用 ABAC 的容器注册表降级。
使用以下命令将 Azure CLI 配置为使用此新创建的 Azure 容器注册表:
az configure --defaults acr=$AZ_CONTAINER_REGISTRY
使用以下命令对新创建的 Azure 容器注册表进行身份验证:
注释
在运行 az acr login 命令之前,请确保 Linux 上的 Docker Desktop 或 Docker 引擎正在运行,并且可从你的 Bash 会话访问其守护程序。 如果无法连接到该目标,则会收到类似于 的错误消息
az acr login --name $AZ_CONTAINER_REGISTRY
创建 Azure Kubernetes 服务群集
需要 AKS 群集才能部署 Java 应用容器映像。
Important
该 --attach-acr 选项将 AcrPull 角色分配给 AKS kubelet 标识。 除了创建资源的权限外,帐户还需要在注册表范围或其上级范围具有 Microsoft.Authorization/roleAssignments/write。 仅有贡献者身份并不授予此权限。 如有必要,请让 Azure 管理员执行集成,或授予适当范围的角色分配访问权限(例如基于角色的访问控制管理员)以及所需的资源管理权限。
使用以下命令创建 AKS 群集:
az aks create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_KUBERNETES_CLUSTER \
--attach-acr $AZ_CONTAINER_REGISTRY \
--dns-name-prefix=$AZ_KUBERNETES_CLUSTER_DNS_PREFIX \
--generate-ssh-keys \
| jq
注释
创建 AKS 群集最多可能需要 10 分钟。 运行上一个命令后,可以在 Azure CLI 选项卡中让它继续运行,然后转到下一个单元。