Lorsque vous devez créer rapidement un grand nombre de Pods, le scale-out des instances ECS peut s'avérer trop lent et la réservation d'instances supplémentaires entraîne un gaspillage de ressources. Les nœuds virtuels ACK vous permettent de planifier les Pods sur Elastic Container Instance (ECI) sans provisionner ni gérer d'instances ECS. Cette rubrique décrit comment planifier l'exécution des Pods sur ECI dans un ACK managed cluster.
Remarques sur l'utilisation
Pour kube-scheduler v6.11.0 ou version ultérieure, si vous créez plus de 1 000 Pods ECI simultanément en ajoutant des libellés, mettez à jour vers la dernière version et activez la fonctionnalité SchedulerBatchMoveEvents=true.
Cas d'utilisation
L'exécution des Pods sur ECI est idéale pour gérer les pics de trafic et réduire les coûts de calcul. Parmi les cas d'utilisation courants, citons :
-
Services en ligne avec des modèles de trafic fluctuants
Les Pods ECI vous aident à réagir plus rapidement aux pics de trafic, réduisent la maintenance des pools de ressources fixes et abaissent les coûts de calcul.
-
Tâches de calcul par lots ou de courte durée
Lorsque vous exécutez des tâches de calcul sous forme de Pods ECI, vous n'avez pas besoin de maintenir des nœuds dédiés et ne payez que les ressources de calcul utilisées pendant l'exécution des tâches. Cette approche réduit les coûts pour les charges de travail telles que les jobs Spark et IA.
Prérequis
Votre cluster ACK doit exécuter Kubernetes 1.16 ou une version ultérieure et se trouver dans une région qui prend en charge ECI.
Pour vérifier si la région de votre cluster est prise en charge, consultez Regions and zones supported by ECI. Ensuite, connectez-vous à la Elastic Container Instance console pour activer le service ECI.
Procédure
Étape 1 : Déployer le composant ack-virtual-node
Les étapes suivantes utilisent un ACK managed cluster à titre d'exemple. Pour un ACK dedicated cluster, vous devez déployer le composant ack-virtual-node depuis la page Marketplace. Pour plus d'informations, consultez Deploy the ack-virtual-node component.
Connectez-vous à la ACK console. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .
-
Sur la page Add-ons, cliquez sur l'onglet Core Components, recherchez ACK Virtual Node, puis cliquez sur Install. Suivez les instructions affichées à l'écran pour terminer l'installation.
Pendant l'installation, le vSwitch et le groupe de sécurité par défaut du cluster sont utilisés comme paramètres de configuration ECI initiaux. Pour modifier les paramètres, vous pouvez les mettre à jour en configurant un eci-profile.
Étape 2 : Planifier un Pod sur ECI
Les exemples suivants montrent comment planifier un Pod sur un nœud virtuel pour qu'il s'exécute dans ECI en ajoutant un libellé au Pod ou au Namespace. Pour plus de méthodes de planification, consultez Schedule a Pod to a virtual node.
Pod
Pour exécuter un Pod individuel dans ECI, ajoutez le libellé alibabacloud.com/eci: "true" au Pod. Cela planifie le Pod sur un nœud virtuel d'architecture x86 pour qu'il s'exécute en tant que Pod ECI.
-
Créez un Deployment à partir du fichier YAML suivant.
kubectl create -f eci-pod.yamlLe code suivant présente un exemple de fichier
eci-pod.yaml:RemarqueDans le fichier YAML ci-dessous, l'annotation
k8s.aliyun.com/eci-use-specsspécifie la spécification de calcul pour le Pod ECI. Pour plus d'informations sur la configuration des spécifications des Pods ECI, consultez Specify the compute specification of an ECI pod.apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx alibabacloud.com/eci: "true" # Add this label to schedule the Pod to ECI. annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # Specify 2 vCPUs and 4 GiB of memory for the ECI pod. spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 -
Vérifiez que le Pod s'exécute sur un nœud virtuel.
kubectl get pod -o wide -l app=nginxLa sortie attendue montre que le Pod a été planifié sur un nœud virtuel, comme indiqué dans la colonne
NODE.NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-86f7fbc94f-g5m22 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-86f7fbc94f-r4wcn 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> -
Consultez les détails du Pod ECI.
kubectl get pod <pod-name> -o yamlDans la sortie YAML, trouvez l'ID d'instance ECI correspondant dans l'annotation
k8s.aliyun.com/eci-instance-idet confirmez la spécification de calcul du Pod ECI utilisée pour la facturation dans l'annotationk8s.aliyun.com/eci-instance-spec.
Namespace
Si vous souhaitez exécuter une catégorie spécifique de Pods dans ECI, vous pouvez créer un Namespace et lui ajouter le libellé alibabacloud.com/eci: "true". Tous les Pods créés dans ce Namespace sont alors planifiés sur un nœud virtuel d'architecture x86 pour s'exécuter en tant que Pods ECI.
-
Créez un Namespace nommé
vket ajoutez-y le libellé requis.kubectl create ns vk kubectl label namespace vk alibabacloud.com/eci=true -
Utilisez le fichier YAML suivant pour créer un Deployment dans le namespace
vk.kubectl create -f eci-namespace.yamlLe code suivant présente un exemple de fichier
eci-namespace.yaml:RemarqueDans le fichier YAML ci-dessous, l'annotation
k8s.aliyun.com/eci-use-specsspécifie la spécification de calcul pour le Pod ECI. Pour plus d'informations sur la configuration des spécifications des Pods ECI, consultez Specify the compute specification of an ECI pod.apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: vk # Specify the labeled Namespace to schedule Pods to ECI. labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # Specify 2 vCPUs and 4 GiB of memory for the ECI pod. spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 -
Vérifiez que le Pod s'exécute sur un nœud virtuel.
kubectl get pod -o wide -l app=nginx -n vkLa sortie attendue montre que le Pod a été planifié sur un nœud virtuel, comme indiqué dans la colonne
NODE.NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-8f54bcfb5-86pvc 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-8f54bcfb5-skvkg 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> -
Consultez les détails du Pod ECI.
kubectl get pod <pod-name> -o yaml -n vkDans la sortie YAML, trouvez l'ID d'instance ECI correspondant dans l'annotation
k8s.aliyun.com/eci-instance-idet confirmez la spécification de calcul du Pod ECI utilisée pour la facturation dans l'annotationk8s.aliyun.com/eci-instance-spec.