【问题标题】:Recommended way to add features to a 3rd party helm chart?向 3rd 方舵图添加功能的推荐方法?
【发布时间】:2020-01-11 23:48:41
【问题描述】:

目前,我们正在为我们正在部署的 3rd 方 helm 图表添加功能(例如 - 在 prometheus 中,我们在使用 nginx 入口控制器时添加了身份验证支持)。

显然,当我们想要升级这些 helm 图表时,这会让我们头疼,我们需要对我们的更改执行“差异”。

向现有 3rd 方舵图添加功能的推荐方法是什么?我应该使用伞形图并使用 prometheus 作为依赖项吗?然后从图表中导入值? (https://github.com/helm/helm/blob/master/docs/charts.md#importing-child-values-via-requirementsyaml)

或者有其他推荐的方式吗?

-- 编辑--

示例 - 如您所见,我添加了 3 个 nginx.ingress.* 注释以支持 prometheus 入口资源上的基本身份验证 - 当然,如果我要升级,我需要再次手动添加,会出问题

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
{{- if .Values.prometheus.ingress.annotations }}
  annotations:
{{ toYaml .Values.prometheus.ingress.annotations | indent 4 }}
{{- end }}
{{- if .Values.alertmanager.ingress.nginxBasicAuthEnabled }}
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - ok"
    nginx.ingress.kubernetes.io/auth-secret: {{ template "prometheus-operator.fullname" . }}-prometheus-basicauth
    nginx.ingress.kubernetes.io/auth-type: "basic"
{{- end }}
  name: {{ $serviceName }}
  labels:
    app: {{ template "prometheus-operator.name" . }}-prometheus
{{ include "prometheus-operator.labels" . | indent 4 }}
{{- if .Values.prometheus.ingress.labels }}
{{ toYaml .Values.prometheus.ingress.labels | indent 4 }}
{{- end }}
spec:
  rules:
    {{- range $host := .Values.prometheus.ingress.hosts }}
    - host: {{ . }}
      http:
        paths:
          - path: "{{ $routePrefix }}"
            backend:
              serviceName: {{ $serviceName }}
              servicePort: 9090
    {{- end }}
{{- if .Values.prometheus.ingress.tls }}
  tls:
{{ toYaml .Values.prometheus.ingress.tls | indent 4 }}
{{- end }}
{{- end }}

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    我认为这可能会回答您的question

    这让我找到了specific part I was looking for,其中父图表可以通过将图表名称指定为父values.yaml 中的键来覆盖子图表。

    在应用程序图表的requirements.yaml

    dependencies:
    - name: jenkins
      # Can be found with "helm search jenkins"
      version: '0.18.0'
      # This is the binaries repository, as documented in the GitHub repo
      repository: 'https://kubernetes-charts.storage.googleapis.com/'
    

    运行:

    helm dependency update
    

    在应用程序图表的values.yaml

    # ...other normal config values
    
    # Name matches the sub-chart
    jenkins: 
      # This will be override "someJenkinsConfig" in the "jenkins" sub-chart
      someJenkinsConfig: value 
    

    【讨论】:

    • 我不确定它如何解决用例 - 如果模板文件之一需要某种注释(显然在官方文件中不存在) - 我必须手动升级时添加它们。对于自定义 values.yaml 更改 - 我可以创建另一个值文件,然后使用 2 个值(原始值和 ovverides)进行升级 - 但不是在添加功能时。我在编辑中添加了示例以显示我的问题
    【解决方案2】:

    我会在您升级/变基时分叉并处理集成更改,或者如果可能的话,通过 values.yaml 文件为您想要自定义的那些禁用入口元素。然后使用您在另一个自定义图表中需要的自定义项手动创建您自己的入口实例,并从普罗米修斯图表中提供它所需的引用作为正常的 values.yaml 输入。

    显然,这种方法有其局限性,如果自定义项与图表的耦合过于紧密,则可能无法将它们分开。

    希望这会有所帮助。

    【讨论】:

    • 我并没有完全遵循,整合变化并总是比较听起来像大惊小怪,自定义图表 - 意思是只有我的变化的子图表?
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2016-05-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多