Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revisionBoth sides next revision
devops:helm [2020/04/30 08:55] – [Определение значений переменных через другие переменные] admindevops:helm [2020/04/30 10:54] – [Определение значений переменных через другие переменные] admin
Line 1: Line 1:
 +====== Создание чартов helm ======
 +https://helm.sh/docs/topics/charts/ \\
 +https://helm.sh/docs/chart_template_guide/getting_started/ \\
  
 +
 +====== Определение значений 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**, а лучше даже и без них!
 +===== values.yaml =====
 +<code>
 +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
 +              }
 +      }
 +</code>
 +
 +а в **statefullset.yaml** субчарта **logstash** приводим соответствующие строки к такому виду:
 +<code>
 +        - 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 }}
 +</code>
 +
 +То есть строки, указанные в **values** интерпретируются с помощью функции **tpl**.
  • devops/helm.txt
  • Last modified: 2021/03/23 11:32
  • by admin