Kubernetes 如何从对象中提取Kubernestes PODS mac地址
我正在尝试使用json过滤器中的kubectl get po或jq提取metadata.annotations下的mac或ips地址。其他对象很容易操作以获取这些值 kubectl获取po-o json-n multus | jq-r.items 在注释下,有重复的CNI信息,但没有问题。我喜欢使用jq提取那些MAC地址。这件事似乎很棘手Kubernetes 如何从对象中提取Kubernestes PODS mac地址,kubernetes,annotations,jq,Kubernetes,Annotations,Jq,我正在尝试使用json过滤器中的kubectl get po或jq提取metadata.annotations下的mac或ips地址。其他对象很容易操作以获取这些值 kubectl获取po-o json-n multus | jq-r.items 在注释下,有重复的CNI信息,但没有问题。我喜欢使用jq提取那些MAC地址。这件事似乎很棘手 [ { "apiVersion": "v1", "kind": "Pod", "metadata": { "annot
[
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"annotations": {
"k8s.v1.cni.cncf.io/network-status": "[{\n \"name\": \"eps-cni\",\n \"ips\": [\n \"172.31.83.216\"\n ],\n \"default\": true,\n \"dns\": {}\n},{\n \"name\": \"ipvlan1-busybox1\",\n \"interface\": \"net1\",\n \"ips\": [\n \"172.31.230.70\"\n ],\n \"mac\": \"0a:2d:40:c6:f8:ea\",\n \"dns\": {}\n},{\n \"name\": \"ipvlan2-busybox1\",\n \"interface\": \"net2\",\n \"ips\": [\n \"172.31.232.70\"\n ],\n \"mac\": \"0a:52:8a:62:5d:f4\",\n \"dns\": {}\n}]",
"k8s.v1.cni.cncf.io/networks": "ipvlan1-busybox1, ipvlan2-busybox1",
"k8s.v1.cni.cncf.io/networks-status": "[{\n \"name\": \"eps-cni\",\n \"ips\": [\n \"172.31.83.216\"\n ],\n \"default\": true,\n \"dns\": {}\n},{\n \"name\": \"ipvlan1-busybox1\",\n \"interface\": \"net1\",\n \"ips\": [\n \"172.31.230.70\"\n ],\n \"mac\": \"0a:2d:40:c6:f8:ea\",\n \"dns\": {}\n},{\n \"name\": \"ipvlan2-busybox1\",\n \"interface\": \"net2\",\n \"ips\": [\n \"172.31.232.70\"\n ],\n \"mac\": \"0a:52:8a:62:5d:f4\",\n \"dns\": {}\n}]",
"kubernetes.io/psp": "eps.privileged"
},
"creationTimestamp": "2020-05-24T17:09:10Z",
"generateName": "busybox1-f476958bd-",
"labels": {
"app": "busybox",
"pod-template-hash": "f476958bd"
},
"name": "busybox1-f476958bd-hds4w",
"namespace": "multus",
"ownerReferences": [
{
"apiVersion": "apps/v1",
"blockOwnerDeletion": true,
"controller": true,
"kind": "ReplicaSet",
"name": "busybox1-f476958bd",
"uid": "5daf9b52-e1b3-4df7-b5a1-028b48e7fcc0"
}
],
"resourceVersion": "965176",
"selfLink": "/api/v1/namespaces/multus/pods/busybox1-f476958bd-hds4w",
"uid": "0051b85d-9774-4f89-8658-f34065222bf0"
},
对于基本jq
我可以将get pod切换为yaml格式,然后使用普通的grep cmd
kubectl get po -o yaml -n multus|egrep 'mac'|sort -u
"mac": "0a:2d:40:c6:f8:ea",
"mac": "0a:52:8a:62:5d:f4",
感谢从原始JSON开始,使用jq的-r命令行选项,下面的jq过滤器生成如下所示的输出:
.[]
| .metadata.annotations[]
| (fromjson? // empty)
| .[]
| select(has("mac"))
| {mac}
输出:
{"mac":"0a:2d:40:c6:f8:ea"}
{"mac":"0a:52:8a:62:5d:f4"}
{"mac":"0a:2d:40:c6:f8:ea"}
{"mac":"0a:52:8a:62:5d:f4"}
请尝试下面的命令,并应获得预期的输出
cat abc.json | jq -r '.metadata.annotations."k8s.v1.cni.cncf.io/networks-status" | fromjson | .[].mac '
其中abc.json是您的子文件。您需要在问题中提供答案。我不认为任何人会读到这些,请抛开不必要的细节,提出一个简单、清晰、实用、可回答的问题。谢谢
cat abc.json | jq -r '.metadata.annotations."k8s.v1.cni.cncf.io/networks-status" | fromjson | .[].mac '