Trerraform を使ってAKS 環境を構築するぞ 〜 AKS 単体〜

事前確認

さて、Azure 上で AKS を作成していきます。 今回は AKS を作成するだけでは面白くないので、Windows Pod も作成できるように Windows Node を追加します。

基本的な手順はいつものごとく以下と同じです。
https://docs.microsoft.com/ja-jp/azure/developer/terraform/

  1. Resouce Group を作成する
  2. AKS の作成
  3. 作成した AKSWindows Node を追加

今回はここまで進めます。

Terraform 構成ファイルの作成

それでは Terraform 構成ファイルを作成していきます。まずは 前回 作成したファイルをコピーし、基本的なベース部分を作成します。

# Azure provider source and version Setting
terraform {
    required_providers {
        azurerm = {
            source = "hashicorp/azurerm"
            version = "~>2.0"
        }
    }
}
# Azure provider
provider "azurerm" {
    features {}
}

# Create Resource Group
resource "azurerm_resource_group" "rg" {
    name = "aks-rg"
    location = "Japan East"
}

AKS Cluster

では、AKS はどうやって作るのでしょうか。
答えはこちらにあります。もうここにコードも貼ってある、、、ありがとう Terraform, https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster

Windows ノードを作成していきたいので、少し変更します。
AKS を作成する場合は azurerm_kubernetes_cluster の中に必要な情報を書き込んでいきます。

resource "azurerm_kubernetes_cluster" "k8s-blue" { }

通常作成する場合は、以下のみで大丈夫です。シンプルですね。

resource "azurerm_kubernetes_cluster" "k8s-blue" {
  name                = "k8s-blue"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "sample-aks"

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

  identity {
    type = "SystemAssigned"
  }

  tags = {
    Environment = "Production"
  }
}

Wndows ノードの場合は追加で必要な項目が 2 点あります。

  • Windows のユーザ名とパスワード
  • Network の種類

パスワードについては以下の要件を確認してから、適切な文字列を入れてましょう。
docs.microsoft.com

Network の種類は、Windows ノードを作成する場合、kubenet ではなく Azure CNI を利用することが必須です。他の環境でクラスターを作成する際、今後 Windows ノードの検討をされている場合は Azure CNI を選択しましょう。

docs.microsoft.com

2 つの項目を追加します。

  # Windows の場合は azure CNI ネットワークを使う
  network_profile {
    network_plugin = "azure"
  }

  windows_profile {
    admin_username = "azureuser"
    admin_password = "XXXXXXXXXX"
  }

Windows ノード

次に Windows ノードを追加する構成を追加します。 https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster_node_pool

ノードの構成は azurerm_kubernetes_cluster_node_pool で設定していきます。
os_typeWindows を指定、vm_size では VM サイズを指定します。

ポイントは、どこのクラスターに対して追加するかを指定している kubernetes_cluster_id です。 ここで id のところで記載している k8s-blue は、クラスターで設定している名前です。リソース名の隣で指定した名前を設定しているので、フルネームで入れる必要がありません。

resource "azurerm_kubernetes_cluster_node_pool" "blue-node" {
  name                  = "win01"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.k8s-blue.id
  os_type               = "Windows"
  vm_size               = "Standard_B2s"
  node_count            = 1

  tags = {
    Environment = "Blue"
  }
}

実施

それでは実行していきます。 初期化を行い、実行プランを作成します。

$ terraform init
$ terraform plan -out beta.tfplan

作成には少し時間がかかりますが、しばらく待ったのち作成されたことを確認します。
location は作成した地域を入れてください。

$ az group list --query "[?location=='japaneast']

できました!Azure Portal から確認します。作成したクラスターに Windows Node が追加されていることが確認できると思います。
こちらの画像は割愛します。

以下が Terraform の全体像です。

# Azure provider source and version Setting
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

# Azure provider
provider "azurerm" {
  features {}
}

# Create Resource Group
resource "azurerm_resource_group" "rg" {
  name     = "aks-rg"
  location = "Japan East"
}

# Create AKS
resource "azurerm_kubernetes_cluster" "k8s-blue" {
  name                = "k8s-blue"
  location            = "Japan East"
  resource_group_name = azurerm_resource_group.rg.name
  dns_prefix          = "sample-aks"

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

  # Windows の場合は azure CNI ネットワークを使う
  network_profile {
    network_plugin = "azure"
  }
  
  # パスワードポリシーに準じて入力
  windows_profile {
    admin_username = "azureuser"
    admin_password = "XXXXXXXXXX"
  }

  identity {
    type = "SystemAssigned"
  }
  tags = {
    Environment = "Blue"
  }
}

resource "azurerm_kubernetes_cluster_node_pool" "blue-node" {
  name                  = "win01"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.k8s-blue.id
  os_type               = "Windows"
  vm_size               = "Standard_B2s"
  node_count            = 1

  tags = {
    Environment = "Blue"
  }

}

output "client_certificate" {
  value = azurerm_kubernetes_cluster.k8s-blue.kube_config.0.client_certificate
}

output "kube_config" {
  value     = azurerm_kubernetes_cluster.k8s-blue.kube_config_raw
  sensitive = true
}

前の記事を参考に、後片付けも行いましょう。

mihohoi.hatenablog.jp

まとめ

さて、これで AKS 単体を作成することができるようになりました。
次回は本題の AKS に対していくつかの Pod を自動的に作成できるような構成を作りたいと思います。

それではまた!