Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Créer un pool de nœuds avec mise à l'échelle automatique à l'aide de Terraform

Dernière mise à jour :Aug 25, 2026

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

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) :

    1. Cliquez sur AliyunOOSLifecycleHook4CSRole pour ouvrir la page RAM Quick Authorization.

      Remarque
      • Pour 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.

    2. 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_size et max_size

  • Chaque 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.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.

  3. Cliquez sur Create Node Pool, configurez les paramètres, puis cliquez sur Confirm. Dans la boîte de dialogue, cliquez sur Console-to-Code.

  4. 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 def60920129c15b1257006a07a2b4da4 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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Configurations > ConfigMaps.

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

  4. Dans le panneau Edit, modifiez la valeur taints de "taints":"" à "taints":[] dans la zone de texte Value.

  5. Cliquez sur OK.

Étape 2 : Synchroniser le pool de nœuds

  1. Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.

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

Étapes suivantes

Références