Mulai Cepat: Menyebarkan Azure Linux Container Host untuk kluster AKS menggunakan Terraform
Mulai menggunakan Azure Linux Container Host menggunakan Terraform untuk menyebarkan kluster Azure Linux Container Host. Setelah menginstal prasyarat, Anda menerapkan kode Terraform, menginisialisasi Terraform, dan membuat dan menerapkan rencana eksekusi Terraform.
Terraform memungkinkan definisi, pratinjau, dan penyebaran infrastruktur cloud. Dengan Terraform, Anda membuat file konfigurasi menggunakan sintaks HCL. Sintaks HCL memungkinkan Anda menentukan penyedia cloud dan elemen yang membentuk infrastruktur cloud Anda. Setelah membuat file konfigurasi, Anda membuat rencana eksekusi yang memungkinkan Anda untuk melihat pratinjau perubahan infrastruktur Anda sebelum disebarkan. Setelah memverifikasi perubahan, Anda menerapkan rencana eksekusi untuk menyebarkan infrastruktur.
Catatan
Kode contoh dalam artikel ini terletak di repositori GitHub Terraform Microsoft.
Prasyarat
-
Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
Jika Anda belum mengonfigurasi Terraform, Anda dapat melakukannya menggunakan salah satu opsi berikut:
Jika Anda tidak memiliki perwakilan layanan Azure, buat perwakilan layanan. Catat
appId
,display_name
,password
, dantenant
.Anda memerlukan alat
kubectl
baris perintah Kubernetes . Jika Anda tidak memilikinya, unduh kubectl.
Membuat pasangan kunci SSH
Untuk mengakses node AKS, Anda terhubung menggunakan pasangan kunci SSH (publik dan privat), yang Anda hasilkan menggunakan perintah ssh-keygen
. Secara default, file ini dibuat dalam direktori ~/.ssh. ssh-keygen
Menjalankan perintah menimpa pasangan kunci SSH apa pun dengan nama yang sama yang sudah ada di lokasi yang diberikan.
Buka https://shell.azure.com untuk membuka Cloud Shell di browser Anda.
Jalankan perintah
ssh-keygen
. Contoh berikut membuat pasangan kunci SSH menggunakan enkripsi RSA dan panjang bit 4096:ssh-keygen -t rsa -b 4096
Untuk mengetahui informasi selengkapnya tentang membuat kunci SSH, lihat Membuat dan mengelola kunci SSH untuk autentikasi di Azure.
Menerapkan kode Terraform
Buat direktori untuk menguji dan menjalankan kode sampel Terraform dan menjadikannya direktori saat ini.
Buat file bernama
providers.tf
dan masukkan kode berikut:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Buat file bernama
main.tf
dan masukkan kode berikut:# Generate random resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_id" "log_analytics_workspace_name_suffix" { byte_length = 8 } resource "azurerm_log_analytics_workspace" "test" { location = var.log_analytics_workspace_location # The WorkSpace name has to be unique across the whole of azure; # not just the current subscription/tenant. name = "${var.log_analytics_workspace_name}-${random_id.log_analytics_workspace_name_suffix.dec}" resource_group_name = azurerm_resource_group.rg.name sku = var.log_analytics_workspace_sku } resource "azurerm_log_analytics_solution" "test" { location = azurerm_log_analytics_workspace.test.location resource_group_name = azurerm_resource_group.rg.name solution_name = "ContainerInsights" workspace_name = azurerm_log_analytics_workspace.test.name workspace_resource_id = azurerm_log_analytics_workspace.test.id plan { product = "OMSGallery/ContainerInsights" publisher = "Microsoft" } } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = var.cluster_name resource_group_name = azurerm_resource_group.rg.name dns_prefix = var.dns_prefix tags = { Environment = "Development" } default_node_pool { name = "azurelinuxpool" vm_size = "Standard_D2_v2" node_count = var.agent_count os_sku = "AzureLinux" } linux_profile { admin_username = "azurelinux" ssh_key { key_data = file(var.ssh_public_key) } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } service_principal { client_id = var.aks_service_principal_app_id client_secret = var.aks_service_principal_client_secret } }
Demikian pula, Anda dapat menentukan Azure Linux
os_sku
di azurerm_kubernetes_cluster_node_pool.Buat file bernama
variables.tf
dan masukkan kode berikut:variable "agent_count" { default = 3 } # The following two variable declarations are placeholder references. # Set the values for these variable in terraform.tfvars variable "aks_service_principal_app_id" { default = "" } variable "aks_service_principal_client_secret" { default = "" } variable "cluster_name" { default = "k8stest" } variable "dns_prefix" { default = "k8stest" } # Refer to https://azure.microsoft.com/global-infrastructure/services/?products=monitor for available Log Analytics regions. variable "log_analytics_workspace_location" { default = "eastus" } variable "log_analytics_workspace_name" { default = "testLogAnalyticsWorkspaceName" } # Refer to https://azure.microsoft.com/pricing/details/monitor/ for Log Analytics pricing variable "log_analytics_workspace_sku" { default = "PerGB2018" } variable "resource_group_location" { default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "ssh_public_key" { default = "~/.ssh/id_rsa.pub" }
Buat file bernama
outputs.tf
dan masukkan kode berikut:output "client_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_certificate sensitive = true } output "client_key" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_key sensitive = true } output "cluster_ca_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].cluster_ca_certificate sensitive = true } output "cluster_password" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].password sensitive = true } output "cluster_username" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].username sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].host sensitive = true } output "kube_config" { value = azurerm_kubernetes_cluster.k8s.kube_config_raw sensitive = true } output "resource_group_name" { value = azurerm_resource_group.rg.name }
Buat file bernama
terraform.tfvars
dan masukkan kode berikut:aks_service_principal_app_id = "<service_principal_app_id>" aks_service_principal_client_secret = "<service_principal_password>"
Menginisialisasi Terraform dan membuat rencana eksekusi
Inisialisasi Terraform dan unduh modul Azure yang diperlukan untuk mengelola sumber daya Azure Anda menggunakan
terraform init
perintah .terraform init
Buat rencana eksekusi Terraform menggunakan
terraform plan
perintah .terraform plan -out main.tfplan
Perintah
terraform plan
membuat rencana eksekusi, tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual.Parameter
-out
opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-out
memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.Untuk membaca selengkapnya tentang rencana dan keamanan eksekusi yang bertahan, lihat peringatan keamanan.
Terapkan rencana eksekusi Terraform menggunakan
terraform apply
perintah .terraform apply main.tfplan
Perintah
terraform apply
di atas mengasumsikan Anda sebelumnya menjalankanterraform plan -out main.tfplan
. Jika Anda menentukan nama file yang berbeda untuk-out
parameter , gunakan nama file yang sama dalam panggilan keterraform apply
. Jika Anda tidak menggunakan parameter-out
, panggilterraform apply
tanpa parameter apa pun.
Memverifikasi hasil
Dapatkan nama grup sumber daya menggunakan perintah berikut
echo
.echo "$(terraform output resource_group_name)"
Jelajahi portal Microsoft Azure.
Di bawah Layanan Azure, pilih Grup sumber daya dan temukan grup sumber daya baru Anda untuk melihat sumber daya berikut yang dibuat dalam demo ini:
- Solusi: Secara default, demo menamai solusi ini ContainerInsights. Portal menunjukkan nama ruang kerja solusi dalam tanda kurung.
- Layanan Kubernetes: Secara default, demo menamai layanan ini k8stest. (Kluster Kubernetes terkelola juga dikenal sebagai AKS/Azure Kubernetes Service.)
- Ruang Kerja Analitik Log: Secara default, demo menamai ruang kerja ini dengan awalan TestLogAnalyticsWorkspaceName- diikuti dengan angka acak.
Dapatkan konfigurasi Kubernetes dari status Terraform dan simpan dalam file yang dapat dibaca kubectl menggunakan perintah berikut
echo
.echo "$(terraform output kube_config)" > ./azurek8s
Verifikasi bahwa perintah sebelumnya tidak menambahkan karakter EOT ASCII menggunakan perintah berikut
cat
.cat ./azurek8s
Jika Anda melihat
<< EOT
di awal danEOT
di akhir, hapus karakter ini dari file. Jika tidak, Anda dapat menerima pesan kesalahan berikut:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
.Atur variabel lingkungan sehingga kubectl mengambil konfigurasi yang benar menggunakan perintah berikut
export
.export KUBECONFIG=./azurek8s
Verifikasi kesehatan kluster menggunakan
kubectl get nodes
perintah .kubectl get nodes
Ketika kluster Azure Linux Container Host dibuat, pemantauan diaktifkan untuk menangkap metrik kesehatan untuk node kluster dan pod. Metrik kesehatan tersebut tersedia di portal Azure. Untuk informasi lebih lanjut tentang pemantauan kesehatan kontainer, lihat Memantau kesehatan Azure Kubernetes Service.
Beberapa nilai kunci adalah output saat Anda menerapkan rencana eksekusi Terraform. Misalnya, alamat host, nama pengguna kluster Azure Linux Container Host, dan kata sandi kluster Azure Linux Container Host adalah output.
Untuk melihat semua nilai output, jalankan
terraform output
. Untuk melihat nilai output tertentu, jalankanecho "$(terraform output <output_value_name>)"
.
Membersihkan sumber daya
Menghapus sumber daya AKS
Saat Anda tidak lagi memerlukan sumber daya yang dibuat dengan Terraform, Anda dapat menghapusnya menggunakan langkah-langkah berikut.
Jalankan
terraform plan
perintah dan tentukandestroy
bendera .terraform plan -destroy -out main.destroy.tfplan
Hapus rencana eksekusi menggunakan
terraform apply
perintah .terraform apply main.destroy.tfplan
Menghapus perwakilan layanan
Perhatian
Hapus perwakilan layanan yang Anda gunakan dalam demo ini hanya jika Anda tidak menggunakannya untuk hal lain.
Mendapatkan ID objek dari perwakilan layanan menggunakan
az ad sp list
perintahaz ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
Hapus perwakilan layanan menggunakan
az ad sp delete
perintah .az ad sp delete --id <service_principal_object_id>
Memecahkan masalah Terraform pada Azure
Memecahkan masalah umum saat menggunakan Terraform di Azure.
Langkah berikutnya
Dalam mulai cepat ini, Anda menyebarkan kluster Azure Linux Container Host. Untuk mempelajari selengkapnya tentang Azure Linux Container Host dan menelusuri contoh penyebaran dan manajemen kluster lengkap, lanjutkan ke tutorial Azure Linux Container Host.