一、前言
Docker镜像是构建应用程序的基础。然而,许多组织和开发团队希望保留他们的Docker镜像在私有仓库中,并从中拉取镜像,而不是从公共Docker Hub中下载。这样做的原因有很多,包括:
1. 安全性:私有仓库可以提供更高的安全性,因为它们可以控制谁可以访问和下载镜像。这可以防止未经授权的访问和数据泄露。
2. 可靠性:私有仓库可以提供更可靠的镜像下载速度和更稳定的服务。此外,私有仓库还可以缓存常用的镜像,以便更快地访问它们。
3. 管理性:私有仓库可以帮助组织更好地管理他们的Docker镜像资源。它们可以轻松地组织和管理自己的镜像,而无需依赖第三方服务。
因此,从私有仓库中拉取镜像已经成为了许多企业和开发团队的最佳实践。在本篇博客中,我们将探讨如何在Kubernetes集群中成功地从私有仓库中拉取镜像,以便更好地管理和部署应用程序。
二、配置
进行配置前,确保已经搭建了k8s,harbor,docker,并需要有harbor的账户、密码、服务器信息。
①配置docker的daemon.json:
daemon.json路径一般在:/etc/docker/daemon.json
{
"insecure-registries": ["xxxxxxx:xx"],
"exec-opts": ["native.cgroupdriver=systemd"],
"bip":"172.12.0.1/24",
"registry-mirrors": ["http://docker-registry-mirror.kodekloud.com"],
"dns" : ["114.114.114.114","8.8.8.8"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
其中insecure-registries是最重要的,即harbor的地址和端口信息
②登录docker镜像仓库
使用命令:
docker login -u userName -p password xxx.xxx.xxx.xx:xx
登录完成会显示config.json的路径,比如我这里显示的路径为: /home/halos/.docker/config.json。
查看文件显示:
③创建secret
使用命令:
kubectl create secret generic regcred --from-file=.dockerconfigjson=</home/halos/.docker/config.json> --type=kubernetes.io/dockerconfigjson
再使用base命令生成编码:
base64 /home/halos/.docker/config.json
创建harbor-secret.yaml文件:
apiVersion:
v1
data:
.dockerconfigjson:
ewo3dfdsfQkJImF1dGgfgdfka0F5TURJeCIKCQl9Cgl9Cn0=
kind:
Secret
metadata:
name:
harbor-secret
namespace:
default
type:
kubernetes.io/dockerconfigjson
其中dockerconfigjson是base命令生成的编码,我这里是乱写的,具体的请使用自己机器生成的base编码。
最后使用命令部署:
kubectl apply -f harbor-secret.yaml
现在k8s就可以进行镜像的拉取了。
三、问题总结
①docker login无法登录
docker login无法登录的问题就是daemon.json没有配置,按照二中的①进行配置即可
②k8s无法拉取镜像
该问题就是写此文的原因,pod会显示状态:ImagePullBackOff,一般会在pod中报错如下: