kubectl 字段抽取


关于字段抽取,常用输出格式 jsonpathcustom-columnstemplate 来定制。 有关 jsonpath 的详细语法请参见官网template 需要熟悉 go 模板语法。

这里重点介绍一些常用的例子。熟悉每个例子,再相互组合基本可以实现自己想要的结果。

kubectl get pods -A --template '{{range .items}}{{if eq .spec.nodeName "k-node-01"}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}'
echo-header-6548cf976d-kq4vq
nginx-deployment-6595874d85-4f4dc
webapp-74f46758bc-9c6v7
$ kubectl get pods -o wide --field-selector spec.nodeName=k-node-01
NAME                                READY   STATUS    RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
echo-header-6548cf976d-kq4vq        1/1     Running   0          17d    10.244.102.167   k-node-01   <none>           <none>
nginx-deployment-6595874d85-4f4dc   1/1     Running   0          17d    10.244.102.185   k-node-01   <none>           <none>
webapp-74f46758bc-9c6v7             1/1     Running   0          137m   10.244.102.182   k-node-01   <none>           <none>
$ kubectl get pods -A -o wide | grep "k-node-01"
echo-header-6548cf976d-kq4vq        1/1     Running   0          17d   10.244.102.167   k-node-01   <none>           <none>
nginx-deployment-6595874d85-4f4dc   1/1     Running   0          17d   10.244.102.185   k-node-01   <none>           <none>
webapp-74f46758bc-9c6v7             1/1     Running   0          86m   10.244.102.182   k-node-01   <none>           <none>

按照某个字段排序

$ kubectl get pods -o wide --sort-by="{.spec.nodeName}"
NAME                                READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
echo-header-6548cf976d-kq4vq        1/1     Running   0          17d   10.244.102.167   k-node-01   <none>           <none>
nginx-deployment-6595874d85-4f4dc   1/1     Running   0          17d   10.244.102.185   k-node-01   <none>           <none>
webapp-74f46758bc-9c6v7             1/1     Running   0          89m   10.244.102.182   k-node-01   <none>           <none>

考虑多个字段的排序先后问题,先按第 7 列排序,再按第 1 列排序

$ kubectl get pods  -o wide --no-headers| sort -k7b -k1b
echo-header-6548cf976d-kq4vq        1/1   Running   0     17d   10.244.102.167   k-node-01   <none>   <none>
nginx-deployment-6595874d85-4f4dc   1/1   Running   0     17d   10.244.102.185   k-node-01   <none>   <none>
webapp-74f46758bc-9c6v7             1/1   Running   0     92m   10.244.102.182   k-node-01   <none>   <none>

