Tous les produits
Search
Centre de documentation

Elastic Container Instance:Deploy VNode in a self-managed Kubernetes cluster with VNodectl

Dernière mise à jour :Aug 11, 2026

VNodectl est un outil CLI permettant de déployer et de gérer des VNodes dans des clusters Kubernetes auto-gérés. Une fois le VNode déployé, les pods qui y sont planifiés s'exécutent sous forme d'instances de conteneur élastiques basées sur Elastic Container Instance, sans aucune modification à apporter à votre cluster existant.

Limitations

  • Les VNodes ne sont pas des nœuds réels. Les DaemonSets ne peuvent pas s'exécuter sur des VNodes. Après la création d'un VNode, configurez l'affinité de nœud nodeAffinity sur kube-proxy pour empêcher la planification des pods DaemonSet sur ce nœud. Consultez la section Empêcher la planification des DaemonSets sur le VNode.

  • Le mode d'authentification ServiceAccount ne prend pas en charge la rotation des certificats. Si vous utilisez ce mode, assurez-vous que le jeton dispose d'une période de validité suffisamment longue pour éviter toute défaillance du VNode.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster Kubernetes dont la version est comprise entre 1,16 et 1,30.

  • Si votre cluster s'exécute dans un centre de données : une connectivité réseau entre le centre de données et le Virtual Private Cloud (VPC) où s'exécuteront les pods basés sur Elastic Container Instance. Les options prises en charge incluent Express Connect, Smart Access Gateway (SAG) ou VPN Gateway.

  • Les ID de ressource et les informations d'identification suivants :

    Ressource Comment l'obtenir
    ID de région Consultez les Régions et zones pour connaître les régions disponibles, ou interrogez l'API DescribeRegions via la console Elastic Container Instance.
    ID de VPC Créez ou affichez les VPC sur la page VPCs de la console VPC.
    ID de vSwitch Créez ou affichez les vSwitches sur la page vSwitch de la console VPC. Sélectionnez un vSwitch situé dans le même VPC.
    ID de groupe de sécurité Créez ou affichez les groupes de sécurité sur la page Security Groups de la console ECS. Sélectionnez un groupe de sécurité situé dans le même VPC.
    AccessKey ID et AccessKey secret Consultez Créer une paire AccessKey.
Utilisez un groupe de sécurité avancé et ajoutez les règles entrantes suivantes :
Tous les ports 1–65535 depuis les plages CIDR du VPC
Ports 10250 et 10255 depuis l'endpoint du serveur API Kubernetes

Les autorisations suivantes sont requises pour créer un VNode :

Type Autorisation Description
Standard system:node Autorisations de nœud standard
Standard system:node-proxier Autorisations kube-proxy standard
Standard system:certificates.k8s.io:certificatesigningrequests:nodeclient Permet aux nœuds de demander la création de certificats
Standard system:certificates.k8s.io:certificatesigningrequests:selfnodeclient Permet aux nœuds de faire tourner les certificats
Supplémentaire pods update et pods patch Met à jour les annotations des pods, telles que k8s.aliyun.com/eci-instance-id
Supplémentaire pvc update et pvc patch Met à jour les annotations PersistentVolumeClaim (PVC)

Installez VNodectl

Installez VNodectl sur le nœud maître de votre cluster Kubernetes.

Téléchargez le package correspondant à votre système d'exploitation et à votre architecture CPU :

Système d'exploitation Architecture CPU Téléchargement
macOS AMD64 macOS_AMD64
ARM64 macOS_ARM64
Linux AMD64 Linux_AMD64
ARM64 Linux_ARM64
Windows AMD64 Windows_AMD64
ARM64 Windows_ARM64

Les étapes suivantes utilisent Linux AMD64 comme exemple :

  1. Connectez-vous à votre cluster Kubernetes.

  2. Téléchargez le package VNodectl.

    wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz
  3. Extrayez le package.

    tar xvf vnodectl.tar.gz
  4. Déplacez le binaire vers un répertoire inclus dans votre PATH.

    cp vnodectl /usr/local/bin/vnode
