Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Configure an eci-profile

Dernière mise à jour :Sep 12, 2026

Dans les clusters mixtes où coexistent des nœuds réels et des nœuds virtuels, l'ordonnancement des pods sur Elastic Container Instance (ECI) et l'activation des fonctionnalités spécifiques à ECI nécessitent généralement de modifier les fichiers YAML des pods, ce qui brouille la frontière entre les opérations de plateforme et la configuration des applications. Le eci-profile supprime cette contrainte. En tant qu'administrateur de cluster, définissez les règles d'ordonnancement et l'injection d'annotations dans un seul ConfigMap au niveau du cluster. Les pods reçoivent ainsi automatiquement la configuration appropriée, sans aucune modification des fichiers YAML des applications.

Fonctionnement

Lors de la création d'un pod, ack-virtual-node lit le ConfigMap nommé eci-profile dans le namespace kube-system et applique la configuration contenue dans sa section data au pod.

Le eci-profile offre trois fonctionnalités :

  • Planificateur ECI — Achemine les pods vers ECI en fonction des libellés de pod ou de namespace, via un mécanisme de webhook de mutation. Cela élimine le besoin d'ajouter des directives d'ordonnancement aux fichiers YAML individuels des pods.

  • Effet ECI — Injecte automatiquement des annotations et des libellés dans les pods correspondants, permettant d'activer des fonctionnalités ECI avancées telles que la spécification des types d'instance Elastic Compute Service (ECS), l'activation des caches d'image et la configuration du service Network Time Protocol (NTP). Pour la liste complète des annotations prises en charge, consultez la rubrique Annotation de pod ECI.

  • Mises à jour à chaud — Les modifications de configuration apportées au eci-profile (adresse IP du cluster, cloud hybride, collecte de journaux, vSwitches) prennent effet immédiatement pour les nouveaux pods créés. Aucun redémarrage d'ack-virtual-node n'est nécessaire. Les pods existants ne prennent en compte les modifications qu'après une mise à jour progressive.

Prérequis

Avant de commencer, assurez-vous que :

  • Le module complémentaire ack-virtual-node de votre cluster est à jour. Pour le mettre à jour, consultez la rubrique Gérer les composants.

  • Les webhooks de mutation sont activés dans votre cluster (requis pour le planificateur ECI). Dans les clusters ACK Serverless, les pods sont ordonnancés automatiquement sur ECI ; le planificateur ECI n'y est pas nécessaire.

Notes d'utilisation

  • Après la mise à jour du eci-profile, les nouveaux pods ECI utilisent immédiatement la configuration actualisée. Les pods existants n'utilisent la nouvelle configuration qu'après une mise à jour progressive.

  • Si vous ne configurez ni namespaceSelector ni objectSelector pour un sélecteur, mais que vous configurez bien effect, les paramètres d'effet s'appliquent à tous les pods ordonnancés sur ECI.

  • Si plusieurs sélecteurs correspondent à un pod, ils sont évalués dans l'ordre. Les annotations et libellés issus des sélecteurs correspondant en premier ont priorité sur ceux des sélecteurs suivants. Les annotations et libellés existants du pod ont toujours priorité sur tout élément injecté par effect.

Afficher le eci-profile

Exécutez la commande suivante pour afficher le ConfigMap eci-profile actuel :

kubectl get cm -n kube-system eci-profile -o yaml

La section data du ConfigMap contient deux types de configuration :

Paramètre Description
selectors Définit les règles du planificateur ECI et de l'effet ECI. Consultez la section Configurer les sélecteurs.
Autres paramètres (vpcId, vSwitchIds, etc.) Paramètres au niveau du cluster qui s'appliquent lorsqu'aucune substitution au niveau du pod n'est présente. Prennent en charge les mises à jour à chaud. Consultez la section Mettre à jour les paramètres au niveau du cluster.

Un eci-profile par défaut se présente comme suit :

apiVersion: v1
data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enableLinuxArm64Node: "false"
  enableLogController: "false"
  enablePVCController: "false"
  enablePrivateZone: "false"
  enableReuseSSLKey: "false"
  featureGates: "WaitForFirstConsumer=false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  slsMachineGroup: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****
kind: ConfigMap
metadata:
  creationTimestamp: "2023-01-11T08:28:14Z"
  name: eci-profile
  namespace: kube-system
  resourceVersion: "356"
  uid: b345fa8c-919e-41fc-a981-57864b1a****

