你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure 资源管理器 (ARM) 模板部署 Azure Linux 容器主机群集,从而开始使用 Azure Linux 容器主机。 安装必备组件后,将安装 aks-preview Azure CLI 扩展、注册 AzureLinuxOSGuardPreview 功能标志、创建 SSH 密钥对、查看模板、部署模板并对其进行验证,然后部署应用程序。
Azure 资源管理器模板是一个 JavaScript 对象表示法(JSON)文件,用于定义项目的基础结构和配置。 模板使用声明性语法。 你可以在不编写用于创建部署的编程命令序列的情况下,描述预期部署。
注意事项和限制
在开始之前,请查看以下 Azure Linux 与 OS Guard 的注意事项和限制(预览版):
- 使用 OS Guard 的 Azure Linux 需要 Kubernetes 版本 1.32.0 或更高版本。
- 所有带操作系统防护的 Azure Linux 均已启用联邦信息处理标准 (FIPS) 和受信任启动。
- 在 AKS 上的 Azure Linux,只有 Azure CLI 和 ARM 模板这两种部署方法受支持,并且 OS Guard 目前处于预览状态。 不支持 PowerShell 和 Terraform。
- 在预览版中,带操作系统防护的 Azure Linux 在 AKS 上不支持 Arm64 映像。
-
对于 AKS 上带操作系统防护的 Azure Linux,唯一支持的 OS 升级通道是
NodeImage和None。 由于 /usr 目录不可变,Unmanaged和SecurityPatch与带操作系统防护的 Azure Linux 不兼容。 - 不支持项目流式处理。
- 不支持 Pod 沙盒化。
- 不支持机密虚拟机(CVM)。
- 不支持第 1 代虚拟机(VM)。
先决条件
-
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 快速入门 - Bash。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 将扩展与 Azure CLI 配合使用。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
如果尚未安装 kubectl,请使用
az aks install-cli或按照上游说明通过 Azure CLI 安装它。若要使用资源管理器模板创建 AKS 群集,请提供 SSH 公钥。 如果需要此资源,请参阅以下部分;否则请跳到查看模板部分。
用于创建群集的标识具有合适的的最低权限。 有关 AKS 的访问和标识的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的访问和标识选项。
若要部署 Bicep 文件或 ARM 模板,需要对要部署的资源具有写入权限,并且需要对 Microsoft.Resources/deployments 资源类型的所有操作具有访问权限。 例如,若要部署虚拟机,需要 Microsoft.Compute/virtualMachines/write 和 Microsoft.Resources/deployments/* 权限。 有关角色和权限的列表,请参阅 Azure 内置角色。
安装 aks-preview Azure CLI 扩展
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
若要安装 aks-preview 扩展,请运行以下命令:
az extension add --name aks-preview
运行以下命令以更新到已发布的最新扩展版本:
az extension update --name aks-preview
注册 AzureLinuxOSGuardPreview 功能标志
使用 [az feature register][az-feature-register] 命令注册AzureLinuxOSGuardPreview特性标志,如以下示例所示:
az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"
几分钟后,状态将显示为“已注册”。 使用 [az feature show][az-feature-show] 命令验证注册状态:
az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"
当状态反映 已注册时,请使用 [az provider register][az-provider-register] 命令刷新 Microsoft.ContainerService 资源提供程序的注册:
az provider register --namespace "Microsoft.ContainerService"
创建 SSH 密钥对
若要访问 AKS 节点,请使用通过 ssh-keygen 命令生成的 SSH 密钥对(公钥和私钥)进行连接。 默认情况下,这些文件在 ~/.ssh 目录中创建。 运行 ssh-keygen 命令会覆盖给定位置中同名的任何 SSH 密钥对。
在浏览器中访问 https://shell.azure.com 以打开 Cloud Shell。
运行
ssh-keygen命令。 以下示例使用 RSA 加密和 4096 位长度创建 SSH 密钥对:ssh-keygen -t rsa -b 4096
有关创建 SSH 密钥的详细信息,请参阅在 Azure 中创建和管理用于身份验证的 SSH 密钥。
查看模板
以下部署使用 Azure 快速入门模板中的 ARM 模板。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"clusterName": {
"defaultValue": "osguardakscluster",
"type": "String",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "String",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "String",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"agentCount": {
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"type": "Int",
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"defaultValue": "Standard_DS2_v2",
"type": "String",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"osSKU": {
"defaultValue": "AzureLinuxOSGuard",
"allowedValues": [
"AzureLinuxOSGuard",
"AzureLinux3OSGuard"
],
"type": "String",
"metadata": {
"description": "The Linux SKU to use."
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2025-05-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"mode": "System",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "Linux",
"osSKU": "[parameters('osSKU')]",
"osDiskType": "Managed",
"enableFIPS": true,
"securityProfile": {
"enableSecureBoot": true,
"enableVTPM": true
},
}
]
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "String",
"value": "[reference(parameters('clusterName')).fqdn]"
}
}
}
若要将具有 OS Guard 的 Azure Linux 添加到现有 ARM 模板,需要添加:
"osSKU": "AzureLinuxOSGuard"-
"mode": "System"至agentPoolProfiles -
"osDiskType": "Managed"至agentPoolProfiles -
"enableFIPS": true至agentPoolProfiles -
"securityProfile": {enableSecureBoot: true enableVTPM: true}至agentPoolProfiles - 将 apiVersion 设置为 2025-05-01 或更高版本(
"apiVersion": "2025-05-01")。
部署模板
选择以下按钮登录到 Azure 并打开一个模板。
选择或输入以下值。
对于本快速入门,请保留“OS 磁盘大小(GB)”、“代理计数”、“代理 VM 大小”、“OS 类型”和“Kubernetes 版本”的默认值。 为以下模板参数提供自己的值:
- 订阅:选择 Azure 订阅。
- 资源组:选择“新建”。 输入资源组的唯一名称,例如 testAzureLinuxOSGuardResourceGroup,然后选择 “确定”。
- 位置:选择一个位置,例如“美国东部”。
- 群集名称:输入 AKS 群集的唯一名称,例如 testAzureLinuxOSGuardCluster。
- DNS 前缀:输入群集的唯一 DNS 前缀,例如 myAzureLinuxOSGuardCluster。
- Linux 管理员用户名:输入一个用户名用于通过 SSH 进行连接,例如 azureUser。
- SSH RSA 公钥:复制并粘贴 SSH 密钥对的 public 部分(默认为 ~/.ssh/id_rsa.pub 的内容)。
选择 审阅 + 创建。
使用 OS Guard 群集创建 Azure Linux 需要几分钟时间。 等待群集成功部署,然后转到下一步骤。
验证部署
连接至群集
若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。
使用
kubectl命令在本地安装az aks install-cli:az aks install-cli使用
kubectl命令将az aks get-credentials配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。az aks get-credentials --resource-group testAzureLinuxOSGuardResourceGroup --name testAzureLinuxCluster使用
kubectl get命令验证与群集之间的连接。 此命令将返回群集节点的列表。kubectl get nodes以下示例输出显示在前面的步骤中创建的三个节点。 确保节点状态为 Ready:
NAME STATUS ROLES AGE VERSION aks-agentpool-41324942-0 Ready agent 6m44s v1.12.6 aks-agentpool-41324942-1 Ready agent 6m46s v1.12.6 aks-agentpool-41324942-2 Ready agent 6m45s v1.12.6
部署应用程序
Kubernetes 清单文件定义群集的所需状态,例如,要运行哪些容器映像。
在本快速入门中,你将使用清单来创建运行 Azure Vote 应用程序所需的所有对象。 此清单包含两个 Kubernetes 部署:
- 示例 Azure Vote Python 应用程序。
- 一个 Redis 实例。
此外,还会创建两个 Kubernetes 服务:
- Redis 实例的内部服务。
- 用于通过 Internet 访问 Azure Vote 应用程序的外部服务。
创建名为
azure-vote.yaml的文件。- 如果使用 Azure Cloud Shell,则可以使用
code、vi或nano来创建此文件,就像在虚拟或物理系统中操作一样
- 如果使用 Azure Cloud Shell,则可以使用
复制以下 YAML 定义:
apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-back spec: replicas: 1 selector: matchLabels: app: azure-vote-back template: metadata: labels: app: azure-vote-back spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-back image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 env: - name: ALLOW_EMPTY_PASSWORD value: "yes" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: azure-vote-back spec: ports: - port: 6379 selector: app: azure-vote-back --- apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-front spec: replicas: 1 selector: matchLabels: app: azure-vote-front template: metadata: labels: app: azure-vote-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-front image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 env: - name: REDIS value: "azure-vote-back" --- apiVersion: v1 kind: Service metadata: name: azure-vote-front spec: type: LoadBalancer ports: - port: 80 selector: app: azure-vote-front有关 YAML 清单文件的明细,请参阅部署和 YAML 清单。
使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称:
kubectl apply -f azure-vote.yaml以下示例类似于显示已成功创建部署和服务的输出:
deployment "azure-vote-back" created service "azure-vote-back" created deployment "azure-vote-front" created service "azure-vote-front" created
测试应用程序
应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。
kubectl get service azure-vote-front --watch
服务的 azure-vote-front 输出最初显示为 pending。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
在 EXTERNAL-IP 地址从“待处理”更改为实际的公共 IP 地址后,请使用 来停止 监视进程CTRL-Ckubectl。 以下示例输出显示向服务分配了有效的公共 IP 地址:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
若要查看 Azure Vote 应用的实际效果,请打开 Web 浏览器并转到服务的外部 IP 地址。
删除群集
如果不打算继续学习以下教程,为避免产生 Azure 费用,请清理任何不必要的资源。 使用 az group delete 命令移除资源组和所有相关资源。
az group delete --name testAzureLinuxOSGuardCluster --yes --no-wait
后续步骤
在本快速入门中,你部署了包含 OS Guard 群集的 Azure Linux。 若要详细了解使用 OS Guard 的 Azure Linux,并演练完整的群集部署和管理示例,请继续学习 Azure Linux with OS Guard 教程。