【发布时间】:2020-10-26 13:47:41
【问题描述】:
我正在从事一个个人项目,以便最终学习 Kubernetes。经过一番努力,我设法让基本的nginx Docker 映像(来自 Docker Hub)在 pod 上运行并作为 NodePort 服务公开。现在我有兴趣将nginx Docker 映像换成我自己的应用程序。
此时大多数在线教程都说“将您的映像推送到 Docker Hub”,然后您告诉 Kubernetes 从 Docker Hub 加载您的映像。但是,只要有可能,我宁愿避免对第三方服务的任何依赖(如果 5 年后 Docker Hub 出现故障,而我有一家公司的整个基础设施都依赖它呢?这是不太可能的情况,但这只是我为什么喜欢保持事物自足、孤立和独立)
我做了一些阅读,发现要加载自定义 Docker 映像没有 Docker Hub,您必须“在 Kubernetes 节点上”构建映像。但是,如果我有一个由 2 个或更多节点组成的集群怎么办?镜像是否需要在集群中的每个节点上构建?或者,如果一个人知道镜像(可能是主镜像),它能否将文件系统层传递给其他人?
我会自己尝试一下,看看会发生什么,但我可能还需要几天的时间才能知道如何尝试。我还没有弄清楚如何在我的 Kubernetes 集群中运行任意 shell 命令——我只能创建 pod、副本集、部署和服务。在深入学习如何在我的 Kubernetes 节点上构建映像的兔子洞之前,我想弄清楚这是否值得我花时间。
【问题讨论】:
-
您需要一种机制来使图像在每个节点上都可用。它可能是一个存储库(可以是某个公共存储库,也可以是您自己托管的),否则 - 您需要自己在每个节点上构建它。 Kubernetes 根本不关心图像,它是你的 docker 守护进程。
-
这个答案解释了如何pre-pull每个节点上的图像,并避免从注册表stackoverflow.com/questions/50671576/… 中提取图像。但我认为这是一个非常具体的用例的解决方案,最好的解决方案是部署和使用私有注册表,要么是要测试的东西 (docs.docker.com/registry/deploying),要么是企业级解决方案(有许多不同的解决方案可用)。
-
我想说一个注册表几乎是必需的——手动将每个图像的每个版本推送到每个节点不会很好地扩展——但它并不特别需要是 Docker Hub,而且有很多替代品。
标签: docker kubernetes