Terraform adalah alat Infrastructure as Code (IaC) open-source yang memungkinkan Anda mempratinjau, menyediakan, dan mengelola infrastruktur serta resource cloud secara aman dan efisien. Topik ini menjelaskan cara menggunakan Terraform untuk membuat kluster ACK Edge.
Kode contoh dalam topik ini mendukung penerapan satu klik. Anda dapat menjalankan kode tersebut di Terraform Explorer.
Prasyarat
-
Anda telah mengaktifkan ACK Edge.
-
Akun Alibaba Cloud Anda harus memiliki izin penuh atas semua resource. Jika kredensial identitas Akun Alibaba Cloud Anda bocor, Anda mungkin menghadapi risiko keamanan yang signifikan. Kami menyarankan Anda menggunakan Pengguna Resource Access Management (RAM) dan membuat AccessKey untuk pengguna RAM tersebut. Untuk informasi selengkapnya, lihat Buat pengguna RAM dan Buat AccessKey.
-
Lampirkan kebijakan hak istimewa minimal berikut ke pengguna RAM yang Anda gunakan untuk menjalankan perintah Terraform. Kebijakan ini memberikan izin kepada pengguna RAM untuk mengelola resource dalam contoh ini. Untuk informasi selengkapnya, lihat Kelola izin pengguna RAM.
Kebijakan ini memungkinkan pengguna RAM untuk membuat, melihat, dan menghapus VPC, vSwitch, dan kluster ACK.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "vpc:CreateVpc", "vpc:CreateVSwitch", "cs:CreateCluster", "vpc:DescribeVpcAttribute", "vpc:DescribeVSwitchAttributes", "vpc:DescribeRouteTableList", "vpc:DescribeNatGateways", "cs:DescribeTaskInfo", "cs:DescribeClusterDetail", "cs:GetClusterCerts", "cs:CheckControlPlaneLogEnable", "cs:CreateClusterNodePool", "cs:DescribeClusterNodePoolDetail", "cs:DescribeClusterNodePools", "cs:ScaleOutCluster", "cs:DescribeClusterNodes", "vpc:DeleteVpc", "vpc:DeleteVSwitch", "cs:DeleteCluster", "cs:DeleteClusterNodepool" ], "Resource": "*" } ] } -
Siapkan lingkungan Terraform. Anda dapat menggunakan salah satu metode berikut untuk menjalankan Terraform.
Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan online untuk menjalankan Terraform. Anda tidak perlu menginstal Terraform. Anda dapat login untuk menggunakan dan mencoba Terraform secara online. Metode ini cocok untuk skenario ketika Anda ingin mencoba dan men-debug Terraform dengan cepat dan nyaman tanpa biaya.
Cloud Shell: Alibaba Cloud Cloud Shell telah dilengkapi komponen Terraform yang pra-instal dan kredensial identitas yang dikonfigurasi. Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario ketika Anda ingin mengakses dan menggunakan Terraform dengan cepat dan nyaman dengan biaya rendah.
Instal dan konfigurasi Terraform di mesin lokal Anda: Metode ini cocok untuk skenario dengan konektivitas jaringan yang buruk atau ketika Anda memerlukan lingkungan pengembangan kustom.
PentingPastikan versi Terraform Anda adalah v0.12.28 atau lebih baru. Anda dapat menjalankan perintah terraform --version untuk memeriksa versi.
Sumber Daya
Beberapa resource yang dibuat dalam topik ini dikenai biaya berdasarkan metode bayar sesuai penggunaan (pay-as-you-go). Hapus resource tersebut saat tidak lagi diperlukan untuk menghindari tagihan tak terduga.
-
alicloud_zones: Menanyakan zona ketersediaan.
-
alicloud_instance_types: Menanyakan tipe instans ECS yang memenuhi kriteria tertentu.
-
alicloud_vpc: Membuat virtual private cloud (VPC).
-
alicloud_vswitch: Membuat vSwitch untuk menentukan subnet dalam VPC.
-
alicloud_cs_edge_kubernetes: Membuat kluster ACK Edge.
-
alicloud_cs_kubernetes_node_pool: Membuat kelompok node untuk kluster ACK yang dikelola.
Buat kluster ACK Edge
-
Buat direktori kerja dan file konfigurasi bernama
main.tfdi dalam direktori tersebut.File
main.tfmenentukan konfigurasi Terraform berikut:-
Membuat VPC dan vSwitch di dalam VPC tersebut.
-
Membuat kluster ACK Edge.
-
Membuat kelompok node yang berisi dua node.
provider "alicloud" { region = var.region_id } variable "region_id" { default = "cn-hangzhou" } variable "k8s_name_edge" { type = string description = "Nama yang digunakan untuk membuat kluster kubernetes edge." default = "edge-example" } variable "new_vpc_name" { type = string description = "Nama yang digunakan untuk membuat vpc." default = "tf-vpc-172-16" } variable "new_vsw_name" { type = string description = "Nama yang digunakan untuk membuat vSwitch." default = "tf-vswitch-172-16-0" } variable "nodepool_name" { type = string description = "Nama yang digunakan untuk membuat kelompok node." default = "edge-nodepool-1" } variable "k8s_login_password" { type = string default = "Test123456" } variable "k8s_version" { type = string description = "Versi Kubernetes" default = "1.28.9-aliyun.1" } variable "containerd_runtime_version" { type = string default = "1.6.34" } variable "cluster_spec" { type = string description = "Spesifikasi kluster dari kluster kubernetes, yang bisa dikosongkan. Nilai yang valid: ack.standard : Kluster dikelola Standar; ack.pro.small : Kluster dikelola Profesional." default = "ack.pro.small" } data "alicloud_zones" "default" { available_resource_creation = "VSwitch" available_disk_category = "cloud_efficiency" } data "alicloud_instance_types" "default" { availability_zone = data.alicloud_zones.default.zones.0.id cpu_core_count = 4 memory_size = 8 kubernetes_node_role = "Worker" } resource "alicloud_vpc" "vpc" { vpc_name = var.new_vpc_name cidr_block = "172.16.0.0/12" } resource "alicloud_vswitch" "vsw" { vswitch_name = var.new_vsw_name vpc_id = alicloud_vpc.vpc.id cidr_block = cidrsubnet(alicloud_vpc.vpc.cidr_block, 8, 8) zone_id = data.alicloud_zones.default.zones.0.id } resource "alicloud_cs_edge_kubernetes" "edge" { name = var.k8s_name_edge version = var.k8s_version cluster_spec = var.cluster_spec worker_vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id)) worker_instance_types = [data.alicloud_instance_types.default.instance_types.0.id] password = var.k8s_login_password new_nat_gateway = true pod_cidr = "10.10.0.0/16" service_cidr = "10.12.0.0/16" load_balancer_spec = "slb.s2.small" worker_number = 1 node_cidr_mask = 24 # Runtime kontainer. runtime = { name = "containerd" version = var.containerd_runtime_version } } # Kelompok node. resource "alicloud_cs_kubernetes_node_pool" "nodepool" { # ID kluster Kubernetes. cluster_id = alicloud_cs_edge_kubernetes.edge.id # Nama kelompok node. node_pool_name = var.nodepool_name # vSwitch untuk kluster Kubernetes baru. Tentukan ID satu atau beberapa vSwitch. vSwitch tersebut harus berada di zona yang ditentukan oleh availability_zone. vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id)) # Tipe instans ECS dan metode penagihan. instance_types = [data.alicloud_instance_types.default.instance_types.0.id] instance_charge_type = "PostPaid" # Opsional. Nama instans kustom. # node_name_mode = "customized,edge-shenzhen,ip,default" # Runtime kontainer. runtime_name = "containerd" runtime_version = var.containerd_runtime_version # Jumlah node yang diharapkan dalam kelompok node. desired_size = 2 # Kata sandi yang digunakan untuk login ke node kluster melalui SSH. password = var.k8s_login_password # Menentukan apakah akan menginstal CloudMonitor pada node Kubernetes. install_cloud_monitor = true # Kategori disk sistem untuk node. Nilai yang valid: cloud_ssd dan cloud_efficiency. Nilai default: cloud_efficiency. system_disk_category = "cloud_efficiency" system_disk_size = 100 # Jenis OS. image_type = "AliyunLinux" # Konfigurasi disk data untuk node. data_disks { # Kategori disk data. category = "cloud_efficiency" # Ukuran disk data. size = 120 } lifecycle { ignore_changes = [ labels ] } } -
-
Jalankan perintah berikut untuk menginisialisasi direktori kerja Terraform.
terraform initInisialisasi yang berhasil menghasilkan output berikut.
Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary. -
Jalankan perintah berikut untuk membuat rencana eksekusi dan meninjau perubahan.
terraform planOutput berikut menunjukkan bahwa rencana eksekusi berhasil dibuat.
Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ... Plan: 4 to add, 0 to change, 0 to destroy. ... -
Jalankan perintah berikut untuk menerapkan konfigurasi dan membuat kluster ACK Edge.
terraform applySaat diminta, ketik
yesdan tekan Enter. Tunggu hingga perintah selesai. Kluster berhasil dibuat ketika output berikut muncul.... Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes ... alicloud_cs_edge_kubernetes.edge: Creation complete after 8m26s [id=************] Apply complete! Resources: 4 added, 0 changed, 0 destroyed. -
Verifikasi hasilnya
Terraform show
Jalankan perintah berikut untuk melihat detail tentang resource yang dibuat oleh Terraform.
terraform showPerintah tersebut mengembalikan output yang mirip dengan berikut:
# alicloud_cs_edge_kubernetes.edge: resource "alicloud_cs_edge_kubernetes" "edge" { certificate_authority = {} cluster_spec = "ack.pro.small" connections = { "api_server_internet" = "https://121.43.224.65:6443" "api_server_intranet" = "https://172.16.143.180:6443" "master_public_ip" = "12xxx5" } deletion_protection = false force_update = false id = "c8cfixxx691" install_cloud_monitor = true load_balancer_spec = "slb.s2.small" name = "edge-example-edge" name_prefix = "Terraform-Creation" nat_gateway_id = "ngw-bp1xxxoy" new_nat_gateway = true node_cidr_mask = 24 password = (sensitive value) pod_cidr = "10.10.0.0/16" proxy_mode = "ipvs" resource_group_id = "rg-aekzxxxxxxxx" runtime = { "name" = "containerd" "version" = "1.6.28" } }Konsol ACK
Login ke Konsol ACK untuk melihat kluster yang telah dibuat. Di halaman detail kluster, klik tab Basic Information untuk melihat informasi dasar dan konfigurasi jaringannya. Informasi dasar mencakup detail seperti nama kluster (edge-example), wilayah (Tiongkok (Hangzhou)), status kluster (Running), jenis kluster (ACK Edge Pro), versi Kubernetes (1.28.9-aliyun.1), dan perlindungan penghapusan (Disabled). Konfigurasi jaringan mencakup plug-in jaringan (Flannel), modus proxy layanan (IPVS), titik akhir API server internal dan publik, serta Service CIDR (
10.12.0.0/16).
Bersihkan resource
Untuk melepas resource yang dibuat dalam topik ini, jalankan perintah terraform destroy. Untuk informasi selengkapnya tentang terraform destroy, lihat Perintah umum.
terraform destroy
Contoh lengkap
Kode contoh dalam topik ini mendukung penerapan satu klik. Anda dapat menjalankan kode tersebut di Terraform Explorer.