快速入门:使用 Azure 资源管理器 (ARM) 模板为 Azure Kubernetes 服务 (AKS) 群集部署 Azure Linux 容器主机

使用 Azure 资源管理器 (ARM) 模板部署 Azure Linux 容器主机群集,从而开始使用 Azure Linux 容器主机。

在此快速入门中,您将学习如何:

  • 安装 Kubernetes CLI kubectl
  • 创建 SSH 密钥对。
  • 查看 ARM 模板。
  • 部署 ARM 模板并对其进行验证。

Azure 资源管理器模板是一个 JavaScript 对象表示法(JSON)文件,用于定义项目的基础结构和配置。 模板使用声明性语法。 你可以在不编写用于创建部署的编程命令序列的情况下,描述预期部署。

先决条件

  • 如果您没有 Azure 试用订阅,请在开始之前创建 试用订阅

  • 如果想要在本地运行 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 安装它,或按照 upstream 说明安装。

  • 若要使用 ARM 模板创建 AKS 群集,请提供 SSH 公钥。 如果需要此资源,请参阅以下部分;否则请跳到查看模板部分。

  • 用于创建群集的标识具有合适的的最低权限。 有关 AKS 的访问和标识的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的访问和标识选项

  • 若要部署 Bicep 文件或 ARM 模板,需要对要部署的资源具有写入权限,并且需要对 Microsoft.Resources/deployments 资源类型的所有操作具有访问权限。 例如,若要部署虚拟机(VM),需要Microsoft。Compute/virtualMachines/writeMicrosoft。resources/deployments/* 权限。 有关角色和权限的列表,请参阅 Azure 内置角色

创建 SSH 密钥对

若要访问 AKS 节点,请使用通过 ssh-keygen 命令生成的 SSH 密钥对(公钥和私钥)进行连接。 默认情况下,这些文件在 ~/.ssh 目录中创建。 运行 ssh-keygen 命令会覆盖给定位置中同名的任何 SSH 密钥对。

  1. 前往浏览器中打开 Bash。

  2. 运行 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": {
      "type": "string",
      "defaultValue": "azurelinuxakscluster",
      "metadata": {
        "description": "The name of the Managed Cluster resource."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "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."
      }
    },
    "osDiskSizeGB": {
      "type": "int",
      "defaultValue": 0,
      "minValue": 0,
      "maxValue": 1023,
      "metadata": {
        "description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
      }
    },
    "agentCount": {
      "type": "int",
      "defaultValue": 3,
      "minValue": 1,
      "maxValue": 50,
      "metadata": {
        "description": "The number of nodes for the cluster."
      }
    },
    "agentVMSize": {
      "type": "string",
      "defaultValue": "Standard_DS2_v2",
      "metadata": {
        "description": "The size of the Virtual Machine."
      }
    },
    "linuxAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "User name for the Linux Virtual Machines."
      }
    },
    "sshRSAPublicKey": {
      "type": "string",
      "metadata": {
        "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
      }
    },
    "osType": {
      "type": "string",
      "defaultValue": "Linux",
      "allowedValues": [
        "Linux"
      ],
      "metadata": {
        "description": "The type of operating system."
      }
    },
    "osSKU": {
      "type": "string",
      "defaultValue": "AzureLinux",
      "allowedValues": [
        "AzureLinux",
        "AzureLinux3",
        "Ubuntu",
        "Ubuntu2204",
        "Ubuntu2404"
      ],
      "metadata": {
        "description": "The Linux SKU to use."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2021-03-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "mode": "System",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "[parameters('osType')]",
            "osSKU": "[parameters('osSKU')]",
            "storageProfile": "ManagedDisks"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      },
      "identity": {
          "type": "SystemAssigned"
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(parameters('clusterName')).fqdn]"
    }
  }
}

若要将 Azure Linux 添加到现有 ARM 模板,需要将 "osSKU": "AzureLinux""mode": "System" 添加到 agentPoolProfiles,并将 apiVersion 设置为 2021-03-01 或更高版本("apiVersion": "2021-03-01")。

部署模板

  1. 选择以下按钮以登录到Azure并打开模板:

    按钮用于将资源管理器模板部署到 Azure。

  2. “自定义部署 ”页中配置模板参数。 对于本快速入门,请保留“OS 磁盘大小(GB)”、“代理计数”、“代理 VM 大小”、“OS 类型”和“Kubernetes 版本”的默认值。 为以下模板参数提供自己的值:

    • Subscription:选择Azure订阅。
    • 资源组:选择“新建”。 为资源组输入唯一名称(例如 testAzureLinuxResourceGroup),然后选择“确定”。
    • 位置:选择位置,如 中国北部 3
    • 群集名称:为 AKS 群集输入唯一名称,例如 testAzureLinuxCluster。
    • DNS 前缀:为群集输入唯一 DNS 前缀,例如 myAzureLinuxCluster
    • Linux 管理员用户名:输入一个用户名用于通过 SSH 进行连接,例如 azureUser。
    • SSH RSA 公钥:复制并粘贴 SSH 密钥对中的 公钥 部分(默认为 ~/.ssh/id_rsa.pub 的内容)。
  3. 选择 “审阅 + 创建”。

创建 Azure Linux 容器主机群集需要几分钟的时间。 等待群集成功部署,然后转到下一步骤。

连接至群集

若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl

  1. 在本地使用 kubectl 命令安装 az aks install-cli

    az aks install-cli
    
  2. 使用 kubectl 命令将 az aks get-credentials 配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。

    az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
    
  3. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    kubectl get nodes
    

    以下示例输出显示在前面的步骤中创建的三个节点。 确保节点状态为 Ready

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-agentpool-12345678-0   Ready    agent   6m44s   v1.12.6
    aks-agentpool-12345678-1   Ready    agent   6m46s   v1.12.6
    aks-agentpool-12345678-2   Ready    agent   6m45s   v1.12.6
    

删除群集

不再需要时可以清理不必要的资源,避免产生 Azure 费用。

使用 az group delete 命令删除Azure资源组和所有相关资源。

az group delete --name $RESOURCE_GROUP --yes --no-wait

在本快速入门中,你部署了 Azure Linux 容器主机群集。 若要详细了解 Azure Linux 容器主机,请参阅以下资源: