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.
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
Installez et configurez onectl sur votre machine locale. Pour plus d'informations, consultez Gérer les clusters enregistrés à l'aide d'onectl.
-
Exécutez la commande suivante pour accorder des autorisations Resource Access Management (RAM) à ack-virtual-node :
onectl ram-user grant --addon ack-virtual-nodeSortie 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.
-
Facultatif : Créez une politique personnalisée.
-
Attachez une politique à l'utilisateur RAM.
Vous pouvez accorder des autorisations aux utilisateurs RAM en ajoutant des politiques système telles que
AliyunECIFullAccess,AliyunVPCReadOnlyAccessetAliyunAccFullAccess, ou des politiques d'autorisation personnalisées. -
Créez une paire AccessKey pour l'utilisateur RAM.
AvertissementIl 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.
-
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>'RemarqueRemplacez
<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
Connectez-vous à la console ACK. 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, 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.
-
Exécutez la commande suivante pour interroger l'état du nœud virtuel :
kubectl get no |grep virtual-kubeletSortie attendue :
virtual-kubelet-cn-hangzhou-b Ready agent 18d v1.20.11-aliyun.1La sortie indique que le nœud virtuel est dans l'état Ready.
-
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=trueau pod que vous souhaitez créer. Un pod basé sur Elastic Container Instance est alors créé et planifié sur le nœud virtuel. Exemple :Exécutez la commande suivante pour ajouter un libellé au pod :
Exécutez la commande suivante pour interroger le pod :
Sortie attendue :
kubectl run nginx --image nginx -l alibabacloud.com/eci=truekubectl get pod -o wide|grep virtual-kubeletnginx-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=trueau namespace auquel appartient le pod. Un pod basé sur Elastic Container Instance est alors créé et planifié sur le nœud virtuel. Exemple :Exécutez la commande suivante pour créer un nœud virtuel :
Exécutez la commande suivante pour ajouter un libellé au namespace auquel appartient le pod :
Exécutez la commande suivante pour planifier le pod sur le nœud virtuel :
Exécutez la commande suivante pour interroger le pod :
Sortie attendue :
kubectl create ns vkkubectl label namespace vk alibabacloud.com/eci=truekubectl -n vk run nginx --image nginxkubectl -n vk get pod -o wide|grep virtual-kubeletnginx-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-kau pod. Un pod basé sur Elastic Container Instance est alors créé et planifié sur un nœud virtuel. Exemple :-
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" -
Exécutez la commande suivante pour déployer l'application :
kubectl apply -f nginx-deployment.yaml -
Exécutez la commande suivante pour interroger le pod :
kubectl get pod -o wide|grep virtual-kubelet -
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
-
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-nodeSortie 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.
-
Exécutez la commande
kubectl delete node <node name>pour supprimer les nœuds virtuels dont vous n'avez plus besoin.RemarqueAprès la désinstallation d'ack-virtual-node, les instances de conteneur élastiques existantes dans votre cluster ne sont pas supprimées.