自从我开始使用 docker 之后,我就有一个问题,到目前为止我还没有得到一个好的答案。
假设我有一个指定 k8s 部署的 .yaml 文件。我们正在本地构建服务器上构建我们的 docker 镜像,它们被推送到本地注册表,例如 registry.mycompany.com,它只能在我们本地公司网络中访问。因此,在我的 .yaml 中,我将使用“image:registry.mycompany.com/myrepo/myimage:1.0”引用该图像。
现在,当我在本地 k8s 集群上部署它时,它可以正常工作,因为域名得到解析并且可以拉取图像。现在我想在任何云中部署相同的内容。好吧,它不会工作,因为注册表不可用。如果我想在我的一个客户位置部署相同的 .yaml 也是如此,他们也有充分的理由无法访问我的本地注册表。
这种事情一般是怎么解决的?现在,我在我的客户或云帐户中设置另一个注册表,重新标记我的所有图像并将它们推送到该注册表,并且当我在客户位置或云中部署时更改 .yamls 中的所有图像引用。因此,必须维护大量 99% 相同的文件集。那不是它应该如何工作吗?
我的“愿望”是我可以只指定图像名称和标签“myimage:1.0”,如果他能找到图像并拉取它,k8s 集群只会检查所有可用的注册表。但我也知道没有“知名注册表列表”,您可以在映像名称中指定注册表或将其省略,然后将查询 docker hub。但是,如果我可以指定只是
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: MyDeployment
spec:
replicas: 1
template:
metadata:
labels:
app: myimage
spec:
containers:
- name: myimage
image: 'myimage:1.0'
ports: []
和注册表列表:
registries:
- registry.mycompany.com
- registry.cloud.com
- registry.localcustomer.com
但没有那样的事,对吧?
我能想到的唯一其他解决方案是将所有内容构建到 helm 图表中,使图像的第一部分引用一个变量并将注册表作为变量传递给图表。
欢迎任何想法和信息。提前致谢 :)