Trerraform を使ってAKS 環境を構築するぞ 〜 AKS 単体〜
事前確認
さて、Azure 上で AKS を作成していきます。 今回は AKS を作成するだけでは面白くないので、Windows Pod も作成できるように Windows Node を追加します。
基本的な手順はいつものごとく以下と同じです。
https://docs.microsoft.com/ja-jp/azure/developer/terraform/
今回はここまで進めます。
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 を選択しましょう。
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_type
で Windows を指定、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 }
前の記事を参考に、後片付けも行いましょう。
まとめ
さて、これで AKS 単体を作成することができるようになりました。
次回は本題の AKS に対していくつかの Pod を自動的に作成できるような構成を作りたいと思います。
それではまた!