【发布时间】:2021-02-05 20:20:51
【问题描述】:
我想从公共 Helm 图表存储库中获取一个现有的 Helm 图表,并告诉 Helm 通过向模板文件添加额外的行来更改其模板的一部分。
这是一个例子。有一个名为basic-app(我无法控制)的 Helm 图表,它是一个简单的基于 Apache 的 Web 应用程序。这是它的模板文件之一,用于创建部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.APP_NAMESPACE }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
## CONTAINERS
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.apache.port }}
protocol: TCP
volumeMounts:
- name: secrets-yaml
mountPath: /etc/myapp/secrets.yaml
subPath: secrets.yaml
## VOLUMES
volumes:
- name: secrets-yaml
secret:
secretName: {{ .Values.APP_NAMESPACE }}-secrets-yaml
basic-app 图表对我很有效,只是我想添加一个新秘密。也就是说,我希望生成的部署模板看起来像上面的那样,除了我想为新密钥添加第二个卷和卷挂载:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.APP_NAMESPACE }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
## CONTAINERS
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.apache.port }}
protocol: TCP
volumeMounts:
- name: secrets-yaml
mountPath: /etc/myapp/secrets.yaml
subPath: secrets.yaml
# This is new.
- name: secrets-new-yaml
mountPath: /etc/myapp/secrets-new.yaml
subPath: secrets-new.yaml
## VOLUMES
volumes:
- name: secrets-yaml
secret:
secretName: {{ .Values.APP_NAMESPACE }}-secrets-yaml
# This is new.
- name: secrets-new-yaml
secret:
secretName: {{ .Values.APP_NAMESPACE }}-secrets-new-yaml
实现此目的的一种方法是通过复制 basic-app 并将额外的秘密添加到部署模板来制作一个新图表。但是这种方法是不可取的,原因有很多,其中最重要的是basic-app 的更改和修复不会出现在复制的图表中。
另一种方法是更改basic-app 本身,方法是添加带有一些条件代码的新秘密,该条件代码仅在某个值为真时才插入它。但这意味着让维护者进行更改,并且维护者出于充分的理由可能不想对其图表进行此类特定于站点的更改。
理想情况下,就像面向对象编程中的类继承一样,我希望 Helm 简单地采用现有的 basic-app 图表并将这个新秘密注入其部署模板。这可能吗?
【问题讨论】:
标签: inheritance kubernetes-helm