【问题标题】:how to get base chart.yaml version from sub charts如何从子图表中获取基本 chart.yaml 版本
【发布时间】:2019-12-31 14:37:37
【问题描述】:

我有一个伞形图表,它有一个几乎所有子图表部署配置的模板。如何从子图表中获取基本图表版本。

也许一个解决方案是覆盖子图表 chart.yaml 版本,但我也尝试这样做但没有成功。

我在基本图表上尝试了 _helpers.tpl 并在基本图表上的我的 _deployment-config.yaml 上定义

{{- define "bitcore.deployment" -}}
{{- $common := dict "Values" .Values.bitcore -}} 
{{- $noCommon := omit .Values "bitcore" -}} 
{{- $overrides := dict "Values" $noCommon -}} 
{{- $noValues := omit . "Values" -}} 
{{- with merge $noValues $overrides $common -}}
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  labels:
    app: ## here i need base chart version ##
  name: {{ .Chart.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    app: {{ .Chart.Name }}
    deploymentconfig: {{ .Chart.Name }}
  strategy:
    activeDeadlineSeconds: 21600
    recreateParams:
      timeoutSeconds: 600
    resources: {}
    type: Recreate
  template:
    metadata:
      annotations:
        openshift.io/generated-by: OpenShiftNewApp
      labels:
        app: {{ .Chart.Name }}
        deploymentconfig: {{ .Chart.Name }}
        test: required
    spec:
      containers:
      - image: "{{ .Values.image.repository }}:xy"
        imagePullPolicy: {{ .Values.global.image.pullPolicy }}
        env:
          - name: BIT_CORE_RUNTIME_PROFILE
            value: '{{ required "Please provide runtime profile" .Values.global.runtimeProfile }}'
          - name: JAVA_OPTS
            value: '{{ required "Please provide Java Ops." .Values.global.javaOpts }}'
        livenessProbe:
        httpGet:
          path: management/health
          port: 1489
        initialDelaySeconds: 30
        periodSeconds: 60
        timeoutSeconds: 10
        successThreshold: 1
        failureThreshold: 10
        name: {{ .Chart.Name }}
        ports:
        - containerPort: 1480
          protocol: TCP
        readinessProbe:
          httpGet:
            path: management/health
            port: 1489
          initialDelaySeconds: 10
          timeoutSeconds: 10
          periodSeconds: 60
          successThreshold: 1
          failureThreshold: 10
        resources:
          {{- toYaml .Values.global.resources | nindent 12 }}
        volumeMounts:
          - mountPath: /logs
            name: {{ .Chart.Name }}-volume-1
      terminationMessagePath: /dev/termination-log
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: {{ .Chart.Name }}-volume-1
        emptyDir: {}
  test: false
{{- end -}}
{{- end -}}

我期望复杂的版本(7.0.0-snapshot-dev-872),但我得到了子图表版本 0.1.0

【问题讨论】:

    标签: charts kubernetes kubernetes-helm


    【解决方案1】:

    我认为您无论如何都无法访问超级图表的.Chart。毕竟,子图表应该仍然能够独立工作。

    使用 helm 2 可以做的最好的事情是将版本放在 .Values.global 部分。

    在 helm 2 中,您必须将其写入生成版本的脚本中的顶级 values.yaml,因为那里不能有任何代码。我相信 helm 3 应该可以通过脚本生成值。

    【讨论】:

    • 但这意味着我需要在安装时使用 --set 标志,我不想要那个..
    • @Matankila,您可以在主图表内的 values.yaml 中写入子图表的值。但无论如何,如果你必须让你的版本编写脚本更新两个文件,你可以让它更新十五个,即只需将版本写入所有Chart.yamls。
    • @Matankila... 另一方面,如果您想在所有子图表中使用相同的版本,那么首先将它们作为子图表可能没有任何意义。从一个图表创建的对象的数量没有限制,如果它们不能单独使用——在这种情况下,有单独的版本是有意义的——将它们作为子图表没有任何好处。
    【解决方案2】:

    您可以在主图表内的 values.yaml 文件中简单地为子图表定义版本值。

    在我看来,创建多个具有相同版本的子图表没有意义,您可以简单地将它们作为普通图表运行。伞形图的主要目标是部署更多/具有大量参数的大规模应用程序——通常是不同的。因此,如果您的子图表具有类似的参数,例如。相同版本,尝试分别部署。

    有用的文档:subchartscharts-subcharts

    有用的文章:helm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 2022-01-27
      • 1970-01-01
      • 2021-07-24
      • 2021-09-08
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多