报错
kubectl describe pod run-nfs-client-provisioner
crictl pull 172.24.4.59/library/spark_lijia:3.5.1
- 报错问题:“k8s拉取不了私有镜像” 可能是由于以下几个原因造成的:
- 认证问题:私有镜像库可能需要用户名和密码才能拉取镜像。
- 网络问题:Kubernetes集群节点可能无法访问私有镜像库的网络。
- 镜像地址错误:镜像地址可能输入有误。
- containerd无法通过/etc/docker/daemon.json指定私有镜像
我出现了两个问题
我的解决方法:
问题一:认证问题
为Pod提供认证信息。创建一个ImagePullSecret,并将其与Pod关联。
kubectl create secret docker-registry image-pull-secret \
--docker-server=xxxxxxx \
--docker-username='xxxxxx' \
--docker-password='xxxxxx'
最后在部署应用的添加imagePullSecrets
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
template:
spec:
containers:
- name: test
image: test:latest
imagePullSecrets:
- name: image-pull-secret
问题二:无法通过/etc/docker/daemon.json指定私有镜像,没台服务器都需要改
containerd不支持拉取私有镜像
我们都知道containerd来自于docker,后被docker捐献给了云原生计算基金会(Cloud Native Computing Foundation,CNCF)。在RHEL上通过YUM部署containerd的过程中,表现为需要加载docker-ce.repo镜像源。通过在线方式安装的containerd的配置文件只有一个有效配置项:disabled_plugins = [“cri”],可以通过下面的命令生成containerd的默认配置文件,然后在此基础上自行修改。
containerd config default > /etc/containerd/config.toml #生成containerd的默认配置文件
vi /etc/containerd/config.toml #修改配置新增一下配置
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."172.24.4.59".auth]
username = "admin"
password = "123456"
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."172.24.4.59"]
endpoint = ["http://172.24.4.59"]
修改前
修改后
systemctl restart containerd #重启服务
containerd config dump 查看配置是否加载成功
测试
crictl pull 172.24.4.59/library/spark_lijia:3.5.1
kubectl describe pod run-nfs-client-provisioner