Bagikan melalui


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

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.

  1. Buka https://shell.azure.com untuk membuka Cloud Shell di browser Anda.

  2. 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

  1. Buat direktori untuk menguji dan menjalankan kode sampel Terraform dan menjadikannya direktori saat ini.

  2. 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 {}
        }
    
  3. 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.

  4. 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"
        }
    
  5. 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
        }
    
  6. 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

  1. Inisialisasi Terraform dan unduh modul Azure yang diperlukan untuk mengelola sumber daya Azure Anda menggunakan terraform init perintah .

    terraform init
    
  2. 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.

  3. Terapkan rencana eksekusi Terraform menggunakan terraform apply perintah .

    terraform apply main.tfplan
    

    Perintah terraform apply di atas mengasumsikan Anda sebelumnya menjalankan terraform plan -out main.tfplan. Jika Anda menentukan nama file yang berbeda untuk -out parameter , gunakan nama file yang sama dalam panggilan ke terraform apply. Jika Anda tidak menggunakan parameter -out, panggil terraform apply tanpa parameter apa pun.

Memverifikasi hasil

  1. Dapatkan nama grup sumber daya menggunakan perintah berikut echo .

    echo "$(terraform output resource_group_name)"
    
  2. Jelajahi portal Microsoft Azure.

  3. 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.
  4. Dapatkan konfigurasi Kubernetes dari status Terraform dan simpan dalam file yang dapat dibaca kubectl menggunakan perintah berikut echo .

    echo "$(terraform output kube_config)" > ./azurek8s
    
  5. Verifikasi bahwa perintah sebelumnya tidak menambahkan karakter EOT ASCII menggunakan perintah berikut cat .

    cat ./azurek8s
    

    Jika Anda melihat << EOT di awal dan EOT 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.

  6. Atur variabel lingkungan sehingga kubectl mengambil konfigurasi yang benar menggunakan perintah berikut export .

    export KUBECONFIG=./azurek8s
    
  7. 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, jalankan echo "$(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.

  1. Jalankan terraform plan perintah dan tentukan destroy bendera .

    terraform plan -destroy -out main.destroy.tfplan
    
  2. 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.

  1. Mendapatkan ID objek dari perwakilan layanan menggunakan az ad sp list perintah

    az ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
    
  2. 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.