Welcome to the Linux Foundation Forum!

Ex 5.4 I cannot edit deployment


Editing deployment using
kubectl edit deployment try1
and exiting with :wq
results in error below:

error: deployments.apps "try1" is invalid
A copy of your changes has been stored to "/tmp/kubectl-edit-q5fmc.yaml"
error: Edit cancelled, no valid changes were saved.

What should I check?



  • suser
    suser Posts: 67

    My deploy try1 seems to be valid to me:

    kubectl describe deploy try1
    Name: try1
    Namespace: default
    CreationTimestamp: Thu, 04 Feb 2021 01:08:27 +0000
    Labels: app=try1
    Annotations: deployment.kubernetes.io/revision: 1
    Selector: app=try1
    Replicas: 6 desired | 6 updated | 6 total | 6 available | 0 unavailable
    StrategyType: RollingUpdate
    MinReadySeconds: 0
    RollingUpdateStrategy: 25% max unavailable, 25% max surge
    Pod Template:
    Labels: app=try1
    Host Port:
    Readiness: exec [ls /etc/cars] delay=0s timeout=1s period=5s #success=1 #failure=3
    Environment Variables from:
    colors ConfigMap Optional: false
    ilike: Optional: false
    /etc/cars from car-vol (rw)
    /opt from nfs-vol (rw)
    Image: k8s.gcr.io/goproxy:0.1
    Port: 8080/TCP
    Host Port: 0/TCP
    Liveness: tcp-socket :8080 delay=15s timeout=1s period=20s #success=1 #failure=3
    Readiness: tcp-socket :8080 delay=5s timeout=1s period=10s #success=1 #failure=3
    Type: ConfigMap (a volume populated by a ConfigMap)
    Name: fast-car
    Optional: false
    Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName: pvc-one
    ReadOnly: false
    Type Status Reason
    ---- ------ ------
    Available True MinimumReplicasAvailable
    Progressing True NewReplicaSetAvailable
    NewReplicaSet: try1-5b984bfb64 (6/6 replicas created)
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal ScalingReplicaSet 21m deployment-controller Scaled up replica set try1-5b984bfb64 to 6

  • suser
    suser Posts: 67

    Vim error on save try:

    deployments.apps "try1" was not valid:

    * : Invalid value: "The edited file failed validation": ValidationError(Deployment.spec.template.spec.containers[0].envFrom[0].configMapRef): unknown field "image" in io.k8s.api.core.v1.ConfigMapEnvSource

    which is very weird because the yaml file is correct:

    ... spec: containers: - image: name: simpleapp volumeMounts: - mountPath: /etc/cars name: car-vol - name: nfs-vol mountPath: /opt env: - name: ilike valueFrom: configMapKeyRef: name: colors key: favorite envFrom: - configMapRef: name: colors imagePullPolicy: Always readinessProbe: ...

    However, during live edit the deployment looks messed up on vim, exactly like the error says:

    ... spec: containers: - env: - name: ilike valueFrom: configMapKeyRef: key: favorite name: colors envFrom: - configMapRef: name: colors image: imagePullPolicy: Always name: simpleapp readinessProbe: ...

    Now what?

    My env: Ubuntu 18.4, k8s 1.19

  • suser
    suser Posts: 67

    I attached my simpleapp.yaml here if anyone has time for this to take a look, I just cannot figure out what is wrong there in my yaml file. All looks ok for me plus I tried to move blocks around for awhile but "kubectl edit deploy try1" command still messes everything badly on vim.

    Thank you in advance!


  • Hi @suser,

    What you may be experiencing is a strange behavior of vim when invoked by kubectl edit. Occasionally, after making the desired changes in the yaml file, the lines that were just edited tend to lose their original indentation with the line content being shifted inward (to the right), subsequently triggering an unknown field error as reported above. Double check the yaml once more before :wq to ensure that all lines are indented as expected.

    If all else fails, you can use the kubectl set image command instead for the image update step (rolling update).


  • suser
    suser Posts: 67

    Thanks a lot Chris, I will try this.

  • suser
    suser Posts: 67

    I followed directions at https://stackoverflow.com/questions/26962999/wrong-indentation-when-editing-yaml-in-vim and I was able to edit the deployment after setting vim to :set filetype=ansible;
    This action dropped the editor sintax coloring but I completed the task.



Upcoming Training