Get YAML for deployed Kubernetes objects

In case we have some objects on the kubernetes cluster that we want to modify but we don't have the original yaml, we can retrieve the object in yaml format from the cluster using kubectl

To do so we'll have to instruct kubectl to output the object in yaml format using the -o yaml option as follows:

apiVersion: v1
kind: Service
metadata:
  annotations:
    meta.helm.sh/release-name: pet2cattle
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2020-12-22T18:17:54Z"
  labels:
    app.kubernetes.io/instance: pet2cattle
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: pet2cattle
    app.kubernetes.io/version: "2.6"
    helm.sh/chart: pet2cattle-1
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app.kubernetes.io/instance: {}
          f:app.kubernetes.io/managed-by: {}
          f:app.kubernetes.io/name: {}
          f:app.kubernetes.io/version: {}
          f:helm.sh/chart: {}
      f:spec:
        f:ports:
          .: {}
          k:{"port":8000,"protocol":"TCP"}:
            .: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector:
          .: {}
          f:app.kubernetes.io/instance: {}
          f:app.kubernetes.io/name: {}
        f:sessionAffinity: {}
        f:type: {}
    manager: Go-http-client
    operation: Update
    time: "2020-12-29T18:47:41Z"
  name: pet2cattle
  namespace: kube-system
  resourceVersion: "5284239"
  selfLink: /api/v1/namespaces/kube-system/services/pet2cattle
  uid: de1068f2-4da7-4a91-882d-4f5861b5c3fd
spec:
  clusterIP: 10.43.151.25
  ports:
  - name: http
    port: 8000
    protocol: TCP
    targetPort: http
  selector:
    app.kubernetes.io/instance: pet2cattle
    app.kubernetes.io/name: pet2cattle
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

There are going to be fields that we are not interested in, for example all the managedFields, the creationTimestamp or the object's uid, so we can just remove them from the yaml file


Posted on 11/1/2021

Categories