在Helm中暴露卷,就像在docker中一样



我正在创建一个使用helm(v3.3.0(+k3s的应用程序。容器中的程序使用不同的配置文件。到目前为止,只有几个配置文件(我在构建映像之前手动添加的(,但我想添加一种可能性,即在容器运行时动态添加它们,而不是在容器/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文档中的许多其他卷类型和示例。

Kubernetes有一个用于保存配置文件的专用构造ConfigMaps。Helm反过来支持访问模板内部的文件,这可以帮助您将它们复制到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将在哪个节点上运行;您必须将这些配置文件复制到集群中每个节点的中,并在文件发生更改时尝试将它们全部更新。这是一个巨大的维护问题,尤其是当您不能直接访问节点的文件系统时。

最新更新