Ajoutez l'option --dry à toute commande vnode pour effectuer une validation côté client sans appliquer les modifications. Si une erreur de compatibilité de version d'API se produit, ajoutez l'option --kubernetes-version pour spécifier la version Kubernetes de votre cluster.

Configurez le cluster

Avant de créer un VNode, générez un certificat kubeconfig pour celui-ci. VNodectl prend en charge deux modes d'authentification :

Mode Quand l'utiliser
TLS Bootstrap Si vous avez des exigences de sécurité, utilisez ce mode. Il déploie automatiquement vnode-approver pour approuver les demandes de signature de certificat (CSR) provenant des VNodes. Prend en charge la rotation des certificats.
ServiceAccount Ne prend pas en charge la rotation des certificats ; assurez-vous que le jeton dispose d'une validité permanente ou suffisamment longue.

TLS Bootstrap

  1. Préparez les informations de cluster suivantes :

    Paramètre Description Comment l'obtenir Exemple
    kubeconfig Kubeconfig admin utilisé pour accorder les autorisations de déploiement Chemin par défaut : ~/.kube/config /path/to/kubeconfig
    cluster-ca-path Autorité de certification (CA) utilisée pour générer le kubeconfig du VNode Exécutez ps aux | grep apiserver et récupérez la valeur de --client-ca-file /path/to/ca.crt
    apiserver-address Endpoint du serveur API pour la communication avec le cluster Lisez cette information depuis votre kubeconfig https://8.134.XX.XX:6443
    bootstrap-token-id Fait partie du jeton TLS bootstrap Choisissez une chaîne alphanumérique de 6 caractères eci123
    bootstrap-token-secret Choisissez une chaîne alphanumérique de 16 caractères eci1233333333333
  2. Déployez vnode-approver pour approuver automatiquement les CSR provenant des VNodes.

    vnode addon enable vnode-approver

    Pour le code source, consultez vnode-approver sur GitHub.

  3. Exécutez la commande de configuration du cluster. Remplacez les valeurs d'espace réservé par les informations réelles de votre cluster.

    vnode cluster setup \
      --kubeconfig /path/to/kubeconfig \
      --bootstrap \
      --bootstrap-token-id <token-id> \
      --bootstrap-token-secret <token-secret> \
      --apiserver-address https://8.134.XX.XX:6443 \
      --cluster-ca-path /path/to/ca.crt
  4. Validez la configuration.

    vnode cluster validate

    La sortie attendue est la suivante :

    kubeconfig can't be empty

    Par défaut, le certificat kubeconfig est enregistré dans ~/.vnode/deploy/kubeconfig.

ServiceAccount

  1. Préparez les informations de cluster suivantes :

    Paramètre Description Comment l'obtenir Exemple
    kubeconfig Kubeconfig admin utilisé pour accorder les autorisations de déploiement Chemin par défaut : ~/.kube/config /path/to/kubeconfig
    cluster-ca-path CA utilisée pour générer le kubeconfig du VNode Exécutez `ps aux grep apiserver` et récupérez la valeur de --client-ca-file

    /path/to/ca.crt

    apiserver-address Endpoint du serveur API pour la communication avec le cluster Lisez cette information depuis votre kubeconfig https://8.134.XX.XX:6443
  2. Exécutez la commande de configuration du cluster. Remplacez les valeurs d'espace réservé par les informations réelles de votre cluster.

    vnode cluster setup \
      --kubeconfig /path/to/kubeconfig \
      --apiserver-address https://8.134.XX.XX:6443 \
      --cluster-ca-path /path/to/ca.crt
  3. Validez la configuration.

    vnode cluster validate

    La sortie attendue est la suivante :

    kubeconfig can't be empty

    Par défaut, le certificat kubeconfig est enregistré dans ~/.vnode/deploy/kubeconfig.

Configurez le fichier ~/.vnode/config