Modifier le eci-profile

Utilisez l'une des méthodes suivantes pour modifier le eci-profile.

kubectl

kubectl edit configmap eci-profile -n kube-system

Console ACK

  1. Connectez-vous à la console Container Service ACK.

  2. Sur la page Clusters, cliquez sur le nom du cluster cible.

  3. Dans le volet de navigation de gauche, choisissez Configurations > ConfigMaps.

  4. Sélectionnez kube-system dans la liste déroulante Namespace.

  5. Recherchez eci-profile et cliquez sur Edit YAML dans la colonne Actions.

Configurer les sélecteurs

Les sélecteurs définissent quels pods sont acheminés vers ECI (planificateur ECI) et quelles annotations ou libellés sont injectés dans ces pods (effet ECI). Lors de la création d'un pod, le système évalue chaque sélecteur dans l'ordre et applique toutes les règles correspondantes.

Chaque sélecteur prend en charge les champs suivants :

  • name (obligatoire) — Nom unique du sélecteur.

  • namespaceSelector (facultatif) — Fait correspondre les pods en fonction des libellés de namespace. Spécifiez les libellés sous matchLabels. Plusieurs libellés utilisent une logique ET.

  • objectSelector (facultatif) — Fait correspondre les pods en fonction des libellés de pod. Spécifiez les libellés sous matchLabels. Plusieurs libellés utilisent une logique ET.

  • effect (facultatif) — Annotations et libellés à injecter dans les pods correspondants. Les valeurs injectées n'écrasent pas les annotations ou libellés existants du pod.

Important

Lorsque namespaceSelector et objectSelector sont tous deux configurés, un pod doit satisfaire aux deux conditions pour correspondre au sélecteur. Si aucun n'est configuré mais que effect l'est, l'effet s'applique à tous les pods ordonnancés sur ECI.

Modèle de sélecteur

data:
  selectors: |
    [
      {
        "name": "selector-demo1",         # Required. Unique selector name.
        "namespaceSelector": {            # Optional. Matches by namespace labels.
          "matchLabels": {                # AND logic among multiple labels.
            "eci": "true"
          }
        },
        "objectSelector": {               # Optional. Matches by pod labels.
          "matchLabels": {                # AND logic among multiple labels.
            "eci": "true"
          }
        },
        "effect": {                       # Optional. Annotations and labels to inject.
          "annotations": {
            "k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge"
          },
          "labels": {
            "created-by-eci": "true"
          }
        }
      },
      {
        "name": "selector-demo2",
        "objectSelector": {
          "matchLabels": {
            "eci": "test"
          }
        }
      }
    ]

Dans l'exemple ci-dessus, selector-demo1 correspond aux pods qui possèdent à la fois le libellé de pod eci: true et appartiennent à un namespace portant le libellé eci: true. Les pods correspondants sont ordonnancés sur ECI et reçoivent l'annotation k8s.aliyun.com/eci-use-specs: ecs.c6.xlarge ainsi que le libellé created-by-eci: true.

