覆盖子图中的引用文件(在 .Files 中)或从主图中插入 mariadb 初始文件

Overwrite referenced files (in .Files) in a Subchart or insert mariadb initial files from a main chart

所以我有一个 mariadb 子图。 mariadb 图表从不同的初始化文件填充配置映射:

{{ (.Files.Glob "files/docker-entrypoint-initdb.d/*[sh|sql|sql.gz]").AsConfig | indent 2 }}

那么我可以注入初始化文件吗?

是否可以覆盖 .Files.Glob 的上下文以便它访问我的父目录?或者是否有另一种推荐的方法来创建初始 sql 文件?

maridb 子图在 requirements.yaml 中是这样实现的:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled

由于您的mariadb是第三方管理的子chart,.Files.Glob仅指mariadb目录下的文件。

如果你想在子图中放置任何启动脚本,你必须取消存档。

假设您有 custom-init-scripts 目录,其中包含父图表中的所有初始化脚本。

$ ls custom-init-scripts/
init.sh  insert.sql

# download mariadb chart package in charts directory
$ helm dependency update

# unarchive and delete package
$ tar -xvf charts/mariadb-5.*.tgz -C charts && rm charts/mariadb-5.*.tgz

# copy init scripts to mariadb subchart
$ cp -a custom-init-scripts/. charts/mariadb/files/docker-entrypoint-initdb.d/

现在您的初始化文件出现在 mariadb 子图中

helm install --debug --dry-run --set mariadb.enabled=true .

...
---
# Source: mychart/charts/mariadb/templates/initialization-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: elevated-dragonfly-mariadb-master-init-scripts
  labels:
    app: mariadb
    component: "master"
    chart: mariadb-5.2.5
    release: "elevated-dragonfly"
    heritage: "Tiller"
binaryData:
data:
  init.sh: "echo \"hi\"\r\n"
  insert.sql: INSERT INT Users (FirstName, LastName) VALUES ('A', 'B');