我只想按名称引用容器映像,并且仅摘要而不是完整的URI。
我已经强烈提到了提及docker映像的Kubernetes对象规范文件。 我们有几个带有多个子目录的私有容器映像存储库(prod,staging,dev)。
我需要一种无需修改Kubernetes对象规范文件即可指定docker映像“搜索前缀”的方法。
示例: 我有一个包含以下行的签入哈希文件:
image: something@sha256:2635462354664526623546235645264
首先将图像推到gcr.io/dev-bucket/commit-hash/something
。然后将其复制到gcr.io/staging-bucket/commit-hash/something
,最后复制到gcr.io/prod-bucket/something
。
我希望能够告诉Kubernetes可能的图像搜索位置/前缀,以便我可以使用该目标文件而无需进行任何更改。 (当文件形成一棵散乱的树时,修改文件就成为一个大问题。)
答案 0 :(得分:0)
我认为您可以使用imagePullSecrets
。
您应该创建一个docker-registry
机密,其中包含每个阶段/存储桶的URL和所有身份验证。
kubectl create secret docker-registry dev-bucket --docker-server=https://hub.docker.com --docker-username=user --docker-email=user@example.com --docker-password=password
然后在创建POD
时,您应该执行以下操作:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: <registry_name>/<image_name>:<tagname>
imagePullSecrets:
- name: dev-bucket
请务必查看Google Cloud Registry (GCR) with external Kubernetes指南以及如何Pull an Image from a Private Registry
别忘了在gcloud中创建具有GCR权限和服务帐户密钥的服务帐户。
您应该在图像中添加tags
,这样您就可以将一个图像推到另一个标签上。
编辑:
这里是一个例子:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest
现在我们将为其添加新标签
$ docker tag hello-world gcr.io/project-for-x/hello-world:dev_latest
$ docker push gcr.io/project-for-x/hello-world:dev_latest
The push refers to repository [gcr.io/project-for-x/hello-world]
428c97da766c: Layer already exists
dev_latest: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
$ docker tag hello-world gcr.io/project-for-x/hello-world:stage_latest
$ docker push gcr.io/project-for-x/hello-world:stage_latest
The push refers to repository [gcr.io/project-for-x/hello-world]
428c97da766c: Layer already exists
stage_latest: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
$ docker tag hello-world gcr.io/project-for-x/hello-world:prod_latest
$ docker push gcr.io/project-for-x/hello-world:prod_latest
The push refers to repository [gcr.io/project-for-x/hello-world]
428c97da766c: Layer already exists
prod_latest: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
这在GCR内创建了hello-world
个文件
General information
Image type Docker Manifest, Schema 2
Media type :application/vnd.docker.distribution.manifest.v2+json
Virtual size :977 B
Uploaded time :October 24, 2018 at 3:07:49 PM UTC+2
Build ID :—
Container classification
Digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812
Tags: dev_latest prod_latest stage_latest
Repository: hello-world
Project: project-for-x
这样,您只有一个yaml
文件,可以在不同的环境中部署相同的映像。