我知道很多人已经有类似的问题了,我读过其中一些问题,但到目前为止找不到什么帮助我。
我有一个启用私人仓库的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
如何让它运行?
答案 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
注意:您必须为每个命名空间创建秘密。