Configurez scaling_config dans alicloud_cs_kubernetes_node_pool pour mettre à l'échelle automatiquement les nœuds ACK selon la demande.
Exécutez ces exemples dans Terraform Explorer .
Les ressources créées ici engendrent des frais. Supprimez-les avec terraform destroy une fois terminé.
Prérequis
Assurez-vous d'avoir :
-
Auto Scaling est activé avec le rôle par défaut attribué.
Si vous avez déjà utilisé le composant
alicloud_cs_kubernetes_autoscaler, Auto Scaling est déjà activé. -
Le rôle AliyunOOSLifecycleHook4CSRole est créé pour l'accès au service CloudOps Orchestration Service (OOS) :
-
Cliquez sur AliyunOOSLifecycleHook4CSRole pour ouvrir la page RAM Quick Authorization.
RemarquePour les comptes Alibaba Cloud : cliquez directement sur le lien.
Pour les utilisateurs RAM : votre compte Alibaba Cloud doit avoir le rôle AliyunOOSLifecycleHook4CSRole attribué. Attachez la stratégie AliyunRAMReadOnlyAccess à l'utilisateur RAM. Consultez la rubrique Accorder des autorisations à un utilisateur RAM.
Sur la page RAM Quick Authorization, cliquez sur Authorize.
-
-
Un environnement d'exécution Terraform configuré avec l'une des options suivantes :
Option Idéal pour Terraform Explorer Tests rapides sans installation locale Cloud Shell Terraform avec des identifiants préconfigurés Machine locale Réseaux instables ou environnements de développement personnalisés
Contexte
Alibaba Cloud Provider 1.111.0 a introduit la ressource alicloud_cs_kubernetes_node_pool pour gérer les pools de nœuds avec mise à l'échelle automatique. Elle remplace l'ancien composant alicloud_cs_kubernetes_autoscaler, qui présentait trois limites :
Une configuration complexe entraînant une charge opérationnelle élevée
Les nœuds mis à l'échelle étaient ajoutés au pool de nœuds par défaut et ne pouvaient pas être gérés séparément
Certains paramètres ne pouvaient pas être modifiés après la création
La ressource alicloud_cs_kubernetes_node_pool répond à ces trois problématiques :
La mise à l'échelle automatique nécessite seulement deux paramètres :
min_sizeetmax_sizeChaque pool de nœuds est géré indépendamment et visible dans la console ACK
Les paramètres optionnels utilisent des valeurs par défaut sûres, empêchant toute dérive de l'environnement entre les nœuds
Ressources Terraform
| Ressource | Fonction |
|---|---|
| alicloud_instance_types | Interroge les types d'instance Elastic Compute Service (ECS) qui répondent aux conditions spécifiées |
| alicloud_vpc | Crée un réseau privé virtuel (VPC) |
| alicloud_vswitch | Crée des vSwitches dans un VPC |
| alicloud_cs_managed_kubernetes | Crée un cluster ACK managé |
| alicloud_cs_kubernetes_node_pool | Crée un pool de nœuds pour un cluster ACK managé |
| Ressource | Objectif |
|---|---|
| alicloud_instance_types | Interroger les types d'instance Elastic Compute Service (ECS) disponibles |
| alicloud_vpc | Créer un réseau privé virtuel (VPC) |
| alicloud_vswitch | Créer des vSwitches (sous-réseaux) dans le VPC |
| alicloud_cs_managed_kubernetes | Créer un cluster ACK managé |
| alicloud_cs_kubernetes_node_pool | Créer un pool de nœuds avec mise à l'échelle automatique |
Générer les paramètres Terraform depuis la console ACK
Si ces exemples ne couvrent pas votre configuration, générez les paramètres Terraform exacts depuis la console ACK.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.
Cliquez sur Create Node Pool, configurez les paramètres, puis cliquez sur Confirm. Dans la boîte de dialogue, cliquez sur Console-to-Code.
Dans le panneau Console-to-Code, cliquez sur l'onglet Terraform. Le bloc de code affiche les paramètres de votre pool de nœuds. Cliquez sur
pour l'utiliser.
Créer un pool de nœuds avec la mise à l'échelle automatique activée
Choisissez la procédure correspondant à votre situation.
Si vous avez déjà utilisé alicloud_cs_kubernetes_autoscaler
Migrez vers alicloud_cs_kubernetes_node_pool :
Étape 1 : Modifier le ConfigMap autoscaler-meta
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Configurations > ConfigMaps.
Sur la page ConfigMap, sélectionnez kube-system dans la liste déroulante Namespace. Recherchez autoscaler-meta et cliquez sur Edit dans la colonne Actions.
Dans le panneau Edit, modifiez la valeur
taintsde"taints":""à"taints":[]dans la zone de texte Value.Cliquez sur OK.
Étape 2 : Synchroniser le pool de nœuds
Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.
Sur la page Node Pools, cliquez sur Sync Node Pool.
Si vous n'avez pas encore utilisé alicloud_cs_kubernetes_autoscaler
Les exemples ci-dessous utilisent scaling_config pour définir les limites du nombre de nœuds.
Ajouter un pool de nœuds avec mise à l'échelle automatique à un cluster existant
Si vous disposez déjà d'un cluster ACK, ajoutez un pool de nœuds avec cette configuration minimale :
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
}
}
Créer simultanément un cluster et un pool de nœuds avec mise à l'échelle automatique
Provisionnez un VPC, un cluster ACK Pro et un pool de nœuds avec mise à l'échelle automatique en une seule commande 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.
}
}
Étape 1 : Initialiser Terraform
terraform init
Une initialisation réussie renvoie :
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.
Étape 2 : Appliquer la configuration
terraform apply
Étape 3 : Vérifier le résultat
Une fois l'application terminée, accédez à la page Node Pools dans la console ACK. Le nouveau pool de nœuds affiche Auto Scaling Enabled sous son nom.
Nettoyer les ressources
Supprimez toutes les ressources créées par cette configuration :
terraform destroy
Pour plus de détails sur terraform destroy , consultez la rubrique Commandes courantes.