ImagePullBackOff错误Google Kubernetes Engine

时间:2018-03-15 11:41:33

标签: kubernetes google-cloud-platform gitlab docker-registry google-kubernetes-engine

我知道很多人已经有类似的问题了,我读过其中一些问题,但到目前为止找不到什么帮助我。

我有一个启用私人仓库的gitlab,我也使用Google Kubernetes Engine。我的私人仓库中有一些Docker容器,我想将其中一个部署到Kubernetes Engine。

我用kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt创建了一个秘密 我也试过kubectl create secret docker-registry name --docker-server=registry.xy.z --docker-username=google --docker-password=xyz --docker-email=xy@z.de 然后我创建了我的部署文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: backend-test
labels:
app: 13371337
spec:
replicas: 1
template:
metadata:
labels:
app: 13371337
spec:
  containers:
  - name: backend
    image: registry.xy.z/group/project/backend:latest
    imagePullPolicy: Always
    ports:
    - containerPort: 8080
  imagePullSecrets:
  - name: db-user-pass or name

如何让它运行?

2 个答案:

答案 0 :(得分:5)

使用kubectl create secret docker-registry name是一个right way,用于提供私人泊坞机注册表的凭据。

imagePullSecrets选项看起来也不错,如果你指定了docker-registry secret的名称。

所以,从Kubernetes路径看,一切都很好。

尝试检查将由部署创建的广告连播的事件,只需通过kubectl get pods找到您的广告并调用kubectl describe pod $name_of_your_pod,您就会看到无法提取图片的实际原因。

此外,如果您的存储库不安全或具有自签名证书,请尝试按照that guide允许docker守护程序从那里提取图像,这通常是图像拉出失败的原因。

答案 1 :(得分:3)

为了创建秘密,您可以使用以下命令:(注意我给它起了一个名字)

kubectl create secret docker-registry my_registry \
--docker-server=registry.xy.z \
--docker-username=google \
--docker-password=xyz \
--docker-email=xy@z.de

或使用yaml:

apiVersion: v1
kind: Secret
metadata:
  name: my_registry
type: Opaque
data:
  docker-server: registry.xy.z
  docker-username: google
  docker-password: xyz
  docker-email: xy@z.de

并且您的部署需要使用秘密名称:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: backend-test
labels:
app: 13371337
spec:
replicas: 1
template:
metadata:
labels:
app: 13371337
spec:
  containers:
  - name: backend
    image: registry.xy.z/group/project/backend:latest
    imagePullPolicy: Always
    ports:
    - containerPort: 8080
  imagePullSecrets:
  - name: my_registry

注意:您必须为每个命名空间创建秘密。