1
votes

Commande Grep pour extraire un nom de pod Kubernetes

Je travaille actuellement sur un script bash pour réduire le temps qu'il me faut pour construire la base de données d'un projet. Actuellement, j'ai plusieurs bases de données fonctionnant dans le même espace de noms et je souhaite extraire uniquement le nom du pod spécifique.

Je lance kubectl get pods

NAME                        READY   STATUS    RESTARTS   AGE
elastic                     1/1     Running   0          37h
mysql                       1/1     Running   0          37h

Maintenant, je veux enregistrer l'un des noms de pod.

J'exécute actuellement ce foo = $ (kubectl get pods | grep -e "mysql") et il renvoie mysql 1/1 Running 0 37h qui est le résultat attendu de la commande. Maintenant, je veux juste pouvoir extraire le nom du pod en tant que variable afin de pouvoir le transmettre ultérieurement.


3 commentaires

Utilisez foo = $ (kubectl get pods | awk '$ 1 ~ / mysql / {print $ 1}'


Je ne comprends pas. Vous souhaitez extraire mysql de la sortie? Et vous le faites en grepping mysql ?


Je parie qu'il pourrait y avoir une structure mysql-deployment-xxxxx-yyyy


3 Réponses :


1
votes

Cela devrait fonctionner pour vous

foo=$(kubectl get pods | awk '{print $1}' | grep -e "mysql")


0 commentaires

2
votes

kubectl vous permet déjà d'extraire uniquement les noms:

kubectl get pods -o=jsonpath='{.items..metadata.name}' | fgrep mysql


0 commentaires

-1
votes

Si je ne me trompe pas, vous devez simplement obtenir uniquement les noms de pods pour les réutiliser plus tard.

Le kubectl get --help fournit beaucoup de bonnes informations sur ce que vous pouvez réaliser avec juste un kubectl sans invoquer le reste de l'artillerie lourde comme awk , sed , etc.

Répertoriez un seul pod au format de sortie JSON.

kubectl get -o json pod web-pod-13je7

Répertoriez les informations sur les ressources dans des colonnes personnalisées.

kubectl get pod test-pod -o custom-columns = CONTAINER: .spec.containers [0] .name, IMAGE: .spec.containers [0] .image

Renvoie uniquement la valeur de phase du pod spécifié. kubectl get -o template pod / web-pod-13je7 --template = {{. status.phase}}

Dans ce cas particulier, je vois au moins 2 solutions de contournement:

1) Colonnes personnalisées. Vous pouvez obtenir pratiquement n'importe quelle sortie (et ensuite vous pouvez grep / tr / awk si nécessaire):

kubectl get pods -o=jsonpath='{.items..metadata.name}'


0 commentaires