在Terraform Cloud中创建AKS

首先

我很荣幸被邀请在Qiita的Azure圣诞日历2021第二天进行发布!

我們可以在8月份的《Software Design》雜誌上找到《DevOps工程師節約簡便時短食譜》,其中詳細解說了如何使用Terraform Cloud建立AWS環境的步驟。

我一直想尝试一下 Terraform Cloud,所以我决定在 Azure 上创建我喜欢的 AKS(Azure Kubernetes Service)而不是 AWS,并分享创建步骤。

创建一个GitHub代码库

首先,在GitHub上创建一个存储Terraform代码的代码仓库。

由于希望能够从Terraform Cloud访问,所以这次我使用了私有仓库来创建。

創建 Azure 側的服務主體

在使用Terraform Cloud操作Azure资源时,请先创建并使用服务主体。

az ad sp create-for-rbac -n '<SERVICE PRINCIPAL NAME>' --role Owner

执行以上操作后,将输出下方的 JSON 并储存备用。

{
  "appId": "<A NEW GUID>",
  "displayName": <SERVICE PRINCIPAL NAME>,
  "name": "<SERVICE PRINCIPAL NAME>",
  "password": "<SECRET STRING>",
  "tenant": "<TENANT ID>"
}

准备 Terraform Cloud

创建Terraform Cloud环境。您只需先注册并确定组织名称即可。

创建工作空间

选择Type中的版本控制工作流,并在Connect VCS中选择GitHub,然后创建与先前创建的存储库的连接。

請註冊 Azure 認證資料

在创建后的屏幕上,您将从”变量”选项卡中注册Azure的认证信息。

利用之前保存的字符串,将其作为Key和Value注册为环境变量。至少要将ARM_CLIENT_SECRET标记为敏感信息。

KeyValueARM_CLIENT_ID<appId>ARM_CLIENT_SECRET<password>ARM_TENANT_ID<tenant>ARM_SUBSCRIPTION_ID<Subscription ID>
image.png

创建backend.tf

在GitHub存储库的文件夹中,通过创建backend.tf文件来设置Terraform Cloud作为后端。

terraform {
  backend "remote" {
    organization = "<TERRAFORM CLOUD ORGANIZATION NAME>"

    workspaces {
      name = "<TERRAFORM CLOUD WORKSPACE NAME>"
    }
  }
}

创建资源组

为了确认操作,并且从Terraform Cloud中创建资源组,我们将尝试创建。

创建 provider.tf

为了指定Terraform的提供程序,请创建provider.tf文件。

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 2.0"
    }
    azuread = {
      source  = "hashicorp/azuread"
      version = ">= 2.0"
    }
  }
}

provider "azurerm" {
  features {}
}

创建 az-rg.tf

创建一个用于创建资源组的 tf 文件。

resource "azurerm_resource_group" "rg" {
  name     = "rg-terracloudtest"
  location = "japaneast"
}

如果能做到这一点,我会把它推送到GitHub上。

我来尝试部署

image.png
image.png

创建AKS

终于要开始创建AKS了。创建AKS时的文档可以参考下面的内容。

创建tf文件

虽然很简单,但生成的 tf 文件如下所示。

resource "azurerm_kubernetes_cluster" "example" {
  name                = "ndsou-terracloud-aks1"
  location            = "japaneast"
  resource_group_name = rg.name
  dns_prefix          = "ndsou-terracloud-aks1"

  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_D2_v2"
  }

  identity {
    type = "SystemAssigned"
  }
}

output "client_certificate" {
  value = azurerm_kubernetes_cluster.example.kube_config.0.client_certificate
}

output "kube_config" {
  value = azurerm_kubernetes_cluster.example.kube_config_raw

  sensitive = true
}

将代码推送到 GitHub 仓库。

部署!

image.png

当在Azure门户中进行确认时…

image.png

最後

我一直在尝试使用各种 ARM 模板、Bicep 等去实践 Azure 类似的 IaC,但是 Terraform 真的很棒。

Bicep写起来也很方便,并且最重要的是,在使用多云环境如AWS时,能够统一地进行利用,这是令人高兴的地方。Microsoft Docs中也有关于Terraform协作的文档,从生态系统来看,协作似乎也会继续保持下去。

如果只使用Azure,可以使用Bicep;如果还要使用其他云平台,可以考虑使用Terraform。这是目前的情况。

广告
将在 10 秒后关闭
bannerAds