注意:以上排序还有另外 2 中写法,分别为 sort -k7d,1sort -k7.1d,如出现报错,增加 --debug 进行调试。
$ get deployment -n kube-system  -o custom-columns=Deployment:.metadata.name,NS:.metadata.namespace,nodeSelector:.spec.template.spec.nodeSelector
Deployment         NS            nodeSelector
cloud-controller   kube-system   <none>
coredns            kube-system   map[kubernetes.io/os:linux]
n9e-listener       kube-system   map[k8s-default:true]
$ kubectl  get deployment -n tang -o custom-columns=Deployment:metadata.name,Network:spec.template.spec.hostNetwork
Deployment   Network
billserver   <none>
h323server   true
$ kubectl get pod -n tang  -o custom-columns=PODNAME:.metadata.name,CONTAINER:.spec.containers[*].name
PODNAME                                CONTAINER
echo-6548cf976d-kq4vq                  echo
web-646dfbb667-thf5p                   web,filebeat
$ kubectl get events -A --field-selector=reason=PodOOMKilling
NAMESPACE   LAST SEEN   TYPE      REASON          OBJECT                                 MESSAGE
team        19m         Warning   PodOOMKilling   pod/webapp-74f46758bc-9c6v7            pod was OOM killed. node:k-node-01...
$ kubectl get events -A --field-selector=type=Warning
NAMESPACE     LAST SEEN   TYPE      REASON          OBJECT                                          MESSAGE
kube-system   26m         Warning   NodeNotReady    pod/ack-node-problem-detector-daemonset-945f5   Node is not ready
kube-system   26m         Warning   NodeNotReady    pod/csi-plugin-qkbsb                            Node is not ready
kube-system   26m         Warning   NodeNotReady    pod/filebeat-cw8hg                              Node is not ready
kube-system   26m         Warning   NodeNotReady    pod/kube-proxy-worker-nzhf2                     Node is not ready
$ kubectl get events -A --field-selector=involvedObject.kind=Pod --sort-by=.metadata.creationTimestamp
NAMESPACE     LAST SEEN   TYPE      REASON                 OBJECT                                          MESSAGE
tang          29m         Warning   NodeNotReady           pod/tangtask-worker-5fc558cd9d-t7lwq            Node is not ready
kube-system   29m         Warning   NodeNotReady           pod/csi-plugin-qkbsb                            Node is not ready
kube-system   29m         Warning   NodeNotReady           pod/filebeat-cw8hg                              Node is not ready
kube-system   29m         Warning   NodeNotReady           pod/kube-proxy-worker-nzhf2                     Node is not ready
team          26m         Normal    Started                pod/teamtask-worker-5fc558cd9d-t7lwq            Started container tangtask-worker
team          26m         Normal    Created                pod/teamtask-worker-5fc558cd9d-t7lwq            Created container tangtask-worker
kubectl get all -n default
NAME                                    READY   STATUS    RESTARTS   AGE
pod/echo-header-6548cf976d-kq4vq        1/1     Running   0          17d
pod/nginx-deployment-6595874d85-4f4dc   1/1     Running   0          17d
pod/webapp-74f46758bc-9c6v7             1/1     Running   0          147m

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/echo-header   ClusterIP   10.96.209.49    <none>        3000/TCP       434d
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        495d
service/nginx         ClusterIP   10.96.7.49      <none>        80/TCP         17d
service/webapp-svc    NodePort    10.96.114.205   <none>        80:31628/TCP   147m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-header        1/1     1            1           17d
deployment.apps/nginx-deployment   1/1     1            1           17d
deployment.apps/webapp             1/1     1            1           147m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-header-6548cf976d        1         1         1       17d
replicaset.apps/nginx-deployment-6595874d85   1         1         1       17d
replicaset.apps/webapp-74f46758bc             1         1         1       147m

