Há um caso de uso: implantar Prometheus como StatefulSet e config alerting-rules como ConfigMap .
_alerting-rules_ pode obter mais detalhes aqui: https://prometheus.io/docs/alerting/rules/#alerting -rules
parece:
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 }}."
}
O Helm pode suportar para ignorar {{expr}} que é apenas para configuração, mas não para renderização?
Eu tenho um caso de uso semelhante para ter um modelo de estilo go em um mapa de configuração. No momento, o helm está tentando avaliar o modelo e causando erros no mapa de configuração.
Encontrei este mesmo / semelhante problema há algum tempo e resolvi incorporando incluindo as regras de alerta como arquivos separados, como
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 é extremamente difícil escapar de {{ }}
em um modelo go, e roubar os arquivos de outro lugar é muito mais simples.
A maneira de escapar das chaves duplas nos modelos Go é usar {{ "{{" }}
. Não é extremamente difícil, apenas feio.
Vou encerrar este problema, pois temos duas soluções separadas para o problema, mas reabra se isso não tiver sido resolvido.
@bacongobbler Olá Matthew, tenho lutado para saber como escapar das chaves em um modelo do Helm no markdown. Talvez eu não esteja entendendo sua solução. Como eu renderizaria isso corretamente?
(apenas um trecho). Eu tentei raw / endraw, pre, barra invertida simples, barra invertida dupla - sem sucesso!
obrigado por qualquer sugestão ... Estou tentando colocar isso no bloco de código com recuos ou crases.
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
@bacongobbler encontrei a solução. Eu preciso usar o pré e &123; &125;
@bacongobbler encontrei a solução. Eu preciso usar o pré e
&123; &125;
Você poderia dar um exemplo?
Existe uma maneira de excluir um yaml do mecanismo de modelo?
Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:
# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
slack_configs:
- text: |-
{{`{{ range .Alerts }}
*Alert:* {{ .Annotations.summary }}
{{ end }}`}}
Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
Muito obrigado. Isso resolveu o grande problema
você também pode usar printf para isso:
{{ printf "{{ some value }}" }}
Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
funciona, obrigado
apiVersion: v1
tipo: ConfigMap
metadados:
nome: {{template "fullname". }}-as regras
etiquetas:
gráfico: "{{.Chart.Name}} - {{.Chart.Version | substituir" + "" _ "}}"
papel: {{template "fullname". }} - arquivos de regras
prometheus: {{template "fullname". }}
dados:
{{(.Files.Glob "files / kubernetes.rules"). AsConfig}}
{{(.Files.Glob "files / etcd2.rules"). AsConfig}}
{{(.Files.Glob "files / custom_alert.rules"). AsConfig}}
Isso não funcionou para mim.
Depois de bater minha cabeça por 2 dias, consegui fazer o seguinte trabalho!
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}}
Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
Posso acrescentar ao coro de confirmações que isso ainda funciona.
E você pode precisar para fazer isso funcionar:
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
{{ .......
}}
`` `
e modelará corretamente
Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
Infelizmente, isso não funciona usando 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
Você pode adicionar
{{` ....... `}}
e modelará corretamente
Impressionante!!!. Funcionou. Obrigado.
Comentários muito úteis
Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase: