kubectl 字段抽取
关于字段抽取,常用输出格式 jsonpath
、custom-columns
、 template
来定制。
有关 jsonpath
的详细语法请参见官网,template
需要熟悉 go 模板语法。
这里重点介绍一些常用的例子。熟悉每个例子,再相互组合基本可以实现自己想要的结果。
查找 Node 上所有 Pod
技巧 1:template
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
技巧 2:--field-selector
$ 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>
技巧 3:grep
$ 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>
结果排序
技巧 1:--sort-by
按照某个字段排序
$ 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>
技巧 2:sort
考虑多个字段的排序先后问题,先按第 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>
sort -k7d,1
或 sort -k7.1d
,如出现报错,增加 --debug
进行调试。
自定义字段 custom-columns
查看 deployment 的 nodeSelector
字段
$ 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]
查看 deployment 是否开启了 hostNetwork
$ kubectl get deployment -n tang -o custom-columns=Deployment:metadata.name,Network:spec.template.spec.hostNetwork Deployment Network billserver <none> h323server true
查看 pod 里面的 container
$ 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
事件过滤
按 Reason
过滤
$ 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...
按 Type
过滤
$ 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
按 Object
过滤
$ 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