2
votes

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?

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.


2 commentaires

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.


3 Réponses :


4
votes

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.


1 commentaires

Opter pour Statefulset pour préserver le nom semble exagéré. Qu'est-ce que tu penses?



2
votes

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


0 commentaires

3
votes

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).

  • Cela créera un réplicaset (avec name = deployname_name + 10 chiffres aplhanumérique). Mais pourquoi extra alphanumérique? Lorsque nous effectuons la mise à niveau du déploiement, le nouveau réplicaset est créé avec un nouvel alphanumérique et l'ancien est conservé tel quel. Cet ancien réplicaset est utilisé pour les restaurations .
  • Le réplicaset créé créera des pods (avec name = replicaset_name + 5 chiffres alphanumériques). Mais pourquoi extra alphanumérique? Nous ne pouvons pas avoir deux pods portant le même nom.

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:

  1. poupe
  2. kube-fzf

Solution légère à votre problème:

  1. 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

  1. 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
    
  2. remplacer pod / en utilisant ripgrep ou sed (rg "pod /" -r "")

  3. prendre un seul pod en utilisant head -n 1
  4. utiliser awk pour imprimer la commande exec / see_log
  5. le diriger vers bash pour l'exécuter


1 commentaires

Bonne explication 👍