Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
devops:helm [2020/04/30 08:55] – [Определение значений переменных через другие переменные] admindevops:helm [2021/03/23 11:32] (current) admin
Line 1: Line 1:
 +====== Создание чартов helm ======
 +https://helm.sh/docs/topics/charts/ \\
 +https://helm.sh/docs/chart_template_guide/getting_started/ \\
  
 +====== Ошибка parse error at ...: bad character U+002D '-' ======
 +Такое происходит, если в имени параметра в **values.yaml** есть символ "-". \\
 +Если переименовать параметр невозможно, то подставлять его следует с помощью конструкции **index**:
 +  {{ index .Values "mysub-chart" "servicename" }}
 +
 +
 +====== Определение значений 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**.
 +
 +===== templating in values hack =====
 +Например, у меня есть набор **volumes**, которые я хотел бы добавить к **deployment**, в именах которых присутствует название релиза - {{ .Release.Name }}. Стандартными средствами **helm** не позволяет темплейтинг в **values.yaml**, поэтому можно применить такой хак: \\
 +В темплейте **deployment**'а пишем такое:
 +<code>{{- if .Values.volumes }}
 +{{- with .Values.volumes }}
 +{{/*      volumes: {{ toYaml .Values.volumes | nindent 8 }}*/}}
 +      volumes:
 +      {{- tpl . $ | nindent 8 }}
 +{{- end }}
 +{{- end }}</code>
 +
 +а в **values** пишем такое:
 +<code>  volumes: |
 +    - name: volume1
 +      configMap:
 +        name: {{ .Release.Name }}-config1
 +    - name: volume2
 +      configMap:
 +        name: {{ .Release.Name }}-config2
 +    - name: volume3
 +      configMap:
 +        name: {{ .Release.Name }}-config3</code>
 +В итоге - в **deployment** попадут 
  • devops/helm.txt
  • Last modified: 2021/03/23 11:32
  • by admin