J'utilise actuellement Terraform pour créer un cluster K8S qui fonctionne parfaitement bien. Une fois que les nœuds sont provisionnés, je souhaite exécuter quelques commandes Bash sur l'un des nœuds. Jusqu'à présent, null_resource code> semble être une option puisqu'il s'agit d'un cluster et que nous ignorons les noms de nœud / IPS. Cependant, je suis incapable de déterminer quelle devrait être la valeur de la connexion code> code> car Azurerm_kubernettes_cluster n'exporte pas l'adresse IP de l'équilibreur de charge ou des noms VM. Le point d'interrogation a besoin de la valeur correcte dans ci-dessous:
resource "null_resource" "cluster" {
triggers = { "${join(",", azurerm_kubernetes_cluster.k8s.id)}" }
connection = { type = ssh
user = <user>
password = <password>
host = <?>
host_key = <pub_key>
}
}
3 Réponses :
Aks n'expose pas les nœuds de celui-ci à Internet. Et vous pouvez simplement connecter les nœuds via le maître du cluster. Si vous souhaitez exécuter quelques commandes Bash dans les nœuds, vous pouvez utiliser la connexion SSH qui crée une boutique comme aide à vous connecter aux nœuds, voir les étapes concernant Accès au nœud SSH . P>
En outre, vous pouvez ajouter les règles NAT pour les nœuds de l'équilibreur de charge, vous pouvez également servir SSH aux nœuds via l'équilibreur de charge Public IP. Mais ce n'est pas une manière sécurisée. Donc, je ne suggère pas de cette façon. P>
Mais Terraform ne crache pas l'IP publique de labalancer. J'essaie de résoudre ce problème
@Asshulverma Vous pouvez créer l'adresse IP publique avec une méthode statique lorsque vous créez le cluster AKS. Ensuite, vous pouvez générer l'IP publique.
recommanderait simplement d'exécuter un démonet qui effectue les commandes Bash sur les nœuds. Comme toutes les opérations d'échelle ou de mise à jour, supprimez ou non la configuration mise à jour que vous effectuez sur les nœuds. P>
Comme mentionné dans la question, je n'ai pas besoin de cela pour courir sur chaque nœud - juste sur l'un des nœuds pendant une fois c'est bien
Il n'y avait pas de solution simple pour celui-ci. L'adresse IP statique n'était pas la bonne façon de le faire et donc, j'ai fini par écrire une enveloppe autour du Terraform. Je ne voulais pas exécuter mes scripts init sur chaque nœud qui se présente, mais un seul des nœuds. Donc, essentiellement, maintenant que Wrapper communique avec Terraform sur le premier déploiement, un seul nœud exécute Cloud-Init. Après cela, il rappelle la fonction d'échelle Terraform et apporte le reste du nombre d'instances souhaitée. Dans le script Cloud-Init, j'ai une vérification de kubectl get No code> où si je reçois la taille comme plus d'un nœud, je saute simplement les commandes de Cloud-Init. p>
Vous voulez juste exécuter des commandes Bash dans les nœuds? Toute façon est d'accord?
@Charlesxu oui, je serais ouvert à essayer des suggestions