使用 Terraform 创建 Kubernetes 群集(预览版)

本文介绍如何使用 Terraform 和 Azure 验证模块在 Azure 本地中创建 Kubernetes 群集。 工作流如下所示:

  • 创建 SSH 密钥对。
  • 使用 Terraform 在 Azure Local 23H2 中创建 Kubernetes 群集。 默认情况下,群集已连接 Azure Arc。
  • 验证部署并连接到群集。

重要

这些预览功能在自助服务上可用,可选择加入。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 Azure Kubernetes 服务,由 Azure Arc 预览版启用,部分由客户支持人员尽最大努力涵盖。

开始之前

在开始之前,请确保具备以下先决条件:

  1. 从本地基础结构管理员处获取以下详细信息:
    • Azure 订阅 ID:使用 Azure Local 进行部署和注册的 Azure 订阅 ID。
    • 自定义位置名称或 ID:自定义位置的 Azure 资源管理器 ID。 自定义位置是在 Azure 本地群集部署期间配置的。 基础结构管理员应提供自定义位置资源管理器 ID。 创建 Kubernetes 群集需要此参数。 如果基础结构管理员提供自定义位置名称和资源组名称,还可以使用 az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv 获取资源管理器 ID。
    • 逻辑网络名称或 ID:执行以下步骤创建的 Azure Stack HCI 逻辑网络的 Azure 资源管理器 ID。 管理员应提供逻辑网络的 ID。 若要创建 Kubernetes 群集,需要此参数。 如果知道在其中创建了逻辑网络的资源组,还可以使用 az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv Azure 资源管理器 ID。
  2. 确保已在开发计算机上安装 GitHub、 最新版本的 Azure CLITerraform 客户端
  3. 在开发计算机上下载并安装 kubectl

创建 SSH 密钥对

若要创建 SSH 密钥对(与 Azure AKS 相同),请使用以下过程:

  1. 在浏览器中打开 Cloud Shell 会话

  2. 从门户或命令使用 ssh-keygen

    az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
    

    ssh-keygen -t rsa -b 4096 
    
  3. 从 Azure 或 /.ssh/id_rsa.pub 下的本地计算机检索公钥的值。

登录 Azure

Terraform 仅支持通过 Azure CLI 向 Azure 进行身份验证。 不支持使用 Azure PowerShell 进行身份验证。 因此,尽管可以在执行 Terraform 工作时使用 Azure PowerShell 模块,但必须先 向 Azure 进行身份验证。

实现 Terraform 代码

  1. 创建用于测试示例 Terraform 代码的目录,并将其设为当前目录。

  2. 在同一目录中,创建名为 providers.tf 的文件并粘贴以下代码:

    terraform { 
     required_version = "~> 1.5" 
     required_providers { 
       azapi = { 
         source  = "azure/azapi" 
         version = "~> 1.13" 
       } 
       azurerm = { 
        source  = "hashicorp/azurerm" 
        version = "~> 3.74" 
       } 
      }
     }
    
     provider "azurerm" { 
     features { 
      resource_group { 
       prevent_deletion_if_contains_resources = false 
      } 
     } 
    }
    
  3. 创建另一个名为 main.tf 的文件,该文件指向最新的 AKS Arc AVM 模块,并插入以下代码。 可以读取模块的说明和输入,并根据需要添加可选参数:

    module "aks_arc" { 
    # Make sure to use the latest AVM module version
    source = "Azure/avm-res-hybridcontainerservice-provisionedclusterinstance/azurerm" 
    version = "0.5.0" 
    
    # Make sure to provide all required parameters  
    resource_group_id = "<Resource_Group>" 
    location = "<Region>" 
    name = "<Cluster_Name>" 
    logical_network_id = "<LNet_ID>" 
    custom_location_id = "<CustomLocation_ID>" 
    agent_pool_profiles = [{count=1}] 
    
    # Optional parameters 
    ssh_public_key =  "Your_SSH_Key" 
    enable_workload_identity = true 
    enable_oidc_issuer = true 
    rbac_admin_group_object_ids = "" 
    }
    

初始化 Terraform

运行 terraform init,将 Terraform 部署进行初始化。 请确保使用 -upgrade 标志将必要的提供程序插件升级到最新版本:

terraform init -upgrade

创建 Terraform 执行计划并应用该计划

运行 terraform 计划 以创建执行计划,然后运行 terraform 以将 输出文件应用到云基础结构:

terraform plan -out main.tfplan 
terraform apply main.tfplan 

该命令执行,然后在成功预配资源后返回成功。

验证部署并连接到群集

现在,可以通过从开发计算机运行 az connectedk8s proxy 来连接到 Kubernetes 群集。 还可以使用 kubectl 查看节点和 Pod 状态。 按照连接到 Kubernetes 群集中所述的步骤操作。

后续步骤

连接到 Kubernetes 群集