Syntax highlighting of f9224ed ~( devops/kubernetes/helm)
= Helm = <<TableOfContents()>> [[https://helm.sh/||class=" moin-https"]] [[https://helm.sh/docs/intro/install/|Installing Helm|class=" moin-https"]] https://codersociety.com/blog/articles/helm-best-practices == Commands == === Env === {{{ helm env # ... # HELM_NAMESPACE }}} === repo === https://helm.sh/docs/helm/helm_repo/ {{{#!highlight bash # --- список "добавленных" репозиториев helm repo list # --- добавить репозиторий helm repo add \ nexus https://repo.corp.tander.ru/repository/cross-docking-charts \ --ca-file ./certs/TanderCorpCA.crt # --- обновление репозитория # выполняется всегда, после helm add helm repo update }}} === search === https://helm.sh/docs/helm/helm_search/ Helm Hub {{{#!highlight bash # --- search for charts in Helm Hub helm search hub loki # --- search for carts without output truncate helm search hub loki --max-col-width=0 }}} Repo {{{#!highlight bash # --- поиск крайней версии схемы в репозиториях, которые добавляются через helm repo addи (всех добавленных репозиториях?) helm search repo kdk-standalone # --- поиск крайней версии схемы для мажорной версии 0 # подходят версии: 0.0.1, 0.1.0, 0.1.1, 0.123.123 # не подходят версии: 1.0.0, 2.х.y helm search repo kdk-standalone --version 0 # --- поиск крайней версии для мажорной и минорной версии # подходят версии: 1.2.0, 1.2.1, 1.2.123 # не подходят версии: 1.1.0, 1.3.0, 2.x.y helm search repo kdk-standalone --version 1.2 # --- поиск всех версий схемы helm search repo kdk-cluster --versions # NAME CHART VERSION APP VERSION DESCRIPTION # nexus/kdk-cluster 2.5.7 2 cross-docking cluster # nexus/kdk-cluster 2.5.6 2 cross-docking cluster # nexus/kdk-cluster 2.5.5 2 cross-docking cluster # nexus/kdk-cluster 2.5.3 2 cross-docking cluster # nexus/kdk-cluster 2.5.2 2 cross-docking cluster }}} === show chart info === {{{#!highlight bash # --- show the chart definition helm show chart bitnami/wordpress # --- show chart README helm show readme bitnami/wordpress # --- show chart values helm show values bitnami/wordpress # --- show all information about chart helm show all bitnami/wordpress }}} === inspecting release === {{{#!highlight bash helm get hooks RELEASE_NAME --namespace NAMESPACE helm get manifest RELEASE_NAME --namespace NAMESPACE helm get notes RELEASE_NAME --namespace NAMESPACE helm get values RELEASE_NAME --namespace NAMESPACE # --- history helm history RELEASE_NAME }}} === install / upgrade === {{{#!highlight bash helm install --debug --dry-run test . # --set - values from command line # --values - values from YAML file or URL # --- install wordpress helm install wordpress bitnami/wordpress \ --values=wordpress-values.yaml \ --namespace chapter3 \ --version 8.1.0 # --- upgrade wordpress helm upgrade ... }}} === rollback / uninstall === {{{#!highlight bash helm rollback RELEASE_NAME [REVISION] [flags] helm uninstall RELEASE_NAME }}} == Creating chart == Scaffolding the initial file scructure {{{#!highlight bash helm create guestbook cd guestbook }}} Modifying values {{{#!highlight yaml # values.yaml redis: fullnameOverride: redis auth.enabled: false commonConfiguration: |- appendonly no }}} Install chart {{{#!highlight bash helm install my-guestbook . }}} Access to application {{{#!highlight bash k get po export NODE_PORT=$(kubectl get --namespace chapter5 -o jsonpath="{.spec.ports[0].nodePort}" services my-guestbook) export NODE_IP=$(kubectl get nodes --namespace chapter5 -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT }}} == Dependencies == . See p. 120 in Learn Helm Packt https://trello.com/c/FmnGbXCi Find char dependency {{{#!highlight bash helm search hub redis helm add repo bitnami https://charts.bitnami.com helm search repo redis --versions | head }}} Adding dependency and downloading it {{{#!highlight yaml # Chart.yaml dependencies: - name: redis version: 16.8.9 repository: https://charts.bitnami.com/bitnami }}} {{{#!highlight bash helm dependency update }}} Show dependency values {{{#!highlight bash helm show values charts/redis-VERSION.tgz }}} == Templates == === if / else === {{{ readinessProbe: {{- if .Values.probeType.httpGet }} httpGet: path: /healthz port: 8080 scheme: HTTP {{- else }} tcpSocket: port: 8080 {{- end }} initialDelaySeconds: 30 periodSeconds: 10 }}} === with === {{{ # --- NO with cpu: {{ .Values.application.resources.limits.cpu }} memory: {{ .Values.application.resources.limits.memory }} # --- YES with {{- with .Values.application.resources.limits }} cpu: {{ .cpu }} memory: {{ .memory }} {{- end }} }}} === range === {{{ # values.yaml servicePorts: - name: http port: 8080 - name: https port: 8443 - name: jolokia port: 8778 # templates/foo.yaml spec: ports: {{- range .Values.servicePorts }} - name: {{ - name }} port: {{ .port }} {{- end }} # --- or {{- range .Values.servicePorts }} - name: {{ $.Release.Name }}-{{ .name }} port: {{ .port }} {{- end }} }}} === Variables === {{{ {{ $myvar := 'Hello World!' }} {{ $myvar := .Values.greeting }} # ... data: greeting.txt: | {{ $myvar }} }}} Using variables in a range block with index {{{ data: greetings.txt: | {{- range $index, $value := .Values.greetings }} Greeting {{ $index }}: {{ $value }} {{- end }} # --- same as data: greetings.txt: | Greeting 0: Hello Greeting 1: Hola Greeting 2: Hallo }}} Using variables in a range block with key (???) {{{ data: greetings.txt: | {{- range $key, $val := .Values.greetings }} Greeting in {{ $key }}: {{ $val }} {{- end }} # --- same as data: greetings.txt: | Greeting in English: Hello Greeting in Spain: Hola Greeting in German: Hallo }}} Using variables to refer to a value outside of the current scope {{{ # --- FAIL # .Release.Name is not under scope of .Values.application.configuration {{- with .Values.application.configuration }} My application is called {{ .Release.Name }} {{- end }} # --- OK {{ $appName := .Release.Name }} {{- with .Values.application.configuration }} My application is called {{ $appName }} {{- end }} }}} === Template functions === See https://helm.sh/docs/chart_template_guide/function_list/ === Named Templates === {{{ # templates/_helper.tpl {{- define 'mychart.labels' }} labels: 'app.kubernetes.io/instance': {{ .Release.Name }} 'app.kubernetes.io/managed-by': {{ .Release.Service }} {{- end }} }}} Using named template by `include [TEMPLATE_NAME] [SCOPE]` {{{ # templates/some-resource.yaml metadata: name: {{ .Release.Name }} {{- include 'mycharts.labels' . | indent 2 }} }}} We can use `template` action instead `include`, but we can't use pipelines in this case. == Hooks == {{{ apiVersion: batch/v1 kind: Job metadata: name: helm-auditing annotations: 'helm.sh/hook': pre-install,post-install spec: template: metadata: name: helm-auditing spec: restartPolicy: Never containers: - name: helm-auditing command: ["/bin/sh", "-c", "echo Hook executed at $(date)"] image: alpine }}} {{https://clck.ru/sSM2x|helm hook annotations}} == Troubleshooting == === Error: directory charts/redis not found === Для новых зависимостей команда обновления выдает ошибку {{{ helm dependency update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "bitnami" chart repository Update Complete. ⎈Happy Helming!⎈ Error: directory charts/redis not found }}} Ошибка выдавалась по причине ошибки в слове `repository` в описании зависимости в Chart.yaml.install {{{ helm install --debug --dry-run test . }}} . Written with [[https://stackedit.io/|StackEdit|class=" moin-https"]].
