来自 运行 pod 的 kubernetes,通过 -o yaml 仅获取必需的元素

kubernetes from a running pod, get only required elements via -o yaml

一般在kubernetes中我们可以创建定义文件。对于非 运行 和 运行 pods、名称空间、部署等。如果我们为非 运行 和不存在的 pods 生成 yaml 文件,它会创建所需的定义文件.但是,如果我们必须从 运行 pod 获取定义文件,它也会生成很多实时环境的标签。

如何在我们从 运行 pod

生成 yaml 定义时仅获取必需的元素

在我们从 运行 pod

生成 pod yaml 文件后,有什么办法可以避免获取以下详细信息

例如,如果我们看到在下面的命令 运行 之后,它还会生成很多不需要的元素。

k get po nginxs14 -n=devs14 -o yaml>pod1.yaml

like:

metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"creationTimestamp":null,"labels":{"run":"nginx"},"name":"nginxs14","namespace":"devs14"},"
  creationTimestamp: "2021-04-24T11:09:56Z"
  labels:
    run: nginx
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
        f:labels:
          .: {}
          f:run: {}
      f:spec:
        f:containers:
          k:{"name":"nginx"}:
            .: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:name: {}
            f:ports:
              .: {}
              k:{"containerPort":9080,"protocol":"TCP"}:
                .: {}
                f:containerPort: {}
                f:protocol: {}
            f:readinessProbe:
              .: {}
              f:failureThreshold: {}
              f:httpGet:
                .: {}
                f:path: {}
                f:port: {}
                f:scheme: {}
              f:periodSeconds: {}
              f:successThreshold: {}
              f:timeoutSeconds: {}
            f:resources: {}
            f:terminationMessagePath: {}
f:terminationMessagePolicy: {}
        f:dnsPolicy: {}
        f:enableServiceLinks: {}
        f:restartPolicy: {}
        f:schedulerName: {}
        f:securityContext: {}
        f:terminationGracePeriodSeconds: {}
    manager: kubectl-client-side-apply
    operation: Update
    time: "2021-04-24T11:09:56Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          k:{"type":"ContainersReady"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"Initialized"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Ready"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
        f:containerStatuses: {}
        f:hostIP: {}
        f:phase: {}
        f:podIP: {}
        f:podIPs:
          .: {}

after running below command it also generates lot of not required elements

您描述的问题很大一部分是managedFields:。我同意这是非常冗长且最烦人的输出。

不过,这个问题现在已经解决了。如果您升级到 kubectl 版本 1.21+,则为 not shown as default。现在您需要添加 --show-managed-fields 来显示这些字段。