7

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
  • 71
  • 1
  • 1
  • 4
  • Can you share which version of Kubernetes you are using? Paste the output for `kubectl version`. Also, instead of a snippet, can you share your full Pod yaml code? – Jose Armesto Apr 17 '19 at 09:32
  • I just paste the output please check. The pod is controller-manager pod. I haven't edited the yaml code before. I failed to initialize federation control plane. Kubefed init says "waiting for the federation control plane to come up" but it never comes up, so I checked the pod status and found this error. – Xiang Li Apr 17 '19 at 09:56
  • So you are trying to use your custom version for the controller-manager? – Jose Armesto Apr 17 '19 at 10:17
  • @fiunchinho Yes, I follow the direction [Building Kubernetes cluster federation](https://github.com/kubernetes/federation), but can't pull the image. – Xiang Li Apr 17 '19 at 11:12
  • Not helpful, but it looks like cluster federation is deprecated https://kubernetes.io/docs/tasks/federation/set-up-cluster-federation-kubefed/ – Jose Armesto Apr 17 '19 at 14:04
  • Thank you all the same. I've followed this guide before and found kubefed init failed because the image given is not available. – Xiang Li Apr 18 '19 at 02:03
  • Added community wiki answer for future – Vit Apr 24 '19 at 10:06

3 Answers3

7

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.

9ilsdx 9rvj 0lo
  • 7,955
  • 10
  • 38
  • 77
  • As far as I know, It is possible to use patch syntax for this. For example: kubectl -n example patch deployment mydeployment -p '{"imagePullSecrets": [{"name": "registry"}]}', if deployment deletion is not the case. – DariyN Nov 20 '19 at 11:11
  • @DariyN and --force flag (I'm not sure if it's kubectl or oc extension), but generally, helm fail in that case... – 9ilsdx 9rvj 0lo Nov 20 '19 at 13:18
0

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
  • 11,247
  • 10
  • 69
  • 89
-2

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
  • 7,740
  • 15
  • 40
  • 3
    I fail to see the connection between that answer and the question.... – 9ilsdx 9rvj 0lo Nov 20 '19 at 10:43
  • "I just paste the output please check. The pod is controller-manager pod. I haven't edited the yaml code before. I failed to initialize federation control plane. Kubefed init says "waiting for the federation control plane to come up" but it never comes up, so I checked the pod status and found this error. – Xiang Li Apr 17 at 9:56 " – Vit Nov 20 '19 at 10:50