NAME                                          REFERENCE            TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/mychart   Deployment/mychart   1m/500m   1         10        1          312d
$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found  -n default
NAME                           DATA   AGE
configmap/cri-config           1      116d
configmap/event-listener       7      434d
configmap/istio-ca-root-cert   1      495d
configmap/kube-root-ca.crt     1      495d
NAME                    ENDPOINTS                                                     AGE
endpoints/echo-header   10.244.102.167:8080                                           434d
endpoints/kubernetes    192.168.32.161:6443,192.168.32.162:6443,192.168.32.163:6443   495d
endpoints/nginx         10.244.102.167:8080                                           17d
endpoints/webapp-svc    10.244.102.182:80                                             150m
LAST SEEN   TYPE      REASON           OBJECT                            MESSAGE
2m10s       Warning   FailedGetScale   horizontalpodautoscaler/mychart   deployments/scale.apps "mychart" not found
NAME                                    READY   STATUS    RESTARTS   AGE
pod/echo-header-6548cf976d-kq4vq        1/1     Running   0          17d
pod/nginx-deployment-6595874d85-4f4dc   1/1     Running   0          17d
pod/webapp-74f46758bc-9c6v7             1/1     Running   0          150m
NAME                                      TYPE                                  DATA   AGE
secret/bookinfo-details-token-lf7hd       kubernetes.io/service-account-token   3      329d
secret/bookinfo-productpage-token-fbd5l   kubernetes.io/service-account-token   3      329d
secret/bookinfo-ratings-token-sx7mm       kubernetes.io/service-account-token   3      329d
secret/bookinfo-reviews-token-4tl5d       kubernetes.io/service-account-token   3      329d
secret/default-token-hxhl6                kubernetes.io/service-account-token   3      495d
secret/sh.helm.release.v1.calico.v1       helm.sh/release.v1                    1      495d
NAME                                  SECRETS   AGE
serviceaccount/bookinfo-details       1         495d
serviceaccount/bookinfo-productpage   1         495d
serviceaccount/bookinfo-ratings       1         495d
serviceaccount/bookinfo-reviews       1         495d
serviceaccount/default                1         495d
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/echo-header   ClusterIP   10.96.209.49    <none>        3000/TCP       434d
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        495d
service/nginx         ClusterIP   10.96.7.49      <none>        80/TCP         17d
service/webapp-svc    NodePort    10.96.114.205   <none>        80:31628/TCP   150m
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-header        1/1     1            1           17d
deployment.apps/nginx-deployment   1/1     1            1           17d
deployment.apps/webapp             1/1     1            1           151m
NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-header-6548cf976d        1         1         1       17d
replicaset.apps/nginx-deployment-6595874d85   1         1         1       17d
replicaset.apps/webapp-74f46758bc             1         1         1       151m
NAME                                          REFERENCE            TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/mychart   Deployment/mychart   1m/500m   1         10        1          312d
NAME                                           REFERENCE                TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
custompodautoscaler.crd.cloud.io/echo-header   Deployment/echo-header   0/200m    1         10        2          432d
NAME                                               ADDRESSTYPE   PORTS   ENDPOINTS                                      AGE
endpointslice.discovery.k8s.io/echo-header-ls2qc   IPv4          8080    10.244.102.167                                 434d
endpointslice.discovery.k8s.io/kubernetes          IPv4          6443    192.168.32.161,192.168.32.162,192.168.32.163   495d
endpointslice.discovery.k8s.io/nginx-zhjdz         IPv4          8080    10.244.102.167                                 17d
endpointslice.discovery.k8s.io/webapp-svc-d5rbb    IPv4          80      10.244.102.182                                 150m
LAST SEEN   TYPE      REASON           OBJECT                            MESSAGE
2m13s       Warning   FailedGetScale   horizontalpodautoscaler/mychart   deployments/scale.apps "mychart" not found
NAME                                CLASS   HOSTS          ADDRESS          PORTS   AGE
ingress.networking.k8s.io/rewrite   nginx   www.test.com   192.168.32.164   80      17d
$ kubectl api-resources --verbs=list --api-group=apps  --namespaced -o name  -n default | xargs -n 1 kubectl get --show-kind --ignore-not-found  -n default
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-header        1/1     1            1           17d
deployment.apps/nginx-deployment   1/1     1            1           17d
deployment.apps/webapp             1/1     1            1           154m
NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-header-6548cf976d        1         1         1       17d
replicaset.apps/nginx-deployment-6595874d85   1         1         1       17d
replicaset.apps/webapp-74f46758bc             1         1         1       154m
$ kubectl get pod --show-labels
NAME                                READY   STATUS    RESTARTS   AGE    LABELS
echo-header-6548cf976d-kq4vq        1/1     Running   0          17d    k8s-app=echo-header,pod-template-hash=6548cf976d
nginx-deployment-6595874d85-4f4dc   1/1     Running   0          17d    app=nginx,pod-template-hash=6595874d85
webapp-74f46758bc-9c6v7             1/1     Running   0          160m   app=webapp,pod-template-hash=74f46758bc
$ kubectl get node  -L kubernetes.io/arch -L beta.kubernetes.io/os
NAME          STATUS   ROLES           AGE    VERSION   ARCH    OS
k-master-01   Ready    control-plane   495d   v1.24.0   amd64   linux
k-master-02   Ready    control-plane   495d   v1.24.0   amd64   linux
k-master-03   Ready    control-plane   495d   v1.24.0   amd64   linux
k-node-01     Ready    <none>          495d   v1.24.0   amd64   linux
k-node-02     Ready    <none>          495d   v1.24.0   amd64   linux
k-node-03     Ready    <none>          495d   v1.24.0   amd64   linux