在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标记为敏感信息。
创建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上。
我来尝试部署
创建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 仓库。
部署!
当在Azure门户中进行确认时…
最後
我一直在尝试使用各种 ARM 模板、Bicep 等去实践 Azure 类似的 IaC,但是 Terraform 真的很棒。
Bicep写起来也很方便,并且最重要的是,在使用多云环境如AWS时,能够统一地进行利用,这是令人高兴的地方。Microsoft Docs中也有关于Terraform协作的文档,从生态系统来看,协作似乎也会继续保持下去。
如果只使用Azure,可以使用Bicep;如果还要使用其他云平台,可以考虑使用Terraform。这是目前的情况。