寻找一种方法来合并/加入来自两个不同 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/