VNodectl est un outil CLI permettant de déployer et de gérer des VNodes dans des clusters Kubernetes auto-gérés. Une fois le VNode déployé, les pods qui y sont planifiés s'exécutent sous forme d'instances de conteneur élastiques basées sur Elastic Container Instance, sans aucune modification à apporter à votre cluster existant.
Limitations
Les VNodes ne sont pas des nœuds réels. Les DaemonSets ne peuvent pas s'exécuter sur des VNodes. Après la création d'un VNode, configurez l'affinité de nœud
nodeAffinitysur kube-proxy pour empêcher la planification des pods DaemonSet sur ce nœud. Consultez la section Empêcher la planification des DaemonSets sur le VNode.Le mode d'authentification ServiceAccount ne prend pas en charge la rotation des certificats. Si vous utilisez ce mode, assurez-vous que le jeton dispose d'une période de validité suffisamment longue pour éviter toute défaillance du VNode.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster Kubernetes dont la version est comprise entre 1,16 et 1,30.
Si votre cluster s'exécute dans un centre de données : une connectivité réseau entre le centre de données et le Virtual Private Cloud (VPC) où s'exécuteront les pods basés sur Elastic Container Instance. Les options prises en charge incluent Express Connect, Smart Access Gateway (SAG) ou VPN Gateway.
-
Les ID de ressource et les informations d'identification suivants :
Ressource Comment l'obtenir ID de région Consultez les Régions et zones pour connaître les régions disponibles, ou interrogez l'API DescribeRegions via la console Elastic Container Instance. ID de VPC Créez ou affichez les VPC sur la page VPCs de la console VPC. ID de vSwitch Créez ou affichez les vSwitches sur la page vSwitch de la console VPC. Sélectionnez un vSwitch situé dans le même VPC. ID de groupe de sécurité Créez ou affichez les groupes de sécurité sur la page Security Groups de la console ECS. Sélectionnez un groupe de sécurité situé dans le même VPC. AccessKey ID et AccessKey secret Consultez Créer une paire AccessKey.
Utilisez un groupe de sécurité avancé et ajoutez les règles entrantes suivantes :
Tous les ports 1–65535 depuis les plages CIDR du VPC
Ports 10250 et 10255 depuis l'endpoint du serveur API Kubernetes
Les autorisations suivantes sont requises pour créer un VNode :
| Type | Autorisation | Description |
|---|---|---|
| Standard | system:node |
Autorisations de nœud standard |
| Standard | system:node-proxier |
Autorisations kube-proxy standard |
| Standard | system:certificates.k8s.io:certificatesigningrequests:nodeclient |
Permet aux nœuds de demander la création de certificats |
| Standard | system:certificates.k8s.io:certificatesigningrequests:selfnodeclient |
Permet aux nœuds de faire tourner les certificats |
| Supplémentaire | pods update et pods patch |
Met à jour les annotations des pods, telles que k8s.aliyun.com/eci-instance-id |
| Supplémentaire | pvc update et pvc patch |
Met à jour les annotations PersistentVolumeClaim (PVC) |
Installez VNodectl
Installez VNodectl sur le nœud maître de votre cluster Kubernetes.
Téléchargez le package correspondant à votre système d'exploitation et à votre architecture CPU :
| Système d'exploitation | Architecture CPU | Téléchargement |
|---|---|---|
| macOS | AMD64 | macOS_AMD64 |
| ARM64 | macOS_ARM64 | |
| Linux | AMD64 | Linux_AMD64 |
| ARM64 | Linux_ARM64 | |
| Windows | AMD64 | Windows_AMD64 |
| ARM64 | Windows_ARM64 |
Les étapes suivantes utilisent Linux AMD64 comme exemple :
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
Ajoutez l'option--dryà toute commandevnodepour effectuer une validation côté client sans appliquer les modifications. Si une erreur de compatibilité de version d'API se produit, ajoutez l'option--kubernetes-versionpour spécifier la version Kubernetes de votre cluster.
Configurez le cluster
Avant de créer un VNode, générez un certificat kubeconfig pour celui-ci. VNodectl prend en charge deux modes d'authentification :
| Mode | Quand l'utiliser |
|---|---|
| TLS Bootstrap | Si vous avez des exigences de sécurité, utilisez ce mode. Il déploie automatiquement vnode-approver pour approuver les demandes de signature de certificat (CSR) provenant des VNodes. Prend en charge la rotation des certificats. |
| ServiceAccount | Ne prend pas en charge la rotation des certificats ; assurez-vous que le jeton dispose d'une validité permanente ou suffisamment longue. |
TLS Bootstrap
-
Préparez les informations de cluster suivantes :
Paramètre Description Comment l'obtenir Exemple kubeconfigKubeconfig admin utilisé pour accorder les autorisations de déploiement Chemin par défaut : ~/.kube/config/path/to/kubeconfigcluster-ca-pathAutorité de certification (CA) utilisée pour générer le kubeconfig du VNode Exécutez ps aux | grep apiserveret récupérez la valeur de--client-ca-file/path/to/ca.crtapiserver-addressEndpoint du serveur API pour la communication avec le cluster Lisez cette information depuis votre kubeconfig https://8.134.XX.XX:6443bootstrap-token-idFait partie du jeton TLS bootstrap Choisissez une chaîne alphanumérique de 6 caractères eci123bootstrap-token-secretChoisissez une chaîne alphanumérique de 16 caractères eci1233333333333 -
Déployez vnode-approver pour approuver automatiquement les CSR provenant des VNodes.
vnode addon enable vnode-approverPour le code source, consultez vnode-approver sur GitHub.
-
Exécutez la commande de configuration du cluster. Remplacez les valeurs d'espace réservé par les informations réelles de votre cluster.
vnode cluster setup \ --kubeconfig /path/to/kubeconfig \ --bootstrap \ --bootstrap-token-id <token-id> \ --bootstrap-token-secret <token-secret> \ --apiserver-address https://8.134.XX.XX:6443 \ --cluster-ca-path /path/to/ca.crt -
Validez la configuration.
vnode cluster validateLa sortie attendue est la suivante :
kubeconfig can't be emptyPar défaut, le certificat kubeconfig est enregistré dans
~/.vnode/deploy/kubeconfig.
ServiceAccount
-
Préparez les informations de cluster suivantes :
Paramètre Description Comment l'obtenir Exemple kubeconfigKubeconfig admin utilisé pour accorder les autorisations de déploiement Chemin par défaut : ~/.kube/config/path/to/kubeconfigcluster-ca-pathCA utilisée pour générer le kubeconfig du VNode Exécutez `ps auxgrep apiserver` et récupérez la valeur de --client-ca-file/path/to/ca.crtapiserver-addressEndpoint du serveur API pour la communication avec le cluster Lisez cette information depuis votre kubeconfig https://8.134.XX.XX:6443 -
Exécutez la commande de configuration du cluster. Remplacez les valeurs d'espace réservé par les informations réelles de votre cluster.
vnode cluster setup \ --kubeconfig /path/to/kubeconfig \ --apiserver-address https://8.134.XX.XX:6443 \ --cluster-ca-path /path/to/ca.crt -
Validez la configuration.
vnode cluster validateLa sortie attendue est la suivante :
kubeconfig can't be emptyPar défaut, le certificat kubeconfig est enregistré dans
~/.vnode/deploy/kubeconfig.
Configurez le fichier ~/.vnode/config
Le fichier ~/.vnode/config stocke la configuration que VNodectl lit au moment de l'exécution. Configurez-le avant de créer un VNode.
-
Générez le modèle de configuration par défaut.
Paramètre Obligatoire Description nameOui Nom du contexte vnode-nameNon Nom du VNode. Laissez vide pour permettre au système de générer un nom unique. region-idOui ID de la région où s'exécute le VNode. Consultez la section Prérequis pour plus de détails. access-key-idOui Votre AccessKey ID pour l'authentification API. Consultez Créer une paire AccessKey. access-key-secretOui vswitch-idOui ID du vSwitch pour le VNode. Spécifiez plusieurs ID pour activer la sélection automatique du vSwitch. security-group-idOui ID du groupe de sécurité pour le VNode. resource-group-idNon Groupe de ressources pour le VNode. Par défaut, il s'agit du groupe de ressources par défaut du compte. Consultez Qu'est-ce que Resource Management ? kubeconfigOui Chemin vers le kubeconfig généré à l'étape précédente. Par défaut : ~/.vnode/deploy/kubeconfigtaintsNon Taints à associer au VNode. tagsNon Tags pour la facturation détaillée. Après avoir associé un tag personnalisé, filtrez les frais par tag dans la vue d'analyse des coûts. Consultez Afficher les factures détaillées selon les tags. network-typeNon Type de réseau pour le service de contrôle Elastic Container Instance. Laissez vide pour un accès Internet ; définissez sur vpcpour un accès VPC.vnode config defaultLe tableau suivant décrit les paramètres de la section
contexts. -
Écrivez le modèle dans
~/.vnode/configet modifiez-le.vnode config default > ~/.vnode/config vim ~/.vnode/configL'exemple suivant montre une configuration minimale contenant uniquement les paramètres obligatoires :
kind: vnode contexts: - name: default region-id: cn-guangzhou access-key-id: <yourAccessKeyID> access-key-secret: <yourAccessKeySecret> vswitch-id: vsw-7xv2yk45qp5etidgf**** security-group-id: sg-7xv5tcch4kjdr65t**** kubeconfig: ~/.vnode/deploy/kubeconfig current-context: default -
Vérifiez que VNodectl lit correctement la configuration.
vnode config -
Si vous disposez de plusieurs contextes, basculez vers celui que vous souhaitez utiliser.
vnode config set-context <context-name>
Créez un VNode
-
Créez le VNode.
vnode createLe VNode est créé sur la base du fichier
~/.vnode/config. Pour configurercustomResources,clusterDNSouclusterDomain, consultez Gérer les VNodes. La sortie attendue inclut l'ID du VNode :{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Vérifiez l'état du VNode.
vnode listLorsque
STATUSindiqueReady, le VNode est en cours d'exécution :VNODE ID VNODE NAME CREATED STATUS SCHEDULABLE ZONES vnd-7xvetkyase7gb62u**** vnode-cn-guangzhou-a-7xvetkyase7gb62u**** 2 minutes ago Ready cn-guangzhou-a -
Confirmez que le VNode apparaît dans le cluster.
kubectl get nodeLe VNode est répertorié en tant que nœud
agent:NAME STATUS ROLES AGE VERSION cn-guangzhou.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êchez la planification des DaemonSets sur le VNode
Les VNodes ne sont pas des nœuds réels, donc les pods DaemonSet ne peuvent pas s'y exécuter. Configurez l'affinité de nœud nodeAffinity sur kube-proxy pour exclure le VNode.
-
Modifiez le DaemonSet kube-proxy.
kubectl -n kube-system edit ds kube-proxy -
Ajoutez le bloc
nodeAffinitysuivant àspec.template.spec.affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Planifiez des pods sur le VNode
Une fois le VNode créé, planifiez-y des pods en utilisant l'une des méthodes suivantes :
Planification manuelle : Configurez
nodeSelectorettolerations, ou définisseznodeNamedans la spécification du pod. Consultez Planifier des pods sur un VNode.Planification automatique : Déployez le composant eci-profile et spécifiez un
Selector. Le système planifie automatiquement les pods correspondants sur le VNode. Consultez Utiliser eci-profile pour planifier des pods sur un VNode.