Helm: Helm peut-il accepter d'ignorer {{expr}} qui est juste pour la configuration mais pas pour le rendu?

Créé le 12 août 2017  ·  16Commentaires  ·  Source: helm/helm

Il existe un cas d'utilisation: déployer Prometheus en tant que StatefulSet et configurer les règles d'alerte en tant que ConfigMap .

_alerting-rules_ peut prendre plus de détails ici: https://prometheus.io/docs/alerting/rules/#alerting -rules

On dirait:
ALERT InstanceMemoryOverload IF node_memory_Active >= 1 FOR 1m LABELS { service = "k8s_metrics", alertname = "InstanceMemoryOverload" } ANNOTATIONS { summary = "Instance {{ $labels.instance }} memory overload", description = "{{ $labels.instance }} memory overload for more than 1 minutes, now is {{ $value }}." }
Helm peut-il accepter d'ignorer {{expr}} qui est juste pour la configuration mais pas le rendu?

questiosupport

Commentaire le plus utile

Un hack viable consiste à laisser Helm rendre le modèle sous forme de chaîne brute. Notez la parenthèse bouclée d'ouverture et de fermeture avec un backtick:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Tous les 16 commentaires

J'ai un cas d'utilisation similaire pour avoir un modèle de style go dans une carte de configuration. En ce moment, helm essaie d'évaluer le modèle et provoque des erreurs dans la carte de configuration.

J'ai rencontré ce même problème / similaire il y a quelque temps et je l'ai résolu en intégrant les règles d'alerte dans des fichiers séparés, comme

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "fullname" . }}-rules
  labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
    role: {{ template "fullname" . }}-rulefiles
    prometheus: {{ template "fullname" . }}
data:
  {{ (.Files.Glob "files/kubernetes.rules").AsConfig }}
  {{ (.Files.Glob "files/etcd2.rules").AsConfig }}
  {{ (.Files.Glob "files/custom_alert.rules").AsConfig }}

AFAIK, il est extrêmement difficile d'échapper à {{ }} dans un modèle go, et insérer les fichiers depuis ailleurs est beaucoup plus simple.

La façon d'échapper aux doubles accolades dans les modèles Go consiste à utiliser {{ "{{" }} . Ce n'est pas extrêmement difficile, juste moche.

Je vais fermer ce problème car nous avons deux solutions distinctes au problème, mais veuillez rouvrir si cela n'a pas été résolu.

@bacongobbler Bonjour Matthew, je me suis battu pour échapper aux accolades dans un modèle Helm dans Markdown. Peut-être que je ne comprends pas votre solution. Comment puis-je rendre cela correctement?
(juste un extrait). J'ai essayé raw / endraw, pre, simple backslash, double backslash - pas de succès!
merci pour toute suggestion ... J'essaie de mettre cela dans un bloc de code avec des retraits ou des backticks.

  apiVersion: apps/v1beta1
  kind: Deployment
  metadata:
    name: {{ template "fullname" . }}

@bacongobbler J'ai trouvé la solution. Je dois utiliser à la fois pré et &123; &125;

@bacongobbler J'ai trouvé la solution. Je dois utiliser à la fois pré et &123; &125;

Pourriez-vous s'il vous plaît montrer un exemple?
Existe-t-il un moyen d'exclure un yaml du moteur de modèle?

Un hack viable consiste à laisser Helm rendre le modèle sous forme de chaîne brute. Notez la parenthèse bouclée d'ouverture et de fermeture avec un backtick:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Un hack viable consiste à laisser Helm rendre le modèle sous forme de chaîne brute. Notez la parenthèse bouclée d'ouverture et de fermeture avec un backtick:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Merci beaucoup. Cela a résolu le gros problème

vous pouvez également utiliser printf pour cela:

{{ printf "{{ some value }}" }}

Un hack viable consiste à laisser Helm rendre le modèle sous forme de chaîne brute. Notez la parenthèse bouclée d'ouverture et de fermeture avec un backtick:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

ça marche, merci

apiVersion: v1
genre: ConfigMap
métadonnées:
nom: {{template "fullname". }}-des règles
Étiquettes:
graphique: "{{.Chart.Name}} - {{.Chart.Version | replace" + "" _ "}}"
rôle: {{template "fullname". }} - fichiers de règles
prometheus: {{template "fullname". }}
Les données:
{{(.Files.Glob "files / kubernetes.rules"). AsConfig}}
{{(.Files.Glob "fichiers / etcd2.rules"). AsConfig}}
{{(.Files.Glob "files / custom_alert.rules"). AsConfig}}

Cela n'a pas fonctionné pour moi.
Après m'être cogné la tête pendant 2 jours, j'ai pu faire le travail suivant!

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "fullname" . }}-rules
  labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
    role: {{ template "fullname" . }}-rulefiles
    prometheus: {{ template "fullname" . }}
data:
  {{- (.Files.Glob "files/kubernetes.rules").AsConfig | nindent 2}}

Un hack viable consiste à laisser Helm rendre le modèle sous forme de chaîne brute. Notez la parenthèse bouclée d'ouverture et de fermeture avec un backtick:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Je peux ajouter au chœur des confirmations que cela fonctionne toujours.

Et vous en aurez peut-être besoin pour que cela fonctionne:

https://www.vaultproject.io/docs/platform/k8s/injector/examples/

cat <<EOF >> ./patch.yaml
spec:
  template:
    metadata:
      annotations:
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-status: "update"
        vault.hashicorp.com/agent-inject-secret-db-creds: "database/creds/db-app"
        vault.hashicorp.com/agent-inject-template-db-creds: |
          {{- with secret "database/creds/db-app" -}}
          postgres://{{ .Data.username }}:{{ .Data.password }}<strong i="13">@postgres</strong>:5432/appdb?sslmode=disable
          {{- end }}
        vault.hashicorp.com/role: "db-app"
        vault.hashicorp.com/ca-cert: "/vault/tls/ca.crt"
        vault.hashicorp.com/client-cert: "/vault/tls/client.crt"
        vault.hashicorp.com/client-key: "/vault/tls/client.key"
        vault.hashicorp.com/tls-secret: "vault-tls-client"
EOF
spec:
  groups:
  - name: alertrules.kafkalag
    rules:
    - alert: AssessmentAggregator lag
      expr: sum(samza_pipeline_metrics_consumer_lag{job_name= "AssessmentAggregator"}) > {{ .Values.assessment_aggregator_threshold }}
      for: 5m
      labels:
        severity: critical
      annotations:
        message: {{`"AssessmentAggregator lag is {{$value}}"`}}
        summary: AssessmentAggregator lag is Critical
````
You can add 

{{ ....... }}
''
et modèle correctement

Un hack viable consiste à laisser Helm rendre le modèle sous forme de chaîne brute. Notez la parenthèse bouclée d'ouverture et de fermeture avec un backtick:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Malheureusement, cela ne fonctionne pas avec promtool . https://prometheus.io/docs/prometheus/latest/configuration/unit_testing_rules/

spec:
  groups:
  - name: alertrules.kafkalag
    rules:
    - alert: AssessmentAggregator lag
      expr: sum(samza_pipeline_metrics_consumer_lag{job_name= "AssessmentAggregator"}) > {{ .Values.assessment_aggregator_threshold }}
      for: 5m
      labels:
        severity: critical
      annotations:
        message: {{`"AssessmentAggregator lag is {{$value}}"`}}
        summary: AssessmentAggregator lag is Critical

Vous pouvez ajouter

{{` ....... `}}

et modèle correctement

Impressionnant!!!. Ça a marché. Merci.

Cette page vous a été utile?
0 / 5 - 0 notes