我正在使用 Helm 图表在 Kubernetes 中部署应用程序。部署后,我想将一个文件从图表存储库复制到容器中。
目前我正在手动执行此操作:
kubectl cp custom-samples.json che-8467596d54-7c2hg:/data/templates
但我想让这一步成为将自动执行的部署的一部分。请注意,我查看了
post-install
hooks,但我不确定这是一个很好的解决方案。[UPD] 我创建了这个初始化容器:
- name: add-custom-samples
image: alpine:3.5
command: ["sh", "-c", "cd /data/templates; touch custom.json;"]
volumeMounts: [{
"mountPath": "/data",
"name": "che-data-volume"
}]
但是文件
custom.json
在安装的卷中丢失。
最佳答案
您可以 include your file in the Helm chart .您通常会将其包含在 Kubernetes ConfigMap 对象中,然后可以是 mounted in a Pod as a volume .
您需要将文件移动到 Helm 图表目录中的某个位置;说它在 charts/mychart/files/custom-samples.json
.例如,您可以在 charts/mychart/templates/configmap.yaml
中创建一个 ConfigMap。那看起来像
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
custom-samples.json" |-
{{ .Files.Get "custom-samples.json" | indent 4 }}
然后在您的部署的 Pod 规范中,您将引用以下内容:
apiVersion: v1
kind: Deployment
spec:
template:
spec:
volumes:
- name: config
configMap:
name: {{ .Release.Name }}-configmap
containers:
- name: ...
volumeMounts:
- name: config
mountPath: /data/templates
请注意,这种方法会导致文件被存储为 Kubernetes 对象,并且有一些适度的大小限制;看起来像文本文件并且以千字节为单位的东西应该没问题。另外,如果
/data/templates
中还有其他文件目录,这种方法将导致它们被隐藏,以支持 ConfigMap 中的任何内容。
关于kubernetes - k8s : copy file to container after pod's deployment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52330904/