Tous les produits
Search
Centre de documentation

:Schedule pods to run on elastic container instances through virtual nodes

Dernière mise à jour :Aug 11, 2026

Lorsque vous utilisez des clusters Container Service for Kubernetes (ACK), il peut être nécessaire de lancer rapidement un grand nombre de pods en peu de temps. L'ajout de nœuds Elastic Compute Service (ECS) pour héberger ces pods prend trop de temps, tandis que la réservation d'instances ECS inactives gaspille des ressources. Une meilleure solution consiste à planifier l'exécution des pods sur des instances de conteneur élastiques via les nœuds virtuels ACK. De cette manière, vous n'avez pas besoin d'acheter ni de gérer des instances ECS. Cette rubrique explique comment planifier l'exécution des pods sur des instances de conteneur élastiques dans des clusters enregistrés ACK One.

Fonctionnement

Elastic Container Instance est un service de calcul serverless fourni par Alibaba Cloud pour la conteneurisation, qui offre un environnement d'exécution isolé, rapidement déployable et sans gestion opérationnelle pour vos conteneurs. Les instances de conteneur élastiques vous permettent de vous concentrer sur vos applications conteneurisées sans avoir à acheter ni à gérer des instances ECS. Vous pouvez créer des instances de conteneur élastiques selon vos besoins et êtes facturé à la seconde pour l'utilisation des ressources.

En général, votre cluster dispose d'au moins un groupe de nœuds de centre de données. Après la création des pods, le cluster les planifie sur les nœuds. Ce mode de planification convient aux applications recevant un volume de trafic stable. Si votre charge de travail présente des pics soudains ou imprévisibles, il est recommandé d'utiliser des nœuds virtuels pour planifier directement les pods sur des instances de conteneur élastiques. Cette solution évite le temps de création des nœuds et les coûts liés aux ressources inactives.

image

Prérequis

  • Un cluster enregistré est créé et un cluster autogéré dont la version Kubernetes est 1,14 ou ultérieure est connecté au cluster enregistré.

  • La région dans laquelle le cluster est déployé est prise en charge par Elastic Container Instance. Pour afficher les régions et zones prises en charge, connectez-vous à la console Elastic Container Instance. Pour plus d'informations sur les régions et zones prises en charge, consultez Régions et zones.

Étape 1 : Accorder des autorisations RAM à ack-virtual-node

Utiliser onectl

  1. Installez et configurez onectl sur votre machine locale. Pour plus d'informations, consultez Gérer les clusters enregistrés à l'aide d'onectl.

  2. Exécutez la commande suivante pour accorder des autorisations Resource Access Management (RAM) à ack-virtual-node :

    onectl ram-user grant --addon ack-virtual-node

    Sortie attendue :

    Ram policy ack-one-registered-cluster-policy-ack-virtual-node granted to ram user ack-one-user-ce313528c3 successfully.

Utiliser la console