Le fichier ~/.vnode/config stocke la configuration que VNodectl lit au moment de l'exécution. Configurez-le avant de créer un VNode.

  1. Générez le modèle de configuration par défaut.

    Paramètre Obligatoire Description
    name Oui Nom du contexte
    vnode-name Non Nom du VNode. Laissez vide pour permettre au système de générer un nom unique.
    region-id Oui ID de la région où s'exécute le VNode. Consultez la section Prérequis pour plus de détails.
    access-key-id Oui Votre AccessKey ID pour l'authentification API. Consultez Créer une paire AccessKey.
    access-key-secret Oui
    vswitch-id Oui ID du vSwitch pour le VNode. Spécifiez plusieurs ID pour activer la sélection automatique du vSwitch.
    security-group-id Oui ID du groupe de sécurité pour le VNode.
    resource-group-id Non Groupe de ressources pour le VNode. Par défaut, il s'agit du groupe de ressources par défaut du compte. Consultez Qu'est-ce que Resource Management ?
    kubeconfig Oui Chemin vers le kubeconfig généré à l'étape précédente. Par défaut : ~/.vnode/deploy/kubeconfig
    taints Non Taints à associer au VNode.
    tags Non Tags pour la facturation détaillée. Après avoir associé un tag personnalisé, filtrez les frais par tag dans la vue d'analyse des coûts. Consultez Afficher les factures détaillées selon les tags.
    network-type Non Type de réseau pour le service de contrôle Elastic Container Instance. Laissez vide pour un accès Internet ; définissez sur vpc pour un accès VPC.
    vnode config default

    Le tableau suivant décrit les paramètres de la section contexts.

  2. Écrivez le modèle dans ~/.vnode/config et modifiez-le.

    vnode config default > ~/.vnode/config
    vim ~/.vnode/config

    L'exemple suivant montre une configuration minimale contenant uniquement les paramètres obligatoires :

    kind: vnode
    contexts:
        - name: default
          region-id: cn-guangzhou
          access-key-id: <yourAccessKeyID>
          access-key-secret: <yourAccessKeySecret>
          vswitch-id: vsw-7xv2yk45qp5etidgf****
          security-group-id: sg-7xv5tcch4kjdr65t****
          kubeconfig: ~/.vnode/deploy/kubeconfig
    current-context: default
  3. Vérifiez que VNodectl lit correctement la configuration.

    vnode config
  4. Si vous disposez de plusieurs contextes, basculez vers celui que vous souhaitez utiliser.

    vnode config set-context <context-name>

Créez un VNode

  1. Créez le VNode.

    vnode create

    Le VNode est créé sur la base du fichier ~/.vnode/config. Pour configurer customResources, clusterDNS ou clusterDomain, consultez Gérer les VNodes. La sortie attendue inclut l'ID du VNode :

    {"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"}
  2. Vérifiez l'état du VNode.

    vnode list

    Lorsque STATUS indique Ready, le VNode est en cours d'exécution :

    VNODE ID                    VNODE NAME                                   CREATED          STATUS    SCHEDULABLE ZONES
    vnd-7xvetkyase7gb62u****    vnode-cn-guangzhou-a-7xvetkyase7gb62u****    2 minutes ago    Ready     cn-guangzhou-a
  3. Confirmez que le VNode apparaît dans le cluster.

    kubectl get node

    Le VNode est répertorié en tant que nœud agent :

    NAME                                    STATUS     ROLES                  AGE    VERSION
    cn-guangzhou.vnd-7xvetkyase7gb62u****   Ready      agent                  174m   v1.20.6
    vnode-test001                           Ready      control-plane,master   23h    v1.20.6
    vnode-test002                           Ready      <none>                 22h    v1.20.6

Empêchez la planification des DaemonSets sur le VNode

Les VNodes ne sont pas des nœuds réels, donc les pods DaemonSet ne peuvent pas s'y exécuter. Configurez l'affinité de nœud nodeAffinity sur kube-proxy pour exclure le VNode.

  1. Modifiez le DaemonSet kube-proxy.

    kubectl -n kube-system edit ds kube-proxy
  2. Ajoutez le bloc nodeAffinity suivant à spec.template.spec.

    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: type
              operator: NotIn
              values:
              - virtual-kubelet

Planifiez des pods sur le VNode

Une fois le VNode créé, planifiez-y des pods en utilisant l'une des méthodes suivantes :

Étapes suivantes