L'installation et la gestion des graphiques Helm peuvent vous donner des complications que vous n'avez peut-être pas rencontrées auparavant.
Helm Charts met en package des applications pour l'installation dans des clusters Kubernetes. L'installation de Helm Chart est un peu comme le lancement
, donc les développeurs de Helm Chart sont confrontés à certains des mêmes problèmes que les développeurs qui font des installateurs:
- Quelles hypothèses pouvez-vous faire sur l'environnement dans lequel vous installez?
- L'application peut-elle interagir avec d'autres applications?
- Quelles configurations devraient être disponibles pour l'utilisateur et comment devraient-elles être proposées?
Mais ces questions sont liées aux spécificités de Helm. Pour comprendre pourquoi, commençons par une image de ce qui se passe lorsque l'utilisateur se lance helm install
. Nous pouvons ensuite examiner comment certains des graphiques officiels de Kubernetes traitent ces problèmes.
Lancer l'imagehelm install
Je souhaite installer MySQL sur mon cluster. Mais je n'ai pas besoin de la version de MySQL qui stable/MySQL
s'installe dans le fichier values.yaml du référentiel officiel de graphiques . Donc, je crée mon propre fichier values.yaml
nommé mysql-values.yaml
avec une seule ligne:
imageTag: “5.7.10”
Puis je cours helm install stable/mysql --values=mysqlvalues.yaml
.
Helm (ignorant-camel
), MySQL . kubectl describe pod ignorant-camel-mysql-5dc6b947b-lf6p8
, imageTag
.
, , imageTag . helm install stabe/mysql --values=mysqlvalues.yaml --dry-run --debug
, Helm Kubernetes, .
Kubernetes , Helm Chart:
├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── deployment.yaml │ ├── secrets.yaml │ └── ...more yaml... └── values.yaml
helm install stable/mysql
, values.yaml
Helm (, ) yaml , Kubernetes. helm install stable/mysql
, . , .
, values.yaml
— , , . , values.yaml
, , .
values.yaml
. , , . requirements.yaml
, , . , values.yaml
. , c Helm.
, ,
. , , — Helm Charts.
Helm
, Kubernetes . Helm Chart , , :
• , values.yaml
? , , , ?
• , , , ?
• , , (, )?
• , ?
, Helm Charts. , , , .
, , . Helm, . Helm , . .
, . , , , Helm 3 Lua. .
1.
, env, values.yaml
:
- name: ENV_VAR1 value: {{ .Values.var1 }} - name: ENV_VAR2 value: {{ .Values.var2 }}
values.yaml
--set var1=foo
. , ? , , (, ENV_VAR1
var1
)? , . , , ?
Helm Charts, configmap
. / . configmap, unbound.conf. , . configmap
, :
{{- range .Values.localRecords }} local-data: "{{ .name }} A {{ .ip }}" local-data-ptr: "{{ .ip }} {{ .name }}" {{- end }}
values.yaml localRecords
, :
localRecords: - name: "fake3.host.net" ip: "10.12.10.10" - name: "fake4.host.net" ip: "10.13.10.10"
Sonarqube chart , extraEnv
:
{{- range $key, $value := .Values.extraEnv }} — name: {{ $key }} value: {{ $value }} {{- end }}
values.yaml
, :
extraEnv: - ENV_VAR1: var1 - ENV_VAR2: var2
extraEnv
, . Buildkite , . values.yaml
:
{{- if .Values.extraEnv }} {{ toYaml .Values.extraEnv | indent 12 }} {{- end }}
, , , extraEnv
values.yaml
, (
) (
) , :
extraEnv: — name: ENV_VAR1 value: "var1" — name: ENV_VAR2 value: "var2"
Keycloak :
{{- with .Values.keycloak.extraEnv }} {{ tpl . $ | indent 12 }} {{- end }}
, extraEnv
, tpl
, , . , , :
extraEnv: | — name: KEYCLOAK_LOGLEVEL value: DEBUG — name: HOSTNAME value: {{ .Release.Name }}-keycloak
{{ .Release.Name }}
values.yaml
, , tpl
. , , , ( ). , values.yaml
, .
2.
, Helm, , ( ) . , , .
, , — . , Xray Postgres. , Postgres ( , , ):
{{- if .Values.postgresql.enabled }} — name: POSTGRES_USER value: {{ .Values.postgresql.postgresUser }} — name: POSTGRESS_PASSWORD valueFrom: secretKeyRef: name: {{ .Release.Name }}-postgresql key: postgres-password — name: POSTGRESS_DB value: {{ .Values.postgresql.postgresDatabase }} {{- else }} ...
Xray
, , Postgres. , , ? . ?
extraEnv
, Keycloak. extraEnv
, Postgres, . values.yaml
:
extraEnv: | — name: POSTGRES_USER value: {{ .Values.postgresql.postgresUser }} — name: POSTGRESS_PASSWORD valueFrom: secretKeyRef: name: {{ .Release.Name }}-postgresql key: postgres-password — name: POSTGRESS_DB value: {{ .Values.postgresql.postgresDatabase }}
|
, , tpl
.
, , configmap. — .Files.Get
. , values.yaml, , . , .Files.Get tpl. configmap , :
conf_file1: {{ tpl (.Files.Get "files/conf_file1") . | quote }}
Secret base64:
conf_file1: {{ tpl (.Files.Get "files/conf_file1") . | b64enc | quote }}
{{ (tpl (.Files.Glob "files/*").AsConfig . ) | indent 2 }}
AsSecret
, tpl
. , Glob Get :
{{ range $path, $bytes := .Files.Glob "files/*" }} {{ base $path }}: '{{ tpl ($root.Files.Get $path) . | b64enc }}' {{ end }}
3. -
extraEnv
Keycloak
, , , . , Keycloak Keycloak
, JSON
, Keycloak
. , extraVolumes
:
{{- with .Values.keycloak.extraVolumes }} {{ tpl . $ | indent 8 }} {{- end }}
extraVolumeMounts
:
volumeMounts: - name: scripts mountPath: /scripts {{- with .Values.keycloak.extraVolumeMounts }} {{ tpl . $ | indent 12 }} {{- end }}
extraVolumes: | — name: custom-secret secret: secretName: custom-secret extraVolumeMounts: | - name: custom-secret mountPath: "/realm/" readOnly: true
(volumes) volumeMounts
values.yaml
. , , initContainers
( sidecars
). , , .
Keycloak , preStartScript, :
{{- with .Values.keycloak.preStartScript }} echo 'Running custom pre-start script...' {{ . | indent 4 }} {{- end }}
, , .Values.keycloak.preStartScript
values.yaml
. , , .
4.
Helm, helm create
, (Service), Ingress. Ingress. , . , RabbitMQ, , Ingress :
{{- if .Values.ingress.enabled }} ... {{-end}
, RabbitMQ , (host-based):
rules: {{- if .Values.ingress.hostName }} - host: {{ .Values.ingress.hostName }} http: {{- else }} - http: {{- end }}
RabbitMQ ( else ). , (, RabbitMQ , ):
- path: {{ default "/" .path }} backend: serviceName: {{ template "rabbitmq.fullname" . }} servicePort: {{ .Values.rabbitmq.managerPort }}
, , .
{{- with .Values.ingress.annotations }} annotations: {{ toYaml . | indent 4 }} {{- end }}
values.yaml
, :
annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /
, .yaml , , . , , , . , NGINX :
annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/configuration-snippet: | more_set_headers 'Access-Control-Allow-Origin: $http_origin';
Art of the Helm Chart
Helm Chart , . , , . . , , , .
Il y a d'autres problèmes que nous n'avons pas couverts, tels que les tests et la sécurité. C'était juste un regard sur un morceau spécifique des graphiques officiels. J'ai essayé de me concentrer sur les modèles que je trouve particulièrement utiles pour amener les utilisateurs à faire ce qu'ils veulent avec vos graphiques. Les graphiques officiels de Kubernetes m'ont été extrêmement utiles lorsque je travaillais sur les graphiques Helm pour le projet Activity . Espérons que l'explication contenue dans cet article aidera à encourager les autres à se plonger dans le repo officiel et à s'inspirer de ses graphiques.