在 Pod 类的第 3 方 helm yaml 模板中注入价值

inject value in 3rd party helm yaml template of Pod kind

我正在为 mysql 使用第 3 方存储库 bitnami。

我知道 values.yaml 可以很容易地注入,如果那个 yaml 在依赖部分。

即,如果我在 Chart.yaml 中添加依赖项:

dependencies:
  - name: mysql
    version: 8.8.23
    repository: "https://charts.bitnami.com/bitnami"

并在 values.yaml 中:

mysql:
    auth:
      rootPassword: "12345"
      database: my_database
    primary:
      service:
        type: LoadBalancer

根密码在bitnami/mysql中适当的参数auth.rootPassword中注入。

但如果我在模板文件夹中有自己的 pod.yaml:

apiVersion: v1
kind: Pod
spec:
  containers:
    - name: mysql-pod
      image: bitnami/mysql

如何将密码和其他参数注入此文件,就像我对 values.yaml 文件所做的一样。

我需要通过auth.rootPassword,等等...

此外,如果能够引用完全相同的 pod,那么它是在依赖项上创建的,而不是作为另一个实例创建的。

chart包含很多东西——一个StatefulSet,一个匹配的Service,一个PodDisruptionBudget,一个ConfigMap,等等。您不能将所有这些都强制放入一个 Pod 中,并且通常您不能在 Helm 图表中引用事物而不将它们作为您最初显示的依赖项包括在内。

Bitnami 也恰好发布了一个单独的 bitnami/mysql Docker image,您可以在 StatefulSet 的 pod 规范中将其列为 image:,但您必须自己重建该图表中的所有其他机器。

Also, if there is ability to refer exactly the same pod, that is created on dependency, and not as another instance.

Helm 中有一个典型的约定,即大多数对象都被命名为 RELEASE-CHART-SUFFIX,如果它们相同,则将 RELEASECHART 挤在一起。你通常不会关心 StatefulSet 生成的 Pod,而是关心到达它的 Service,即 generated by a typical Helm Service YAML file。如果你没有设置各种覆盖,也没有使用复制模式,那么在这个依赖上下文中,你可以组合 .Release.Name 和依赖图表名称 mysql 并且没有后缀来获取

- name: MYSQL_HOST
  value: {{ .Release.Name }}-mysql

我不知道获取服务名称的更通用方法。 (我根本不知道有任何使用 Helm's exports mechanism 的图表,并且由于它只重新发布值,因此在任何情况下都不能包含计算值。)

对于凭证等其他详细信息,您可以参考生成的 Secret,或者直接使用 .Values.mysql...

- name: MYSQL_USER
  value: {{ .Values.mysql.auth.username }}
- name: MYSQL_PASSWORD
  valueFrom:
    secretKeyRef:
      name: {{ .Release.Name }}-mysql
      key: mysql-password

我认为如果不自己阅读图表的源代码、观察图表实际安装的内容或阅读图表的文档(Bitnami 图表相当 well-documented但其他人可能不是)。