как объединить вывод из двух команд kubectl - PullRequest
0 голосов
/ 05 апреля 2019

Ищет способ объединения / объединения выходных данных двух разных команд get kubectl. Вывод ниже изменен для защиты невинных ...

Я подтвердил, что вывод json модулей pub kubectl не содержит меток узлов, которые должны отображаться вместе с выводом модуля.

WORKS - команда для получения метки boshid из узла

$ kubectl get no -L bosh.id -o=custom-columns=NODE:.metadata.name,BOSHID:.metadata.labels."bosh\.id"
NODE                                   BOSHID
89a7a2dc-7468-4163-90fe-f043e408d6af   fec06254-467a-4bdf-983d-f99b7143a667
d4674474-7e0c-49aa-847a-287aa6c1e803   898fff19-3bd5-42d2-8697-0710b0b8baff
fe2be367-a407-4c15-92e7-b0d8918b7e7b   cd9179dd-731a-4d01-8541-4e86355d4457

WORKS - команда для получения узлов, на которых находится каждый модуль

$ kubectl get po -n pks-system -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP             NODE                                   NOMINATED NODE
fluent-bit-4kmzx                   1/1     Running   0          1d    ************   fe2be367-a407-4c15-92e7-b0d8918b7e7b   <none>
fluent-bit-cg26h                   1/1     Running   0          1d    ************   89a7a2dc-7468-4163-90fe-f043e408d6af   <none>
fluent-bit-ddqzh                   1/1     Running   0          1d    ************   d4674474-7e0c-49aa-847a-287aa6c1e803   <none>
sink-controller-57df674b84-mbvcz   1/1     Running   0          1d    ************   89a7a2dc-7468-4163-90fe-f043e408d6af   <none>

ЖЕЛАЕМЫЕ РЕЗУЛЬТАТЫ - команда, которая перечисляет узел и указывает, что каждый модуль включен

$ kubectl get po (some magic here)
NAME                               READY   STATUS    RESTARTS   AGE   IP             NODE                                   BOSHID
fluent-bit-4kmzx                   1/1     Running   0          1d    ************   fe2be367-a407-4c15-92e7-b0d8918b7e7b   cd9179dd-731a-4d01-8541-4e86355d4457
fluent-bit-cg26h                   1/1     Running   0          1d    ************   89a7a2dc-7468-4163-90fe-f043e408d6af   fec06254-467a-4bdf-983d-f99b7143a667
fluent-bit-ddqzh                   1/1     Running   0          1d    ************   d4674474-7e0c-49aa-847a-287aa6c1e803   898fff19-3bd5-42d2-8697-0710b0b8baff
sink-controller-57df674b84-mbvcz   1/1     Running   0          1d    ************   89a7a2dc-7468-4163-90fe-f043e408d6af   fec06254-467a-4bdf-983d-f99b7143a667

1 Ответ

0 голосов
/ 14 мая 2019

Боюсь, что создать нужный вам выход в Кубернетес невозможно.Однако это может быть сделано с помощью сценария (то есть python или bash)

Я не очень хорош в сценарии, но мне удалось создать короткий сценарий в Bash, который показывает почти желаемое представление.

script.sh

#!/bin/bash
pods=$(kubectl get pods -owide | tr -s " " |cut -d " " -f 1-7 | tail -n +2)

nodes=$(kubectl get nodes -L node.sh -o=custom-columns=NODE:.metadata.name,ContainerID:.metadata.annotations."container\.googleapis\.com/instance_id" | tail -n +2)

echo -e "POD                   READY STATUS RESTARTS AGE IP NODE                              BoshID"
echo "$pods" | while read LINE
  do
    nodeName=$(echo "$LINE" | cut -d ' ' -f 7)
    goutput=$(echo "$nodes" | grep "$nodeName" | tr -s ' '| cut -d ' ' -f 2)
    echo "$LINE $goutput"
  done

Мой вывод

$ ./skrypt.sh
POD                   READY STATUS RESTARTS AGE IP NODE                              ContainerID
nginx-7b9899ff5f-6lk87 1/1 Running 0 16h 10.48.4.3 gke-stc-default-pool-ba33922c-fsf3 7950529300866259659
nginx-7b9899ff5f-cwwrp 1/1 Running 0 16h 10.48.4.2 gke-stc-default-pool-ba33922c-fsf3 7950529300866259659
nginx-7b9899ff5f-x5jwv 1/1 Running 0 17m 10.48.6.3 gke-stc-default-pool-ba33922c-kzcx 8511204661082446539

В вашем случае скрипт должен выглядеть так:

#!/bin/bash
pods=$(kubectl get pods -n pks-system -owide | tr -s " " |cut -d " " -f 1-7 | tail -n +2)

nodes=$(kubectl get nodes -L node.sh -o=custom-columns=NODE:.metadata.name,BOSHID:.metadata.labels."bosh\.id" | tail -n +2)

echo -e "POD                   READY STATUS RESTARTS AGE IP NODE                              BOSHID"
echo "$pods" | while read LINE
  do
    nodeName=$(echo "$LINE" | cut -d ' ' -f 7)
    goutput=$(echo "$nodes" | grep "$nodeName" | tr -s ' '| cut -d ' ' -f 2)
    echo "$LINE $goutput"
  done
...