I'm using k3s to test my k8s configurations. Sadly, imagePullSecrets
seems not to work properly.
I've tested the same configuration in minikube and it works fine.
Example:
I create the secret with:
kubectl create secret generic myreg --from-file=.dockerconfigjson=$HOME/.docker/config.json
And this is a daemonset example:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: foo
namespace: default
labels:
app: foo
spec:
selector:
matchLabels:
name: foo
template:
metadata:
labels:
name: foo
spec:
imagePullSecrets:
- name: myreg
containers:
- name: foo
image: whatever/foo:latest
The status stays as ErrImagePull
and running describe
over the pod it says:
Normal BackOff 2s kubelet, localhost Back-off pulling image "whatever/foo:latest"
Warning Failed 2s kubelet, localhost Error: ImagePullBackOff
Why Does it not work?
Finally I found the answer in the issue Document image preloading.
The imagePullSecrets are not implemented in k3s, but there is an undocumented feature, and you can pull the image manually to get it work.
To do it (as root):
# docker pull whatever/foo:latest
# docker save whatever/foo:latest -o /var/lib/rancher/k3s/agent/images/foo-latest.tgz
And then the image will be "downloaded" and installed into k3s.
Remember to restart k3s after downloading it.