Kubernetes在自动pull私有镜像时,经常出现问题,导致ImagePullBackOff。即使在节点上使用docker login命令登录私有仓库,还是会失败,因此,kubernates pull私有镜像时,不会依赖docker的相关配置。
那么,该问题怎么解决???
解决方案一:
k8s提供了一下命令由于解决这个问题:
kubectl create secret docker-registry my-secret \
--docker-server=DOCKER_REGISTRY_SERVER \
--docker-username=DOCKER_USER \
--docker-password=DOCKER_PASSWORD \
--docker-email=DOCKER_EMAIL
其中:
1. my-secret为自定义,标识作用
2. server、username、password三个参数必须,email可选
3、其中可添加其他参数,如指定 --namespace参数,如不指定,则添加到default命名空间
那么配置好账户密码后,怎么使用呢?
在Deployment yml文件中配置imagePullSecrets即可
...
spec:
imagePullSecrets:
- name: my-secret
containers:
- name: eureka
image: registry.cn-hangzhou.aliyuncs.com/cloud/eureka:v1.2
...
解决方案二:
docker login命令执行后,会产生/root/.docker/config.json文件,内容为:
{
"auths": {
"registry.cn-hangzhou.aliyuncs.com": {
"auth": "emNmZmFeY29uOmZfbGNvbjY9MTIxMA=="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.06.3-ce (linux)"
}
这个是docker保存的登录凭据,kubernates 可以复制此凭据,创建自己的相关配置。
复制命令为:
kubectl create secret generic my-secret --from-file=/root/.docker/config.json
然后在Deployment yml配置中配置imagePullSecrets即可。
注:
删除secret请使用一下命令:
kubectl delete secrets my-secret