Les versions 1.18 à 1.24 de Kubernetes conservent la capacité de planification élastique dans Elastic Container Instance (ECI). Depuis mai 2023, Container Service for Kubernetes (ACK) ne maintient plus cette fonctionnalité pour les clusters exécutant Kubernetes v1.24 ou une version ultérieure. Utilisez plutôt l'une des alternatives suivantes :
Configurer l'allocation des ressources en fonction des instances ECS et des instances de conteneur élastique : imposez une planification exclusive sur ECI, exclusive sur ECS ou privilégiant ECS à l'aide des taints, tolerations et affinités de nœuds natifs de Kubernetes.
Configurer la planification des ressources basée sur les priorités : utilisez ResourcePolicy pour des stratégies avancées, notamment la planification par priorité entre les instances ECS sous abonnement, les instances ECS au paiement à l'utilisation et les instances ECI ; la réduction de capacité en ordre inverse ; et la migration non intrusive des pods.
Pour comparer les solutions de planification de nœuds virtuels, consultez la rubrique Planifier un pod sur un nœud virtuel.
La planification basée sur les instances de conteneur élastique vous permet de contrôler le backend de calcul qui exécute vos pods en ajoutant une seule annotation aux métadonnées du pod. Selon la valeur de l'annotation, les pods s'exécutent exclusivement sur les nœuds Elastic Compute Service (ECS), exclusivement sur les instances de conteneur élastique, ou sur les instances de conteneur élastique uniquement lorsque la capacité ECS du cluster est épuisée.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster managé ACK Pro
-
Une version de planificateur prise en charge pour votre version de Kubernetes. Pour plus de détails sur les versions du planificateur, consultez kube-scheduler.
Version de Kubernetes Version minimale du planificateur 1.18 v1.18-ack-3.0 1.20 v1.20.4-ack-4.0 1.22 v1.22.3-ack-1.0 1.24 v1.24.3-ack-2.0 Le composant
ack-virtual-nodedéployé dans le cluster. Pour obtenir des instructions de configuration, consultez Planifier des pods sur des instances de conteneur élastique via des nœuds virtuels.
Configurer le mode de planification
Ajoutez l'annotation alibabacloud.com/burst-resource à la section metadata du pod. Pour un Deployment, placez l'annotation sous spec.template.metadata.
Le tableau suivant résume l'impact de chaque valeur d'annotation sur le comportement de planification :
| Valeur de l'annotation | Comportement de planification | Nœud virtuel requis | Échec si |
|---|---|---|---|
| (non définie) | Utilise uniquement les nœuds ECS existants dans le cluster (par défaut) | Non | — |
eci |
Utilise d'abord les nœuds ECS ; bascule sur ECI lorsque la capacité ECS est insuffisante | — | — |
eci_only |
Utilise uniquement ECI ; les nœuds ECS ne sont jamais utilisés | Oui | Aucun nœud virtuel n'existe dans le cluster |
| Toute autre valeur | — | — | Échec systématique ; valeur invalide |
alibabacloud.com/burst-resource: eci entre en conflit avec alibabacloud.com/fluid-sidecar-target: eci. Pour des exemples d'utilisation de alibabacloud.com/fluid-sidecar-target, consultez Accélérer l'accès aux données dans le cloud computing sans serveur et les rubriques connexes.
Appliquer l'annotation
-
Créez un fichier nommé
nginx-deployment.yamlavec le contenu suivant :apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: name: nginx annotations: alibabacloud.com/burst-resource: eci # Fall back to ECI when ECS capacity is insufficient labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2 -
Appliquez le manifeste :
kubectl apply -f nginx-deployment.yaml
Scénarios d'échec
La planification des pods échoue dans les situations suivantes :
La valeur de l'annotation n'est ni
ecinieci_only. Le message PodStatus estrequesttypemustbeeci,eci_onlyorecs(Kubernetes v1.22.15 et v1.24.6).La valeur de l'annotation est
eci_onlymais aucun nœud virtuel n'existe dans le cluster. Le message PodStatus estdoesn'tfitecitype:eci_only(Kubernetes v1.22.15 et v1.24.6).