Déployez un nœud virtuel (VNode) dans votre cluster Kubernetes autonome hébergé sur ECS afin d'ordonnancer les pods via Elastic Container Instance (ECI) au sein du même VPC.
Contexte
ECI gère l'ordonnancement des pods et les ressources au niveau de l'infrastructure, tandis que Kubernetes assure la gestion des charges de travail. Ajoutez un VNode à votre cluster autonome sur ECS pour utiliser ECI. La rubrique Connecter un cluster Kubernetes autonome à ECI décrit l'intégralité du processus d'intégration.
Prérequis
Un cluster Kubernetes autonome (versions 1.13 à 1.30) sur ECS, créé avec kubeadm.
Le plug-in réseau Flannel, Calico ou Cilium est déployé dans le cluster.
Installer vnodectl
ECI fournit vnodectl pour connecter et gérer les VNodes. Nous vous recommandons de l'installer sur un nœud de plan de contrôle de votre cluster.
Connectez-vous à votre cluster Kubernetes.
-
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 -
Extrayez le package.
tar xvf vnodectl.tar.gz -
Déplacez le binaire vers un répertoire inclus dans votre PATH.
cp vnodectl /usr/local/bin/vnode
Configurer le fichier ~/.vnode/config
-
Modifiez le fichier
~/.vnode/config.vim ~/.vnode/configAjoutez votre configuration. Exemple :
ImportantLe kubeconfig requiert les permissions
cluster-admin. Des alternatives avec des permissions restreintes sont présentées dans la rubrique Configurer le cluster.Le VNode doit pouvoir atteindre l'adresse du serveur API définie dans le kubeconfig.
kind: vnode contexts: - name: default # The name of the context. region-id: cn-hangzhou # The region ID. access-key-id: <yourAccessKeyID> # The AccessKey ID. access-key-secret: <yourAccessKeySecret> # The AccessKey secret. vswitch-id: vsw-7xv2yk45qp5etidgf**** # The ID of the vSwitch to which the VNode belongs. security-group-id: sg-7xv5tcch4kjdr65t**** # The ID of the security group to which the VNode belongs. kubeconfig: /path/to/kubeconfig # The path to the cluster's kubeconfig file. current-context: default -
Définissez le contexte actif.
vnode config set-context <context-name>
Créer un VNode
-
Créez un VNode.
vnode createLa sortie inclut le VirtualNodeId :
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Vérifiez le nœud.
kubectl get nodeLe VNode apparaît avec le statut Ready :
NAME STATUS ROLES AGE VERSION cn-hangzhou.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êcher l'ordonnancement des DaemonSets sur un VNode
Un VNode est un nœud virtuel et ne peut pas exécuter de DaemonSets. Après la création d'un VNode, vous devez ajouter une nodeAffinity au DaemonSet kube-proxy pour empêcher l'ordonnancement des DaemonSets sur le VNode.
-
Modifiez la configuration du DaemonSet.
kubectl -n kube-system edit ds kube-proxy -
Configurez la nodeAffinity.
Ajoutez le code YAML suivant à la section
spec.template.spec:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Ordonnancer les pods sur un VNode
Une fois le VNode créé, vous pouvez utiliser les méthodes suivantes pour ordonnancer les pods en tant qu'instances ECI sur le VNode.
-
Ordonnancement manuel
Vous pouvez ordonnancer manuellement les pods sur un VNode en configurant les sélecteurs de nœuds (nodeSelector) et les tolérances, ou en spécifiant un nodeName. Pour plus d'informations, consultez la rubrique Ordonnancer les pods sur un VNode.
-
Ordonnancement automatique
Après avoir déployé le composant eci-profile, vous pouvez configurer un sélecteur personnalisé pour ordonnancer automatiquement les pods correspondants sur le VNode. Pour plus d'informations, consultez la rubrique Utiliser eci-profile pour ordonnancer les pods sur un VNode.
Établir la connectivité réseau des pods
Les pods exécutés sur le VNode reçoivent une ENI et une adresse IP interne depuis le vSwitch du VPC.
Par défaut, les pods du VNode ne peuvent pas atteindre les pods situés sur le réseau superposé du cluster (Flannel, Calico ou Cilium), bien que l'inverse soit possible. Ajoutez une entrée de routage à la table de routage du VPC pour diriger le trafic sortant des pods du VNode vers les nœuds ECS appropriés.
Exemple de configuration de routage :
-
Scénario d'exemple
Dans cet exemple, test1 s'exécute sur le VNode et test2 sur un nœud ECS. Par défaut, test2 peut atteindre test1, mais pas l'inverse.
NAME READY RESTARTS AGE IP NODE NOMINATED NODE READINESS NODE test1 1/1 0 58s 192.168.0.245 cn-hangzhou.vnd-7xvetkyase7gb62u**** <none> <none> test2 1/1 0 35s 10.88.1.4 vnode-test002 <none> <none> -
Procédure
Connectez-vous à la console VPC.
Dans le volet de navigation de gauche, cliquez sur Route Tables.
Sélectionnez la région de votre cluster, identifiez la table de routage du VPC et cliquez sur son ID.
Sous l'onglet Route Entry List, cliquez sur l'onglet Custom Route.
Cliquez sur Add Route Entry.
-
Dans le panneau Add route entry, configurez l'entrée de routage et cliquez sur OK.
Exemple de configuration :
Destination CIDR Block : saisissez le bloc CIDR des pods sur le nœud ECS cible, par exemple 10.88.1.0/24.
Next Hop Type : sélectionnez ECS Instance.
ECS Instance : sélectionnez le nœud ECS cible.
-
Vérifier le résultat
Exécutez
kubectl execpour ouvrir un shell dans test1 et pinguer test2. Une réponse positive confirme que test1 peut désormais atteindre test2.
Documentation connexe
Pour vous connecter sans VNodectl, utilisez la console ou l'OpenAPI. Consultez la rubrique Se connecter à un VNode (manuellement).