我尝试为由少数组件组成的复杂解决方案创建一个伞形舵图。其中之一是数据库,我使用 mariadb-galera 图表。我面临的问题是,一旦我的数据库可用,我想执行飞路迁移,但我找不到正确的方法。 首先,我想使用范围版本,并且我不知道如何在不告诉完整版本的情况下指示我的挂钩来匹配数据库子图。 其次,我最近为我的子图添加了一个别名,从那以后我一直无法正确触发挂钩:它只是在安装时触发,并一次又一次失败,直到数据库最终可用。
我的
Chart.yaml
看起来有点像那样:
apiVersion: v2
name: myApp
description: umbrella chart
type: application
version: 0.1.0
appVersion: "0.1-dev"
dependencies:
- name: "portal"
version: "0.1-dev"
alias: "portal"
- name: "mariadb-galera"
version: "~5.11"
repository: "https://charts.bitnami.com/bitnami"
alias: "database"
#...More dependencies...
我的钩子定义如下:
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "myApp.fullname" . }}-migration
labels:
{{- include "myApp.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": post-install,post-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
template:
metadata:
name: "{{ .Release.Name }}-migration"
labels:
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
helm.sh/chart: "database-5.11.2"
spec:
containers:
- name: flyway-migration
image: flyway/flyway
args:
- "migrate"
- "-password=$(DB_PASS)"
volumeMounts:
- name: migration-files
mountPath: /flyway/sql/
- name: flyway-conf
mountPath: /flyway/conf/
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
name: mariadb-secret
key: mariadb-password
volumes:
- name: migration-files
configMap:
name: migration-files
- name: flyway-conf
configMap:
name: flyway-conf
在使用别名之前,helm.sh 注释看起来像这样:
helm.sh/chart: "mariadb-galera-5.11.2"
如您所见,它需要完整版本,我不想手动包含。
我尝试使用类似的东西:
{{ template ".Chart.name" .Subcharts.database }}
但似乎无法访问子图的
.Chart
值。
有什么我错过的吗?
由于包内嵌入了变量,我找到了一种获取依赖项的正确名称的方法:
helm.sh/chart: "{{ template "common.names.chart" .Subcharts.database }}"
这会产生我需要的确切行,但工作仍然会开始,而无需等待 mariadb 准备好。