背景说明
通过kubectl进行获取资源对象例如pod、pv时可能需要自定义输出字段,比如默认情况下
student@master01:~$ kubectl get podNAME READY STATUS RESTARTS AGE11-factor-app 1/1 Running 6 (23d ago) 72dfoo 1/1 Running 6 (23d ago) 72dfront-end-94f5bf8fb-hxg4p 1/1 Running 6 (23d ago) 72dpodname1 1/1 Running 1 (112m ago) 113mpodname2 1/1 Running 1 (107m ago) 112mpresentation-5649f596b9-jxfnn 1/1 Running 6 (23d ago) 72dstudent@master01:~$
解决方案
官方文档
https://kubernetes.io/zh/docs/reference/kubectl/jsonpath/
中间过程
student@master01:~$ kubectl get pod -o yamlapiVersion: v1items:- apiVersion: v1kind: Podmetadata:creationTimestamp: "2022-02-23T16:55:04Z"name: 11-factor-appnamespace: defaultresourceVersion: "57635"uid: 16578c61-8ab6-4ba3-9157-b76aeef403bespec:containers:- args:- /bin/sh- -c- |i=0; while true; doecho "$(date) INFO $i" >> /var/log/11-factor-app.log;i=$((i+1));sleep 1;doneimage: busyboximagePullPolicy: IfNotPresentname: countresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-kcjc2readOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: node02preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-kcjc2projected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespacestatus:conditions:- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:55:04Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:43Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:43Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:55:04Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://da36ee8fe4f43e96232f6686a95b27bd8433a6c521addc03c168cb51efca3e82image: busybox:latestimageID: docker-pullable://busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678lastState:terminated:containerID: docker://07e5061731c3e797189812bd7625499422269ec5bbf192e3e50fa90548d49fefexitCode: 137finishedAt: "2022-04-14T06:20:41Z"reason: ErrorstartedAt: "2022-04-14T06:19:50Z"name: countready: truerestartCount: 6started: truestate:running:startedAt: "2022-05-07T06:29:41Z"hostIP: 11.0.1.113phase: RunningpodIP: 10.244.2.34podIPs:- ip: 10.244.2.34qosClass: BestEffortstartTime: "2022-02-23T16:55:04Z"- apiVersion: v1kind: Podmetadata:creationTimestamp: "2022-02-23T16:54:17Z"labels:name: fooname: foonamespace: defaultresourceVersion: "57658"uid: cae12fa2-3c47-48d7-b982-a451f956255cspec:containers:- image: nginximagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-l969creadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: node01preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-l969cprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespacestatus:conditions:- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:54:17Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:47Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:47Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:54:17Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://9302d2be6a478977c3f63332084161eb3ac97c471bd978b84c8e9a973444e377image: nginx:latestimageID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31lastState:terminated:containerID: docker://a83d66b5c42e9107f59439bc6d12a0e9d3235938a9464593f1642b8d3df17e4cexitCode: 0finishedAt: "2022-04-14T06:20:31Z"reason: CompletedstartedAt: "2022-04-14T06:19:50Z"name: nginxready: truerestartCount: 6started: truestate:running:startedAt: "2022-05-07T06:29:44Z"hostIP: 11.0.1.112phase: RunningpodIP: 10.244.1.28podIPs:- ip: 10.244.1.28qosClass: BestEffortstartTime: "2022-02-23T16:54:17Z"- apiVersion: v1kind: Podmetadata:creationTimestamp: "2022-02-23T16:48:28Z"generateName: front-end-94f5bf8fb-labels:app: front-endpod-template-hash: 94f5bf8fbname: front-end-94f5bf8fb-hxg4pnamespace: defaultownerReferences:- apiVersion: apps/v1blockOwnerDeletion: truecontroller: truekind: ReplicaSetname: front-end-94f5bf8fbuid: fe59f286-24df-4169-8842-89b401d78a40resourceVersion: "57611"uid: fa6c8aa9-b010-49a7-9cb9-fa41a3c716c0spec:containers:- image: vicuu/nginx:helloimagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-xww5dreadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: node02preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-xww5dprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespacestatus:conditions:- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:48:28Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:41Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:41Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:48:28Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://3fc52fe7042dc1260318b9d5dd9dd7cab336342b42715495470ed9b6666005c9image: vicuu/nginx:helloimageID: docker-pullable://vicuu/nginx@sha256:6ab7771fa243c2773b5f2344f00f70a833a45f4bdfb0b26e93f69b5eedfb51fblastState:terminated:containerID: docker://b6b3a89101209f6094b784855a846efb6dbcce978bb5bddc1a579522e8998ac1exitCode: 0finishedAt: "2022-04-14T06:20:30Z"reason: CompletedstartedAt: "2022-04-14T06:19:50Z"name: nginxready: truerestartCount: 6started: truestate:running:startedAt: "2022-05-07T06:29:40Z"hostIP: 11.0.1.113phase: RunningpodIP: 10.244.2.32podIPs:- ip: 10.244.2.32qosClass: BestEffortstartTime: "2022-02-23T16:48:28Z"- apiVersion: v1kind: Podmetadata:creationTimestamp: "2022-05-07T07:12:37Z"labels:run: podname1name: podname1namespace: defaultresourceVersion: "61725"uid: 3db68ff6-72a7-46d9-9992-0fe946865619spec:containers:- image: nginximagePullPolicy: Alwaysname: podname1resources: {}stdin: truestdinOnce: trueterminationMessagePath: /dev/termination-logterminationMessagePolicy: Filetty: truevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-q9g2nreadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: node01preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-q9g2nprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespacestatus:conditions:- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:12:37Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:13:24Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:13:24Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:12:37Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://ed770b4fa71794e842d07622b51cdd68572904cb2df07da3e49e3ef666d6594cimage: nginx:latestimageID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31lastState:terminated:containerID: docker://1ed55f27f239effc3668797023f45b35d1e720123960aa93567f4521ef1924fdexitCode: 0finishedAt: "2022-05-07T07:13:06Z"reason: CompletedstartedAt: "2022-05-07T07:12:54Z"name: podname1ready: truerestartCount: 1started: truestate:running:startedAt: "2022-05-07T07:13:23Z"hostIP: 11.0.1.112phase: RunningpodIP: 10.244.1.32podIPs:- ip: 10.244.1.32qosClass: BestEffortstartTime: "2022-05-07T07:12:37Z"- apiVersion: v1kind: Podmetadata:creationTimestamp: "2022-05-07T07:13:39Z"labels:run: podname2name: podname2namespace: defaultresourceVersion: "62209"uid: a919402b-c6f7-4c2b-b441-7254748beb4fspec:containers:- args:- /bin/bashimage: nginximagePullPolicy: Alwaysname: podname2resources: {}stdin: truestdinOnce: trueterminationMessagePath: /dev/termination-logterminationMessagePolicy: Filetty: truevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-j4prkreadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: node02preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-j4prkprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespacestatus:conditions:- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:13:39Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:18:29Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:18:29Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-05-07T07:13:39Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://eaf617143c82156404e59a986d626805ef6befe65aa5f949ecbec720f5a20135image: nginx:latestimageID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31lastState:terminated:containerID: docker://429f55451268195da3bf7bda2b1b060bafdcc8a5f19892b96cb5748908e0f80fexitCode: 0finishedAt: "2022-05-07T07:18:13Z"reason: CompletedstartedAt: "2022-05-07T07:13:56Z"name: podname2ready: truerestartCount: 1started: truestate:running:startedAt: "2022-05-07T07:18:29Z"hostIP: 11.0.1.113phase: RunningpodIP: 10.244.2.37podIPs:- ip: 10.244.2.37qosClass: BestEffortstartTime: "2022-05-07T07:13:39Z"- apiVersion: v1kind: Podmetadata:creationTimestamp: "2022-02-23T16:49:42Z"generateName: presentation-5649f596b9-labels:app: presentationpod-template-hash: 5649f596b9name: presentation-5649f596b9-jxfnnnamespace: defaultownerReferences:- apiVersion: apps/v1blockOwnerDeletion: truecontroller: truekind: ReplicaSetname: presentation-5649f596b9uid: 627e4117-ed25-4003-8832-b1c00e1b250cresourceVersion: "57631"uid: 7aae8380-c712-4e75-8909-2a2593c25b2cspec:containers:- image: vicuu/nginx:helloimagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-ml9qnreadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: node02preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-ml9qnprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespacestatus:conditions:- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:49:42Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:43Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-05-07T06:29:43Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-02-23T16:49:42Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://f7d274a74bb94eef3c34f27e2b1db9519438697b2c99d4d06419dc7c3a1583d0image: vicuu/nginx:helloimageID: docker-pullable://vicuu/nginx@sha256:6ab7771fa243c2773b5f2344f00f70a833a45f4bdfb0b26e93f69b5eedfb51fblastState:terminated:containerID: docker://f65473c41ca83a04f22429c132a09c8ce5ecf4881a250ae93ab19375cbdd3621exitCode: 0finishedAt: "2022-04-14T06:20:30Z"reason: CompletedstartedAt: "2022-04-14T06:19:48Z"name: nginxready: truerestartCount: 6started: truestate:running:startedAt: "2022-05-07T06:29:41Z"hostIP: 11.0.1.113phase: RunningpodIP: 10.244.2.33podIPs:- ip: 10.244.2.33qosClass: BestEffortstartTime: "2022-02-23T16:49:42Z"kind: Listmetadata:resourceVersion: ""selfLink: ""student@master01:~$
固定字段
student@master01:~$ kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'11-factor-app 2022-02-23T16:55:04Zfoo 2022-02-23T16:54:17Zfront-end-94f5bf8fb-hxg4p 2022-02-23T16:48:28Zpodname1 2022-05-07T07:12:37Zpodname2 2022-05-07T07:13:39Zpresentation-5649f596b9-jxfnn 2022-02-23T16:49:42Zstudent@master01:~$
