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

aga*_*lue 5 docker kubernetes-helm

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

图表中的语法是什么?

我不想从本地 docker 守护进程/存储库中提取数据,而是从适当的文件系统中提取数据。 file:///mumble/whatever所产生的docker build -o type=local,dest=mumble/whatever

Dav*_*aze 8

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

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

image: {{ .Values.registry }}/{{ .Values.image }}:{{ .Values.tag }}
Run Code Online (Sandbox Code Playgroud)

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

Kubernetes 确实理解image:其正常含义,但同样,这通常指的是位于 Docker Hub 或类似镜像注册表中的镜像,而不是“文件系统上”的镜像。对于 Kubernetes 来说,重要的是它期望有许多节点,因此如果节点上尚未存在映像,它知道如何从注册表中提取它。事实上,一个非常典型的设置是自动创建和销毁节点(通过集群自动缩放器),并且在 Pod 之外的节点上几乎不会有任何重要的东西。

这意味着,在实际使用中,你基本上必须有一个容器注册表。您可以使用 Docker Hub,或者在本地运行Docker Hub,或者使用云提供商提供的东西。如果您使用面向桌面的 Kubernetes 设置,minikubekind都有运行注册表作为该设置的一部分的说明。

基本上唯一的例外是,在 minikube 中,您可以通过运行直接使用 minikube 的 Docker 守护进程

eval $(minikube docker-env)
docker build -t my-image .
Run Code Online (Sandbox Code Playgroud)

这会正常构建镜像,将其保留在“Docker 空间内”,但这里它位于 minikube VM 内。

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