像在 docker 中一样在 Helm 中公开卷
Expose volumes in Helm just like in docker
我正在创建一个使用 helm(v3.3.0) + k3s 的应用程序。容器中的程序使用不同的配置文件。到目前为止,只有几个配置文件(我在构建图像之前手动添加的)但我想增加在容器为 运行 时动态添加它们的可能性,并且一旦 container/pod 死了。在 docker 中,我会通过公开这样的文件夹来做到这一点:
docker run [image] -v /host/path:/container/path
是否有 helm 的等效项?
如果不是,您建议如何在不停止使用 helm/k3s 的情况下解决此问题?
在 Kubernetes 中(Helm 只是它的一个工具)你需要做两件事来在容器内挂载主机路径:
spec:
volumes:
# 1. Declare a 'hostPath' volume under pod's 'volumes' key:
- name: name-me
hostPath:
path: /path/on/host
containers:
- name: foo
image: bar
# 2. Mount the declared volume inside container using volume name
volumeMounts:
- name: name-me
mountPath: /path/in/container
Kubernetes 中的许多其他卷类型和示例 documentation。
Kubernetes 有一个专门用于保存配置文件的构造,ConfigMaps. Helm in turn has support for Accessing Files Inside Templates 可以帮助您将它们复制到 ConfigMap 对象中。此处的最小设置如下所示:
# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.ini: |
{{ .Files.Get "config.ini" | indent 4 }}
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment:
metadata: { ... }
spec:
template:
spec:
volumes:
- name: config-data
configMap:
name: my-config # matches ConfigMap metadata: { name: }
containers:
- volumeMounts:
- name: config-data # matches volume name: in this file
mountPath: /container/path
您可以在这里以多种方式使用 Helm 的模板构造:动态构造 ConfigMap 的内容,设置环境变量说明要使用的文件,等等。
不要在此处使用 hostPath
卷。由于 Kubernetes 被设计为集群环境,因此您无法控制给定 pod 运行 在哪个节点上;您必须将这些配置文件复制到集群中的 每个 节点,并在文件更改时尝试更新它们。这是一个巨大的维护问题,特别是如果您没有对节点的直接文件系统访问权限。
我正在创建一个使用 helm(v3.3.0) + k3s 的应用程序。容器中的程序使用不同的配置文件。到目前为止,只有几个配置文件(我在构建图像之前手动添加的)但我想增加在容器为 运行 时动态添加它们的可能性,并且一旦 container/pod 死了。在 docker 中,我会通过公开这样的文件夹来做到这一点:
docker run [image] -v /host/path:/container/path
是否有 helm 的等效项? 如果不是,您建议如何在不停止使用 helm/k3s 的情况下解决此问题?
在 Kubernetes 中(Helm 只是它的一个工具)你需要做两件事来在容器内挂载主机路径:
spec:
volumes:
# 1. Declare a 'hostPath' volume under pod's 'volumes' key:
- name: name-me
hostPath:
path: /path/on/host
containers:
- name: foo
image: bar
# 2. Mount the declared volume inside container using volume name
volumeMounts:
- name: name-me
mountPath: /path/in/container
Kubernetes 中的许多其他卷类型和示例 documentation。
Kubernetes 有一个专门用于保存配置文件的构造,ConfigMaps. Helm in turn has support for Accessing Files Inside Templates 可以帮助您将它们复制到 ConfigMap 对象中。此处的最小设置如下所示:
# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.ini: |
{{ .Files.Get "config.ini" | indent 4 }}
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment:
metadata: { ... }
spec:
template:
spec:
volumes:
- name: config-data
configMap:
name: my-config # matches ConfigMap metadata: { name: }
containers:
- volumeMounts:
- name: config-data # matches volume name: in this file
mountPath: /container/path
您可以在这里以多种方式使用 Helm 的模板构造:动态构造 ConfigMap 的内容,设置环境变量说明要使用的文件,等等。
不要在此处使用 hostPath
卷。由于 Kubernetes 被设计为集群环境,因此您无法控制给定 pod 运行 在哪个节点上;您必须将这些配置文件复制到集群中的 每个 节点,并在文件更改时尝试更新它们。这是一个巨大的维护问题,特别是如果您没有对节点的直接文件系统访问权限。