linux - 如何合并两个 kubectl 命令的输出

标签 linux kubernetes kubectl

寻找一种方法来合并/加入来自两个不同 kubectl get 命令的输出。修改下面的输出以保护无辜者...

我已确认 kubectl get pod 的 json 输出不包含希望与 pod 输出一起显示的节点标签。

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 - 获取每个 pod 所在节点的命令

$ 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>

DESIRED RESULTS - 列出每个 pod 所在的节点和 boshid 的命令

$ 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

最佳答案

恐怕在 Kubernetes 中创建您想要的输出是不可能的。然而,它可以通过脚本(即 python 或 bash)完成

我不擅长编写脚本,但我能够在 Bash 中创建简短的脚本,它几乎可以显示所需的 View 。

脚本.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

关于linux - 如何合并两个 kubectl 命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538617/

相关文章:

c++ - SDL 中的 Fill_Rect

linux - 如何从文件中求和并以特定方式在 linux 中的另一个文件中移动?

amazon-web-services - 获取kubernetes集群的所有Pod列表(包括已删除)? (AWS EKS)

python-3.x - 如何让 celery worker 停止接收新任务(Kubernetes)

kubectl - 带有 kubectl : You must be logged in to the server (Unauthorized) 的 Microk8s Remote

kubernetes - 将时间戳附加到 kubernetes --watch-only 命令

linux - 当我在 Linux Fedora 中运行 JavaFx 应用程序时,我的应用程序崩溃了..!

linux - 脚本在 CentOS 上运行良好,但在 RHEL5 上运行不佳

docker - ubuntu 16.04 上的 kubernetes

kubernetes - kubectl --token=$TOKEN 没有使用 token 的权限运行