K
Q

How to fix 'map[] does not contain declared merge key: name' error when I edit and save the pod yaml?

April 17, 2019

I 'm trying to pull an image from a private registry. But the status of pod is 'ImagePullBackOff', which means I need to add a secret to the pod.

Events:
  Type     Reason   Age                  From                                          Message
  ----     ------   ----                 ----                                          -------
  Normal   Pulling  52m (x255 over 22h)  kubelet, cn-huhehaote.i-hp3fkfzlcf1u9cigq2h7  pulling image "xxx/fcp"
  Normal   BackOff  8m (x5597 over 22h)  kubelet, cn-huhehaote.i-hp3fkfzlcf1u9cigq2h7  Back-off pulling image "xxx/fcp"
  Warning  Failed   3m (x5618 over 22h)  kubelet, cn-huhehaote.i-hp3fkfzlcf1u9cigq2h7  Error: ImagePullBackOff

So I added the following code in pod yaml.

spec:
      containers:
      - name: private-reg-container
        image: <your-private-image>
      imagePullSecrets:
      - name: my-secret

Then I got

error: map: map[] does not contain declared merge key: name

The solution I searched out is to delete 'imagePullSecret', which doesn't work for me. I wonder how to fix the error. Can anyone help me?

kubectl version is

 kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.5", GitCommit:"753b2dbc622f5cc417845f0ff8a77f539a4213ea", GitTreeState:"clean", BuildDate:"2018-11-26T14:41:50Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.5", GitCommit:"753b2dbc622f5cc417845f0ff8a77f539a4213ea", GitTreeState:"clean", BuildDate:"2018-11-26T14:31:35Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
-- Xiang Li
kubernetes
kubernetes-pod
kubernetes-secrets

5 Answers

November 20, 2019

I've stumbled with the same problem (using helm) and I've found out, that it is not allowed to edit the

imagePullSecret
section in the deployment...

The solution was to delete the deployment and recreate it.

-- user5479362
Source: StackOverflow

January 11, 2023

Things may be different now in early 2023. I didn't have to delete the deployment (fortunately).

I had to delete the existing (empty) imagePullSecrets and then patch them. So:

# Delete existing imagePullSecret
kubectl patch deployment my-deploy \
  --type=json \
  -p='[{"op": "remove", "path": "/spec/template/spec/imagePullSecrets"}]'

# Now add the correct one
kubectl patch deployment my-deploy \
  --patch '{"spec": {"template": {"spec": {"imagePullSecrets": [{"name": "my-registry-creds"}]}}}}'
-- Freedom_Ben
Source: StackOverflow

April 24, 2019

As @fiunchinho mentioned in comments and as per Federation with Kubefed - cluster federation is deprecated.

Use of Federation v1 is strongly discouraged. Federation V1 never achieved GA status and is no longer under active development. Documentation is for historical purposes only.

The solution is to use Kubernetes Federation v2. For more details you can refer to Federation v2 user guide and Federation v development guide

-- Vit
Source: StackOverflow

August 30, 2024

Recently, I encountered the same issue in ArgoCD while deploying an

application.yaml
using Helm, after investigating several options, I discovered that two issues were related when the state of certain resources, such as Secret or ConfigMap, does not synchronize correctly and appears as 'Unknown', ArgoCD also generates the ComparisonError message:

Failed to compare desired state to live state: failed to calculate diff: map: map[] does not contain declared merge key: name

"Failed to compare desired state to live state: failed to calculate diff: map: map[] does not contain declared merge key: name"

To resolve both issues, I accessed the ArgoCD web interface and navigated to the affected application and I selected the ConfigMap in the 'Unknown' state and delete it using the 'Foreground Delete' (option) since this ensures that all dependent resources are completely removed before completing the operation.

ConfigMap in the 'Unknown' state deleted using using the 'Foreground Delete' (option)

After ArgoCD detected the deletion of the ConfigMap and automatically recreated it, synchronizing the repository and updating the state of the resources.

The 'Unknown' state of the resources was correctly updated, and also the 'ComparisonError' disappeared, allowing ArgoCD to correctly compare the desired state with the actual state.

-- Gonzalo Cugiani
Source: StackOverflow

January 9, 2025

I got this error when I modified a deployment remove a certain segment of configuration.

I had accidentally removed a mandatory section of the deployment along with the part I actually wanted to remove, giving this error.

Carefully double check the part you are erasing from the yaml, to see whether you are accidentally removing unnecessary parts.

-- Lahiru Chandima
Source: StackOverflow