我有一个Jhipster应用程序,我想把它部署到Kubernetes。我使用了 jhipster kubernetes
命令来创建所有的 k8s 对象,我提供了一个 Docker Hub 仓库来推送它们。Docker Hub仓库是一个私有仓库。
部署对象看起来是这样的。
apiVersion: apps/v1
kind: Deployment
metadata:
name: demodevices
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: demodevices
version: 'v1'
template:
metadata:
labels:
app: demodevices
version: 'v1'
spec:
initContainers:
- name: init-ds
image: busybox:latest
command:
- '/bin/sh'
- '-c'
- |
while true
do
rt=$(nc -z -w 1 demodevices-postgresql 5432)
if [ $? -eq 0 ]; then
echo "DB is UP"
break
fi
echo "DB is not yet reachable;sleep for 10s before retry"
sleep 10
done
containers:
- name: demodevices-app
image: myRepo/demo:demodevices-1.0.0
env: ...
resources: ...
ports: ...
readinessProbe: ...
livenessProbe: ...
imagePullSecrets:
- name: regcred
因为我使用的是私有的Docker Hub仓库,所以我在上面添加了以下内容 imagePullSecret
. 该秘密被创建并部署到k8s。
当应用该文件时,在pods中我看到以下消息。
Warning Failed <invalid> (x4 over <invalid>) kubelet, k8node1 Failed to pull image "busybox:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/busybox/manifests/latest: unauthorized: incorrect username or password
Warning Failed <invalid> (x4 over <invalid>) kubelet, k8node1 Error: ErrImagePull
Normal BackOff <invalid> (x6 over <invalid>) kubelet, k8node1 Back-off pulling image "busybox:latest"
Warning Failed <invalid> (x6 over <invalid>) kubelet, k8node1 Error: ImagePullBackOff
根据我的理解,它试图用私人仓库的凭证来拉动 busybox:最新版本的镜像。预期的结果是拉出busybox:lastest而不出错,并从我的私有仓库中拉出我的自定义图像。如何解决上述问题?
这个错误与你使用的是 imagePullSecret
.
审查 你用来创建秘密的过程,这里有一个例子。
kubectl create secret docker-registry anyname \
--docker-server=docker.io \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email>
我重现了你的案例 当我用错误的信息创建秘密时,也出现了同样的错误。
您是否已经将Private Repo添加到Docker In-Secure Registry中。另外,您是否尝试过使用docker登录登录到您的私有仓库?当你这样做的时候,它会创建一个条目到登录密码。试着使用docker login和docker pullrun进行手动拉取。如果这样做有效,那一定也能用K8s工作。