Helm: передача значений массива через --set - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть чат рулевого cronjob, я могу определить много заданий в values.yaml, и cronjob.yaml предоставит мои задания.Я столкнулся с проблемой при установке идентификатора тега изображения в командной строке, после того, как команда не выдавала ошибок, но он не обновит тег изображения заданий на новый.

helm upgrade cronjobs cronjobs/ --wait --set job.myservice.image.tag=b70d744

cronjobs будет работать со старым тегом изображения, как я могуразрешить это?

вот мой cronjobs.yaml

{{- $chart_name := .Chart.Name }}
{{- $chart_version := .Chart.Version | replace "+" "_" }}
{{- $release_name := .Release.Name }}

{{- range $job := .Values.jobs }}
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  namespace: "{{ $job.namespace }}"
  name: "{{ $release_name }}-{{ $job.name }}"
  labels:
    chart: "{{ $chart_name }}-{{ $chart_version }}"
spec:
  concurrencyPolicy: {{ $job.concurrencyPolicy }}
  failedJobsHistoryLimit: {{ $job.failedJobsHistoryLimit }}
  suspend: {{ $job.suspend }}
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: {{ $release_name }}
            cron: {{ $job.name }}
        spec:
          containers:
          - image: "{{ $job.image.repository }}:{{ $job.image.tag }}"
            imagePullPolicy: {{ $job.image.imagePullPolicy }}
            ports:
              - name: http
                containerPort: 80
                protocol: TCP
            name: {{ $job.name }}
            args:
{{ toYaml $job.args | indent 12 }}
            env:
{{ toYaml $job.image.env | indent 12 }}
            volumeMounts:
            - name: nfs
              mountPath: "{{ $job.image.nfslogpath }}"
          restartPolicy: OnFailure
          imagePullSecrets:
            - name: {{ $job.image.secret }}
          volumes:
            - name: nfs
              nfs:
                server: "{{ $job.image.server }}"
                path: "{{ $job.image.nfspath }}"
                readOnly: false
  schedule: {{ $job.schedule | quote }}
  successfulJobsHistoryLimit: {{ $job.successfulJobsHistoryLimit }}
  {{- end }}

вот мой values.yaml

jobs:
  - name: myservice
    namespace: default
    image:
      repository: xxx.com/myservice
      tag: fe4544
      pullPolicy: Always
      secret: xxx
      nfslogpath: "/var/logs/"
      nfsserver: "xxx"
      nfspath: "/nfs/xxx/cronjobs/"
      nfsreadonly: false
      env:
    schedule: "*/5 * * * *"
    args:
    failedJobsHistoryLimit: 1
    successfulJobsHistoryLimit: 3
    concurrencyPolicy: Forbid
    suspend: false

  - name: myservice2
    namespace: default
    image:
      repository: xxxx/myservice2
      tag: 1dff39a
      pullPolicy: IfNotPresent
      secret: xxxx
      nfslogpath: "/var/logs/"
      nfsserver: "xxxx"
      nfspath: "/nfs/xxx/cronjobs/"
      nfsreadonly: false
      env:
    schedule: "*/30 * * * *"
    args:
    failedJobsHistoryLimit: 1
    successfulJobsHistoryLimit: 2
    concurrencyPolicy: Forbid
    suspend: false

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Если вам нужно передать значения массива, вы можете использовать фигурные скобки:

--set test={x,y,z}

Результат YAML:

test:
  - x
  - y
  - z

Источник: https://github.com/helm/helm/blob/master/docs/using_helm.md#the-format-and-limitations-of---set

0 голосов
/ 19 декабря 2018

Поскольку вы используете массив в файле values.yaml , см. связанную проблему

Альтернативное решение

  • В вашем values.yaml отсутствуют значения для args и env .Я установил их в своем примере, а также изменил отступ на 14

  • Ваше cronjob.yaml server: "{{ $job.image.server }}" равно нулю, и я изменилэто .image.nfsserver

Вместо использования массива, просто разделите ваши сервисы, как в примере ниже:

values.yaml

jobs:
  myservice:
    namespace: default
    image:
      repository: xxx.com/myservice
      tag: fe4544
      pullPolicy: Always
      secret: xxx
      nfslogpath: "/var/logs/"
      nfsserver: "xxx"
      nfspath: "/nfs/xxx/cronjobs/"
      nfsreadonly: false
      env:
        key: val
    schedule: "*/5 * * * *"
    args:
      key: val
    failedJobsHistoryLimit: 1
    successfulJobsHistoryLimit: 3
    concurrencyPolicy: Forbid
    suspend: false

  myservice2:
    namespace: default
    image:
      repository: xxxx/myservice2
      tag: 1dff39a
      pullPolicy: IfNotPresent
      secret: xxxx
      nfslogpath: "/var/logs/"
      nfsserver: "xxxx"
      nfspath: "/nfs/xxx/cronjobs/"
      nfsreadonly: false
      env:
        key: val
    schedule: "*/30 * * * *"
    args:
      key: val
    failedJobsHistoryLimit: 1
    successfulJobsHistoryLimit: 2
    concurrencyPolicy: Forbid
    suspend: false

В вашем cronjob.yaml используйте {{- range $job, $val := .Values.jobs }} для перебора значений.

Используйте $ job там, где вы использовали {{$ job.name}} .

Доступ к значениям, таким как suspend с {{.suspend}} вместо {{$ job.suspend}}

cronjob.yaml

{{- $chart_name := .Chart.Name }}
{{- $chart_version := .Chart.Version | replace "+" "_" }}
{{- $release_name := .Release.Name }}

{{- range $job, $val := .Values.jobs }}
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  namespace: {{ .namespace }} 
  name: "{{ $release_name }}-{{ $job }}"
  labels:
    chart: "{{ $chart_name }}-{{ $chart_version }}"
spec:
  concurrencyPolicy: {{ .concurrencyPolicy }}
  failedJobsHistoryLimit: {{ .failedJobsHistoryLimit }}
  suspend: {{ .suspend }}
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: {{ $release_name }}
            cron: {{ $job }}
        spec:
          containers:
          - image: "{{ .image.repository }}:{{ .image.tag }}"
            imagePullPolicy: {{ .image.imagePullPolicy }}
            ports:
              - name: http
                containerPort: 80
                protocol: TCP
            name: {{ $job }}
            args:
{{ toYaml .args | indent 14 }}
            env:
{{ toYaml .image.env | indent 14 }}
            volumeMounts:
            - name: nfs
              mountPath: "{{ .image.nfslogpath }}"
          restartPolicy: OnFailure
          imagePullSecrets:
            - name: {{ .image.secret }}
          volumes:
            - name: nfs
              nfs:
                server: "{{ .image.nfsserver }}"
                path: "{{ .image.nfspath }}"
                readOnly: false
  schedule: {{ .schedule | quote }}
  successfulJobsHistoryLimit: {{ .successfulJobsHistoryLimit }}
{{- end }}

Передача значений с использованием - установить :

helm upgrade cronjobs cronjobs/ --wait --set jobs.myservice.image.tag=b70d744

Пример:

helm install --debug --dry-run --set jobs.myservice.image.tag=my123tag .

...
HOOKS:
MANIFEST:

---
# Source: foo/templates/cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  namespace: default
  name: "illmannered-iguana-myservice"
  labels:
    chart: "foo-0.1.0"
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  suspend: false
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: illmannered-iguana
            cron: myservice
        spec:
          containers:
          - image: "xxx.com/myservice:my123tag"
            imagePullPolicy:
            ports:
              - name: http
                containerPort: 80
                protocol: TCP
            name: myservice
            args:
              key: val

            env:
              key: val

            volumeMounts:
            - name: nfs
              mountPath: "/var/logs/"
          restartPolicy: OnFailure
          imagePullSecrets:
            - name: xxx
          volumes:
            - name: nfs
              nfs:
                server: "xxx"
                path: "/nfs/xxx/cronjobs/"
                readOnly: false
  schedule: "*/5 * * * *"
  successfulJobsHistoryLimit: 3
---
# Source: foo/templates/cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  namespace: default
  name: "illmannered-iguana-myservice2"
  labels:
    chart: "foo-0.1.0"
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  suspend: false
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: illmannered-iguana
            cron: myservice2
        spec:
          containers:
          - image: "xxxx/myservice2:1dff39a"
            imagePullPolicy:
            ports:
              - name: http
                containerPort: 80
                protocol: TCP
            name: myservice2
            args:
              key: val

            env:
              key: val

            volumeMounts:
            - name: nfs
              mountPath: "/var/logs/"
          restartPolicy: OnFailure
          imagePullSecrets:
            - name: xxxx
          volumes:
            - name: nfs
              nfs:
                server: "xxxx"
                path: "/nfs/xxx/cronjobs/"
                readOnly: false
  schedule: "*/30 * * * *"
  successfulJobsHistoryLimit: 2

Надеюсь, это поможет!

...