kubernetes - k8s : copy file to container after pod's deployment

标签 kubernetes kubernetes-helm

我正在使用 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/

相关文章:

Kubernetes 环境变量未在命令中正确使用

kubernetes - 如何使用负载均衡器公开 Statefulset?

memory - Kubernetes 中的硬件资源是如何定义的? CPU和内存

jenkins - 默认服务帐户无法与 jenkins 上的 kubernetes 插件一起使用

linux - 使用编排工具将我的应用程序部署到多个虚拟机的集群

带有微服务的 Kubernetes 网络策略

kubernetes - Helm 3 图表安装错误 : error validating data: apiVersion not set

kubernetes - configmap更改时, Helm chart 重新启动pod

kubernetes - Kubernetes自定义基于时间的缩放器

kubernetes - 如何使用 Helm 将额外配置传递给 RabbitMQ?