Avant de pouvoir installer le composant dans un cluster enregistré, vous devez spécifier une paire AccessKey dans le cluster Kubernetes autogéré. Cette paire AccessKey est requise lors de l'accès aux services Alibaba Cloud depuis le cluster Kubernetes autogéré. Avant de définir la paire AccessKey, créez un utilisateur RAM et accordez-lui les autorisations nécessaires pour accéder aux ressources Alibaba Cloud.

  1. Créez un utilisateur RAM.

  2. Facultatif : Créez une politique personnalisée.

    Afficher l'exemple de code

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "vpc:DescribeVSwitches",
                    "vpc:DescribeVpcs"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "eci:CreateContainerGroup",
                    "eci:DeleteContainerGroup",
                    "eci:DescribeContainerGroups",
                    "eci:DescribeContainerGroupStatus",
                    "eci:DescribeContainerGroupEvents",
                    "eci:DescribeContainerLog",
                    "eci:UpdateContainerGroup",
                    "eci:UpdateContainerGroupByTemplate",
                    "eci:CreateContainerGroupFromTemplate",
                    "eci:RestartContainerGroup",
                    "eci:ExportContainerGroupTemplate",
                    "eci:DescribeContainerGroupMetric",
                    "eci:DescribeMultiContainerGroupMetric",
                    "eci:ExecContainerCommand",
                    "eci:CreateImageCache",
                    "eci:DescribeImageCaches",
                    "eci:DeleteImageCache",
                    "eci:DescribeContainerGroupMetaInfos",
                    "eci:UpdateImageCache",
                    "eci:RestartContainer",
                    "eci:RestartContainers"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "acc:DescribeZones",
                    "acc:CreateInstance",
                    "acc:UpdateInstance",
                    "acc:DeleteInstance",
                    "acc:RestartInstance",
                    "acc:DescribeInstances",
                    "acc:DescribeInstanceStatus",
                    "acc:DescribeInstanceEvents",
                    "acc:DescribeInstanceDetail",
                    "acc:DescribeMultiInstanceMetric",
                    "acc:DescribeContainerLog",
                    "acc:ResizeInstanceVolume",
                    "acc:CreateCustomResource",
                    "acc:UpdateCustomResource",
                    "acc:DeleteCustomResource",
                    "acc:DescribeCustomResources",
                    "acc:DescribeCustomResourceDetail"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. Attachez une politique à l'utilisateur RAM.

    Vous pouvez accorder des autorisations aux utilisateurs RAM en ajoutant des politiques système telles que AliyunECIFullAccess, AliyunVPCReadOnlyAccess et AliyunAccFullAccess, ou des politiques d'autorisation personnalisées.

  4. Créez une paire AccessKey pour l'utilisateur RAM.

    Avertissement

    Il est recommandé de configurer des politiques basées sur les paires AccessKey pour le contrôle d'accès réseau, en limitant les sources d'appel AccessKey aux environnements réseau approuvés afin de renforcer la sécurité des clés AccessKey.

  5. Utilisez la paire AccessKey pour créer un Secret nommé alibaba-addon-secret dans le cluster enregistré.

    Le système utilise automatiquement la paire AccessKey pour accéder aux ressources cloud lors de l'installation d'ack-virtual-node.

    kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'
    Remarque

    Remplacez <your access key id> et <your access key secret> par la paire AccessKey obtenue à l'étape précédente.

Étape 2 : Installer ack-virtual-node

Utiliser onectl

Exécutez la commande suivante pour installer ack-virtual-node :

onectl addon install ack-virtual-node

Sortie attendue :

Addon ack-virtual-node, version **** installed.

Utiliser la console

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

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .

  3. Sur la page Add-ons, recherchez ack-virtual-node et cliquez sur Install.

    Dans la boîte de dialogue Note, cliquez sur OK. Le vSwitch et le groupe de sécurité par défaut du cluster sont utilisés pour les instances de conteneur élastiques déployées par ack-virtual-node. Pour plus d'informations, consultez Étapes suivantes.

Étape 3 : Planifier l'exécution des pods sur des instances de conteneur élastiques