Supprimez les commentaires inline ( # ) avant d'appliquer la configuration. JSON ne prend pas en charge les commentaires.

Vérifier que les sélecteurs prennent effet

Après avoir mis à jour les sélecteurs, exécutez la commande suivante pour confirmer leur enregistrement :

kubectl get mutatingwebhookconfigurations -o yaml vk-webhook

Si la sortie contient vos sélecteurs configurés, la configuration est active. Sinon, vérifiez que votre JSON de sélecteur est correctement formaté.

Exemples de configuration

Exemple 1 : Acheminer des pods spécifiques vers ECI

Le sélecteur suivant achemine un pod vers ECI lorsque le pod possède le libellé created-by-eci: true et que son namespace porte le libellé type: eci.

data:
  selectors: |
    [
      {
        "name": "eci-selector",
        "namespaceSelector": {
          "matchLabels": {
            "type": "eci"
          }
        },
        "objectSelector": {
          "matchLabels": {
            "created-by-eci": "true"
          }
        }
      }
    ]

Exemple 2 : Acheminer des pods vers ECI avec un type d'instance accéléré par GPU

Le sélecteur suivant achemine vers ECI les pods dont le namespace porte le libellé gpu: true, en utilisant le type d'instance accéléré par GPU ecs.gn6v-c8g1.2xlarge, et ajoute le libellé gpu: test aux pods correspondants.

data:
  selectors: |
    [
      {
        "name": "gpu-namespace-selector",
        "namespaceSelector": {
          "matchLabels": {
            "gpu": "true"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-use-specs": "ecs.gn6v-c8g1.2xlarge"
          },
          "labels": {
            "gpu": "test"
          }
        }
      }
    ]

Exemple 3 : Acheminer des pods vers ECI avec une mise en correspondance automatique du cache d'image

Le sélecteur suivant achemine vers ECI les pods portant le libellé imc: auto et active la mise en correspondance automatique du cache d'image.

data:
  selectors: |
    [
      {
        "name": "autoimc-object-selector",
        "objectSelector": {
          "matchLabels": {
            "imc": "auto"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-auto-imc": "true"
          }
        }
      }
    ]

Mettre à jour les paramètres au niveau du cluster

Les paramètres suivants de la section data constituent les valeurs par défaut au niveau du cluster. Lorsqu'un pod est créé sans substitution au niveau du pod, les valeurs du eci-profile sont utilisées. Tous les paramètres prennent en charge les mises à jour à chaud : les modifications prennent effet immédiatement sans redémarrer ack-virtual-node.

Ces paramètres s'appliquent uniquement lorsqu'aucune configuration au niveau du pod ne les remplace.
Paramètre Valeur par défaut Description
enableClusterIp "true" Indique si l'adresse IP du cluster est prise en charge.
enableHybridMode "false" Indique si le mode cloud hybride est activé.
enableLinuxArm64Node "false" Indique si les nœuds basés sur ARM sont activés. Consultez la rubrique Ordonnancer des pods sur un nœud virtuel basé sur ARM.
enableLogController "false" Indique si la définition de ressource personnalisée (CRD) pour Simple Log Service est utilisée pour collecter les journaux des pods. Si la valeur est définie sur "true", configurez également slsMachineGroup.
enablePVCController "false" Indique si l'extension de disque en ligne est activée. Si la valeur est définie sur "true", le système peut étendre à chaud les PersistentVolumeClaims (PVC) liés aux disques.
enablePrivateZone "false" Indique si PrivateZone est utilisé pour la résolution de noms de domaine.
enableReuseSSLKey "false" Indique si les clés SSL sont réutilisées entre les pods. Par défaut, ack-virtual-node émet un certificat SSL unique pour chaque pod. Définir cette option sur "true" permet à tous les pods de partager le même certificat, ce qui améliore le débit de création des pods au détriment de la sécurité.
featureGates "WaitForFirstConsumer=false" Porte de fonctionnalité Canary. Seule WaitForFirstConsumer est configurable. Voir la note ci-dessous.
securityGroupId — Groupe de sécurité pour les pods ECI. Exemple : sg-2zeeyaaxlkq9sppl****.
slsMachineGroup — Groupe de machines pour les pods ECI. Requis lorsque enableLogController est défini sur "true". Exemple : test-mg.
vSwitchIds — ID des vSwitches pour les pods ECI. Séparez plusieurs ID par des virgules. Exemple : vsw-2ze23nqzig8inprou**,vsw-2ze94pjtfuj9vaymf**.
vpcId — ID du Virtual Private Cloud (VPC) dans lequel les pods ECI sont déployés. Exemple : vpc-2zeghwzptn5zii0w7****.

À propos de featureGates: WaitForFirstConsumer

Lorsque WaitForFirstConsumer est défini sur "true" :

  • Le module complémentaire csi-provisioner doit être à jour avant d'activer ce paramètre.

  • Les PersistentVolumes (PV) et le stockage backend sont créés uniquement après l'ordonnancement du pod. La zone et la région spécifiées dans la StorageClass ne sont plus utilisées ; à la place, la zone et la région du nœud du pod ordonnancé sont utilisées pour créer les ressources de stockage. Cela garantit que les ressources de calcul sont ordonnancées en priorité.

Pour plus d'informations, consultez la rubrique Mode de liaison de volume.

Exemple complet de section data :

data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enableLinuxArm64Node: "false"
  enableLogController: "false"
  enablePVCController: "false"
  enablePrivateZone: "false"
  enableReuseSSLKey: "false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  slsMachineGroup: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****