Pourquoi les noms de pod ont-ils 5 caractères alphanumériques aléatoires ajoutés à leur nom lorsqu'ils sont créés via un déploiement Kubernetes? Est-il possible de s'en débarrasser pour que les noms des pods ne changent pas? Je supprime et crée fréquemment des déploiements et je préférerais que les noms de pod ne changent pas.
Mise à jour: je voudrais avoir le même nom car je supprime / recrée constamment le même déploiement et si le nom ne change pas, je peux réutiliser rapidement les anciennes commandes pour exécuter / voir les journaux des conteneurs.
3 Réponses :
C'est ainsi que les déploiements fonctionnent, à chaque fois que le pod meurt, ReplcaSet crée un pod avec un nom différent pour correspondre à l'état souhaité et au numéro aléatoire attaché au nom du pod pour leur donner des noms uniques.
Tout ce que vous essayez de réaliser n'est pas possible avec les objets de déploiement car ils sont destinés aux applications sans état. Comme vous souhaitez conserver l'état (nom) de l'application, cela est certainement possible avec StatefulSet.
Donc, si vous utilisez un objet StatefulSet pour gérer les répliques, chaque pod sera créé avec une certaine convention de nom, e. g. POD_NAME-1, POD_NAME-2, etc. i. e. L'index sera ajouté au nom du pod. De plus, lorsque le pod meurt, un nouveau pod est créé avec le même nom.
Tout ce que vous voulez atteindre est le cas d'utilisation idéal de StatefulSet. Fonce.
Opter pour Statefulset pour préserver le nom semble exagéré. Qu'est-ce que tu penses?
Si vous déployez un pod à partir d'un objet de déploiement, de type: Deployment, le contrôleur de déploiement ajoute un nom unique au pod qui fait partie d'un déploiement spécifique. C'est ainsi que le contrôleur de déploiement recherche tous les pods pertinents du déploiement respectif. Ceci est nécessaire pour la mise à niveau progressive, les fonctions de restauration
Raison d'avoir des caractères alphanumériques aléatoires dans les noms de pod:
Lorsque nous créons un déploiement , il ne crée pas directement de pods (pour correspond au nombre de répliques).
Si votre utilisation consiste à utiliser fréquemment les anciennes commandes, opter pour Statefulset n'est pas la bonne solution . Les Statefulsets sont lourds (déploiement ordonné, terminaison ordonnée, noms de réseau uniques) et ils sont spécialement conçus pour préserver l'état au redémarrage (en combinaison avec un volume persistant).
Il y en a peu outils que vous pouvez utiliser:
Solution légère à votre problème:
Vous pouvez utiliser des libellés pour obtenir le même pod dans les déploiements:
kubectl get pods -l app=my_app,app_type=server -o namenames pod/my-app-5b7644f7f6-4hb8s pod/my-app-5b7644f7f6-72ssz
après cela, nous pouvons utiliser un peu de magie bash pour obtenir ce que nous voulons comme ci-dessous
Commande finale:
kubectl get pods -l app=my_app,app_type=server -o name | rg "pod/" -r "" | head -n 1 | awk '{print "kubectl logs " $0}' | bash
obtenir la liste des noms de pod
kubectl get pods -l app=my_app,app_type=server NAME READY STATUS RESTARTS AGE my-app-5b7644f7f6-4hb8s 1/1 Running 0 22h my-app-5b7644f7f6-72ssz 1/1 Running 0 22h
remplacer pod / en utilisant ripgrep ou sed (rg "pod /" -r "")
head -n 1 Bonne explication 👍
Pourquoi voulez-vous conserver le même nom?
@DineshBalasubramanian, je voudrais avoir le même nom car je supprime / recrée constamment le même déploiement et si le nom ne change pas, alors je peux rapidement réutiliser les anciennes commandes pour exécuter / voir les journaux des conteneurs.