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?
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.
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: