This is an old revision of the document!


Создание чартов helm

Определение значений values.yaml через уже известные значения

https://github.com/helm/helm/issues/2492
https://github.com/helm/helm/issues/2492#issuecomment-589699208
Например, у меня есть чарт, который разворачивает кластер Elasticsearch с помощью Elasticsearch Operator. В составе этого чарта есть subchart, который разворачивает logstash.
В конфигурацию logstash должны попасть путь к elasticsearch и пароль для basic-аутентификации. FQDN-имя, по которому будет доступен Elastic формируется при разворачивании кластера и включает в себя имя релиза ( .Release.Name ), а пароль хотелось бы задать один раз, в одном месте в едином файле values.yaml!
Задача - сделать так, чтобы значения, определенные для кластера elasticsaerch стали доступны для logstash с минимальными изменениями в коде чарта logstash, а лучше даже и без них!

global:
  internalElasticUserPassword: AG7dGmsZp2NDpRED
  # пароль, который будет установлен для встроенного пользователя elastic.
  # Он будет использован как минимум дважды. Первый раз - при создании секрета с паролем пользователя в основном чарте кластера elasticsearch.
  # И второй раз - для создания переменной окружения logstash, которая будет использована в конфигурации output.
#.....
logstash:
  image:
    tag: |-
      {{ .Chart.AppVersion }}
      
  config:
    ELASTIC_PASSWORD: |-
      {{ tpl (printf "%s" .Values.global.internalElasticUserPassword) $ }}
    queue.max_bytes: 1gb
    queue.type: memory
    
  elasticsearch:
    host: |-
      {{ tpl (printf "%s%s%s%s" .Release.Name "-es-http." .Release.Namespace ".svc.cluster.local" ) $  }}
    port: 9200

  outputs:
    main: |-
      output {
              elasticsearch {
                  hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
                  index => "etl-%{+YYYY.MM.dd}"
                  user => "elastic"
                  password => "${ELASTIC_PASSWORD}"
                  ssl => true
                  ssl_certificate_verification => false
              }
      }

а в statefullset.yaml субчарта logstash приводим соответствующие строки к такому виду:

        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }}"
          
            ## Elasticsearch output
            - name: ELASTICSEARCH_HOST
              value: {{ tpl (.Values.elasticsearch.host | toString) . | quote }}
            
            ####
            
          {{- range $key, $value := .Values.config }}
            - name: {{ $key | upper | replace "." "_" }}
              value: {{ tpl ($value | toString ) $ | quote }}
          {{- end }}

То есть строки, указанные в values интерпретируются с помощью функции tpl.

Enter your comment. Wiki syntax is allowed:
 
  • devops/helm.1588244065.txt
  • Last modified: 2020/04/30 10:54
  • by admin