Une fois ack-virtual-node déployé dans votre cluster, vous pouvez planifier l'exécution des pods sur des instances de conteneur élastiques déployées en tant que nœuds virtuels dans votre cluster. Utilisez l'une des méthodes suivantes pour planifier l'exécution des pods sur des instances de conteneur élastiques dans un cluster enregistré : assurez-vous que les nœuds virtuels sont dans l'état Ready avant de planifier les pods.

  1. Exécutez la commande suivante pour interroger l'état du nœud virtuel :

    kubectl  get no |grep virtual-kubelet

    Sortie attendue :

    virtual-kubelet-cn-hangzhou-b   Ready    agent                  18d   v1.20.11-aliyun.1

    La sortie indique que le nœud virtuel est dans l'état Ready.

  2. Vous pouvez utiliser l'une des trois méthodes suivantes pour planifier l'exécution des pods sur des instances de conteneur élastiques.

    Method 1: Add labels to pods (version du cluster supérieure à 1,16)

    Ajoutez le libellé alibabacloud.com/eci=true au pod que vous souhaitez créer. Un pod basé sur Elastic Container Instance est alors créé et planifié sur le nœud virtuel. Exemple :

    1. Exécutez la commande suivante pour ajouter un libellé au pod :

    2. kubectl run nginx --image nginx -l alibabacloud.com/eci=true
    3. Exécutez la commande suivante pour interroger le pod :

    4. kubectl get pod -o wide|grep virtual-kubelet
    5. Sortie attendue :

    6. nginx-7fc9f746b6-r4xgx     0/1     ContainerCreating   0          20s   192.168.XX.XX   virtual-kubelet        <none>           <none>

    Method 2: Add labels to namespaces

    Ajoutez le libellé alibabacloud.com/eci=true au namespace auquel appartient le pod. Un pod basé sur Elastic Container Instance est alors créé et planifié sur le nœud virtuel. Exemple :

    1. Exécutez la commande suivante pour créer un nœud virtuel :

    2. kubectl create ns vk
    3. Exécutez la commande suivante pour ajouter un libellé au namespace auquel appartient le pod :

    4. kubectl label namespace vk alibabacloud.com/eci=true
    5. Exécutez la commande suivante pour planifier le pod sur le nœud virtuel :

    6. kubectl -n vk run nginx --image nginx
    7. Exécutez la commande suivante pour interroger le pod :

    8. kubectl -n vk get pod -o wide|grep virtual-kubelet
    9. Sortie attendue :

    10. nginx-6f489b847d-vgj4d      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>

    Méthode 3 : Spécifier les noms de nœuds

    Planifiez uniquement des pods spécifiques sur les nœuds virtuels. Ajoutez le libellé nodeName: virtual-kubelet-cn-shanghai-k au pod. Un pod basé sur Elastic Container Instance est alors créé et planifié sur un nœud virtuel. Exemple :

    1. Créez un fichier nommé nginx-deployment.yaml et copiez-y le contenu suivant :

      apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
      kind: Deployment
      metadata:
        name: nginx-deployment-basic
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            nodeName: virtual-kubelet-cn-shanghai-k             # nodeName of the specified virtual kubelet
            containers:
            - name: nginx
              image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
              ports:
              - containerPort: 80
              resources:
                limits:
                  cpu: "500m"
    2. Exécutez la commande suivante pour déployer l'application :

      kubectl apply -f nginx-deployment.yaml
    3. Exécutez la commande suivante pour interroger le pod :

      kubectl  get pod -o wide|grep virtual-kubelet
    4. Sortie attendue :

      nginx-6f489b847d-XXX      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>
      nginx-6f489b847d-XXX      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>

Étapes suivantes

Modifier les configurations du vSwitch auquel une instance de conteneur élastique est connectée

Vous pouvez modifier la variable d'environnement ECI_VSWITCH pour changer le vSwitch des pods planifiés sur le nœud virtuel. Il est recommandé de configurer plusieurs vSwitches déployés dans différentes zones afin de garantir une haute disponibilité. Lorsque les instances de conteneur élastiques de la zone actuelle sont en rupture de stock, le contrôleur de nœud virtuel crée les pods dans une autre zone.

Exécutez la commande suivante pour modifier les configurations du vSwitch auquel une instance de conteneur élastique est connectée :

kubectl edit configmap eci-profile -n kube-system

Exemple de configuration :

data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enablePrivateZone: "false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****     # the vSwitch to which an elastic container instance pod is connected. Separate multiple vSwitch IDs with commas (,).
  vpcId: vpc-2zeghwzptn5zii0w7****

Pour plus d'informations sur la configuration d'un eci-profile, consultez Configurer eci-profile.

Delete a virtual node

  1. Désinstallez ack-virtual-node du cluster enregistré.

    Utiliser onectl

    Exécutez la commande suivante pour désinstaller ack-virtual-node :

    onectl addon uninstall ack-virtual-node

    Sortie attendue :

    Addon ack-virtual-node uninstalled.

    Utiliser la console

    Accédez à la page Add-ons dans la console ACK et désinstallez ack-virtual-node.

  2. Exécutez la commande kubectl delete node <node name> pour supprimer les nœuds virtuels dont vous n'avez plus besoin.

    Remarque

    Après la désinstallation d'ack-virtual-node, les instances de conteneur élastiques existantes dans votre cluster ne sont pas supprimées.