Configure scaling_config em alicloud_cs_kubernetes_node_pool para dimensionar os nós do ACK sob demanda.
Execute estes exemplos no Terraform Explorer .
Os recursos criados aqui geram custos. Exclua-os com terraform destroy ao terminar.
Pré-requisitos
Certifique-se de que você possui:
-
O serviço Auto Scaling está ativado com a função padrão atribuída.
Se você usou o componente
alicloud_cs_kubernetes_autoscaleranteriormente, o serviço Auto Scaling já está ativado. -
A função AliyunOOSLifecycleHook4CSRole está criada para acesso ao CloudOps Orchestration Service (OOS):
-
Clique em AliyunOOSLifecycleHook4CSRole para abrir a página RAM Quick Authorization.
NotaPara contas Alibaba Cloud: clique diretamente no link.
Para usuários RAM: a sua conta Alibaba Cloud deve ter a função AliyunOOSLifecycleHook4CSRole. Anexe a política AliyunRAMReadOnlyAccess ao usuário RAM. Consulte Grant permissions to a RAM user.
Na página RAM Quick Authorization, clique em Authorize.
-
-
Um ambiente de execução do Terraform configurado com uma destas opções:
Opção
Ideal para
Testes rápidos sem instalação local
Terraform com credenciais pré-configuradas
Redes instáveis ou ambientes de desenvolvimento personalizados
Contexto
O Alibaba Cloud Provider 1.111.0 introduziu o recurso alicloud_cs_kubernetes_node_pool para gerenciar pools de nós com dimensionamento automático. Ele substitui o componente mais antigo alicloud_cs_kubernetes_autoscaler, que apresentava três limitações:
Configuração complexa com alta sobrecarga operacional.
Os nós dimensionados eram adicionados ao pool de nós padrão e não podiam ser gerenciados separadamente.
Não era possível modificar certos parâmetros após a criação.
O recurso alicloud_cs_kubernetes_node_pool resolve esses três problemas:
O dimensionamento automático requer apenas dois parâmetros:
min_sizeemax_size.Cada pool de nós tem gerenciamento independente e é visível no console do ACK.
Os parâmetros opcionais usam padrões seguros para evitar divergências de ambiente entre os nós.
Recursos do Terraform
|
Recurso |
Função |
|
Consulta os tipos de instância do Elastic Compute Service (ECS) que atendem às condições especificadas |
|
|
Cria uma VPC |
|
|
Cria vSwitches em uma VPC |
|
|
Cria um cluster gerenciado do ACK |
|
|
Cria um pool de nós para um cluster gerenciado do ACK |
|
Recurso |
Finalidade |
|
Consulta os tipos de instância disponíveis do Elastic Compute Service (ECS) |
|
|
Cria uma VPC |
|
|
Cria vSwitches (sub-redes) na VPC |
|
|
Cria um cluster gerenciado do ACK |
|
|
Cria um pool de nós com dimensionamento automático |
Gere parâmetros do Terraform a partir do console do ACK
Se estes exemplos não cobrirem sua configuração, gere os parâmetros exatos do Terraform a partir do console do ACK.
Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.
Clique no nome do cluster de destino. No painel de navegação à esquerda, escolha Nodes > Node Pools.
Clique em Create Node Pool, configure os parâmetros e clique em Confirm. Na caixa de diálogo, clique em Console-to-Code.
No painel Console-to-Code, clique na aba Terraform. O bloco de código mostra os parâmetros do seu pool de nós. Clique em
para usá-lo.
Crie um pool de nós com dimensionamento automático ativado
Escolha o procedimento adequado à sua situação.
Se você usou o alicloud_cs_kubernetes_autoscaler anteriormente
Migre para o alicloud_cs_kubernetes_node_pool:
Etapa 1: Modifique o ConfigMap autoscaler-meta
Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.
Clique no nome do cluster de destino. No painel de navegação à esquerda, escolha Configurations > ConfigMaps.
Na página ConfigMap, selecione kube-system na lista suspensa Namespace. Encontre autoscaler-meta e clique em Edit na coluna Actions.
No painel Edit, altere o valor de
taintsde"taints":""para"taints":[]na caixa de texto Value.Clique em OK.
Etapa 2: Sincronize o pool de nós
No painel de navegação à esquerda, escolha Nodes > Node Pools.
Na página Node Pools, clique em Sync Node Pool.
Se você não usou o alicloud_cs_kubernetes_autoscaler anteriormente
Os exemplos abaixo usam scaling_config para definir os limites de nós.
Adicione um pool de nós com dimensionamento automático a um cluster existente
Se você já tem um cluster ACK, adicione um pool de nós com esta configuração mínima:
provider "alicloud" {
}
# Add an auto-scaling node pool to an existing ACK cluster.
resource "alicloud_cs_kubernetes_node_pool" "at1" {
# The ID of the existing ACK cluster.
cluster_id = ""
name = "np-test"
# Specify at least one vSwitch for the node pool.
vswitch_ids = ["vsw-bp1mdigyhmilu2h4v****"]
instance_types = ["ecs.e3.medium"]
password = "Hello1234"
scaling_config {
min_size = 1 # Minimum node count
max_size = 5 # Maximum node count
}
}
Crie um cluster e um pool de nós com dimensionamento automático simultaneamente
Provisione uma VPC, um cluster ACK Pro e um pool de nós com dimensionamento automático em um único terraform apply:
provider "alicloud" {
region = var.region_id
}
variable "region_id" {
type = string
default = "cn-shenzhen"
}
variable "cluster_spec" {
type = string
description = "The cluster specifications of kubernetes cluster,which can be empty. Valid values:ack.standard : Standard managed clusters; ack.pro.small : Professional managed clusters."
default = "ack.pro.small"
}
# Specify the zones of vSwitches.
variable "availability_zone" {
description = "The availability zones of vswitches."
default = ["cn-shenzhen-c", "cn-shenzhen-e", "cn-shenzhen-f"]
}
# The CIDR blocks used to create vSwitches.
variable "node_vswitch_cidrs" {
type = list(string)
default = ["172.16.0.0/23", "172.16.2.0/23", "172.16.4.0/23"]
}
# This variable specifies the CIDR blocks in which Terway vSwitches are created.
variable "terway_vswitch_cidrs" {
type = list(string)
default = ["172.16.208.0/20", "172.16.224.0/20", "172.16.240.0/20"]
}
# Specify the ECS instance types of worker nodes.
variable "worker_instance_types" {
description = "The ecs instance types used to launch worker nodes."
default = ["ecs.g6.2xlarge", "ecs.g6.xlarge"]
}
# Specify a password for the worker node.
variable "password" {
description = "The password of ECS instance."
default = "Test123456"
}
# Specify the prefix of the name of the ACK managed cluster.
variable "k8s_name_prefix" {
description = "The name prefix used to create managed kubernetes cluster."
default = "tf-ack-shenzhen"
}
# Specify the components to install in the ACK managed cluster.
# Components: Terway (network), csi-plugin (volume), csi-provisioner (volume),
# logtail-ds (logging), nginx-ingress-controller (Ingress), arms-prometheus (monitoring),
# ack-node-problem-detector (node diagnostics).
variable "cluster_addons" {
type = list(object({
name = string
config = string
}))
default = [
{
"name" = "terway-eniip",
"config" = "",
},
{
"name" = "logtail-ds",
"config" = "{\"IngressDashboardEnabled\":\"true\"}",
},
{
"name" = "nginx-ingress-controller",
"config" = "{\"IngressSlbNetworkType\":\"internet\"}",
},
{
"name" = "arms-prometheus",
"config" = "",
},
{
"name" = "ack-node-problem-detector",
"config" = "{\"sls_project_name\":\"\"}",
},
{
"name" = "csi-plugin",
"config" = "",
},
{
"name" = "csi-provisioner",
"config" = "",
}
]
}
# The default resource names.
locals {
k8s_name_terway = "k8s_name_terway_${random_integer.default.result}"
vpc_name = "vpc_name_${random_integer.default.result}"
autoscale_nodepool_name = "autoscale-node-pool-${random_integer.default.result}"
}
# Query ECS instance types with 8 vCPUs and 32 GiB memory to use as worker nodes.
data "alicloud_instance_types" "default" {
cpu_core_count = 8
memory_size = 32
availability_zone = var.availability_zone[0]
kubernetes_node_role = "Worker"
}
resource "random_integer" "default" {
min = 10000
max = 99999
}
# The VPC.
resource "alicloud_vpc" "default" {
vpc_name = local.vpc_name
cidr_block = "172.16.0.0/12"
}
# The node vSwitch.
resource "alicloud_vswitch" "vswitches" {
count = length(var.node_vswitch_cidrs)
vpc_id = alicloud_vpc.default.id
cidr_block = element(var.node_vswitch_cidrs, count.index)
zone_id = element(var.availability_zone, count.index)
}
# The Pod vSwitch (used by Terway for Pod IP allocation).
resource "alicloud_vswitch" "terway_vswitches" {
count = length(var.terway_vswitch_cidrs)
vpc_id = alicloud_vpc.default.id
cidr_block = element(var.terway_vswitch_cidrs, count.index)
zone_id = element(var.availability_zone, count.index)
}
# The ACK managed cluster.
resource "alicloud_cs_managed_kubernetes" "default" {
name = local.k8s_name_terway
cluster_spec = var.cluster_spec # ack.pro.small creates an ACK Pro cluster.
# vSwitches must reside in the zones specified by availability_zone.
worker_vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id))
pod_vswitch_ids = split(",", join(",", alicloud_vswitch.terway_vswitches.*.id))
new_nat_gateway = true # Create a NAT gateway for the cluster.
service_cidr = "10.11.0.0/16" # Must not overlap with the VPC CIDR block. Maximum 256 hosts.
slb_internet_enabled = true # Create an Internet-facing SLB instance for the API server.
enable_rrsa = true
control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"]
dynamic "addons" {
for_each = var.cluster_addons
content {
name = lookup(addons.value, "name", var.cluster_addons)
config = lookup(addons.value, "config", var.cluster_addons)
}
}
}
# Create a node pool with auto scaling enabled. Scales between 1 and 10 nodes.
resource "alicloud_cs_kubernetes_node_pool" "autoscale_node_pool" {
cluster_id = alicloud_cs_managed_kubernetes.default.id
node_pool_name = local.autoscale_nodepool_name
vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id))
scaling_config {
min_size = 1
max_size = 10
}
instance_types = var.worker_instance_types
password = var.password # SSH login password for worker nodes.
install_cloud_monitor = true # Install the CloudMonitor agent on nodes.
system_disk_category = "cloud_efficiency"
system_disk_size = 100
image_type = "AliyunLinux3"
data_disks {
category = "cloud_essd" # Disk category.
size = 120 # Disk size in GiB.
}
}
Etapa 1: Inicialize o Terraform
terraform init
Uma inicialização bem-sucedida retorna:
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.
Etapa 2: Aplique a configuração
terraform apply
Etapa 3: Verifique o resultado
Após a conclusão do apply, acesse a página Node Pools no console do ACK. O novo pool de nós exibe Auto Scaling Enabled abaixo do seu nome.
Limpe os recursos
Exclua todos os recursos criados por esta configuração:
terraform destroy
Para obter detalhes sobre o terraform destroy, consulte Common commands.