如何使用 Helm 从我的文件系统部署 docker 图像?

How can I use Helm to deploy a docker image from my file system?

如何使用 Helm 从本地文件系统部署 docker 映像?

图表中的语法是什么?

我不想从本地 docker daemon/repository 中提取,而是从文件系统中提取。 file:///mumble/whateverdocker build -o type=local,dest=mumble/whatever

制作

组合的 Helm/Kubernetes/Docker 堆栈并不是那样工作的。您 必须 在本地构建您的映像并将其推送到某种注册表,然后才能 运行 它(或者使用像 minikube 这样的纯本地环境)。根本没有“文件系统中的映像”。

Helm 对​​构建镜像一无所知;就此而言,Helm 本身对图像的了解并不多。它知道如何将 Go 模板语言应用于文本文件以(希望)生成 YAML,并将其发送到 Kubernetes 集群,但 Helm 对​​这些含义的了解非常有限。在 Helm 图表中,您通常会编写类似

的内容
image: {{ .Values.registry }}/{{ .Values.image }}:{{ .Values.tag }}

但这对 Helm 没有任何“意义”。

Kubernetes 确实理解 image: 的正常含义,但同样,它通常指的是位于 Docker Hub 或类似图像注册表中的图像,而不是“文件系统上”的东西。对 Kubernetes 来说重要的是它希望有很多节点,所以如果某个节点上没有图像,它知道如何从注册表中提取它。事实上,一个非常典型的设置是让节点自动创建和销毁(通过集群自动缩放器),你几乎不会在 pod 之外的节点上拥有任何重要的东西。

也就是说,在实际使用中,你基本上必须要有容器注册中心。您可以使用 Docker Hub,或者 run one locally, or use something provided by your cloud provider. If you're using a desktop-oriented Kubernetes setup, both minikube and kind 有关于 运行 将注册表作为该设置的一部分的说明。

基本上这是一个例外,在 minikube 中,您可以通过 运行ning

use minikube's Docker daemon directly
eval $(minikube docker-env)
docker build -t my-image .

这会正常构建映像,将其保留在“Docker space 内”,除了此处它位于 minikube VM 内。

文件中的 Docker 图像不是特别有用。你唯一能用它做的就是 docker load 它;即使没有 Kubernetes 的普通 Docker 也不能直接 运行 它。如果你碰巧有这个文件,你可以 docker load 以我们上面构建它的方式将它放入 minikube 中,或者 minikube load 它。不过,如果可以的话,使用标准 Docker 注册表系统通常比尝试使用普通文件复制它更容易。