ユースケースがあります。PrometheusをStatefulSetとしてデプロイし、アラートルールをデプロイします。
_alerting-rules_は、ここで詳細を確認できます: https ://prometheus.io/docs/alerting/rules/#alerting -rules
それは次のようになります:
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は、構成専用でレンダリング用ではない{{expr}}を無視することをサポートできますか?
構成マップにgoスタイルテンプレートを含めるのと同様のユースケースがあります。 現在、helmはテンプレートを評価しようとしており、構成マップでエラーが発生しています。
私はしばらく前にこの同じ/同様の問題に遭遇し、アラートルールを別々のファイルとして含めることによってそれを解決しました。
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は、goテンプレートで{{ }}
をエスケープすることは非常に困難であり、他の場所からファイルを丸呑みすることははるかに簡単です。
Goテンプレートで二重中括弧をエスケープする方法は、 {{ "{{" }}
を使用することです。 それは非常に難しいことではなく、ただ醜いです。
この問題には2つの個別の解決策があるため、この問題をクローズしますが、これが解決されていない場合は、再度開いてください。
@bacongobblerこんにちはマシュー、私は
(単なるスニペット)。 raw / endraw、pre、single backslash、double backslashを試しましたが、成功しませんでした。
提案をありがとう...私はこれをインデントまたはバッククォートのいずれかでコードブロックに入れようとしています。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
@bacongobbler私は解決策を見つけました。 preと&123; &125;
両方を使用する必要があります
@bacongobbler私は解決策を見つけました。 preと
&123; &125;
両方を使用する必要があります
例を挙げていただけますか?
テンプレートエンジンから1つのyamlを除外する方法はありますか?
実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。
# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
slack_configs:
- text: |-
{{`{{ range .Alerts }}
*Alert:* {{ .Annotations.summary }}
{{ end }}`}}
実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
どうもありがとうございました。 それは大きな問題を解決しました
そのためにprintfを使用することもできます。
{{ printf "{{ some value }}" }}
実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
それは動作します、thx
apiVersion:v1
種類:ConfigMap
メタデータ:
名前:{{テンプレート "フルネーム"。 }}-ルール
ラベル:
チャート: "{{.Chart.Name}}-{{。Chart.Version | replace" + "" _ "}}"
役割:{{テンプレート "フルネーム"。 }}-ルールファイル
プロメテウス:{{テンプレート "フルネーム"。 }}
データ:
{{(.Files.Glob "files / kubernetes.rules")。AsConfig}}
{{(.Files.Glob "files / etcd2.rules")。AsConfig}}
{{(.Files.Glob "files / custom_alert.rules")。AsConfig}}
これは私にはうまくいきませんでした。
2日間頭を叩いた後、次の仕事ができました!
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}}
実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
これがまだ機能していることを確認の合唱に追加できます。
そして、これを機能させるためにそれが必要になるかもしれません:
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
{{ .......
}}
`` `
正しくテンプレート化されます
実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。
# Excerpt from a Prometheus Alertmanager yaml receivers: - name: slack-receiver slack_configs: - text: |- {{`{{ range .Alerts }} *Alert:* {{ .Annotations.summary }} {{ end }}`}}
残念ながら、これは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
あなたは付け加えられます
{{` ....... `}}
正しくテンプレート化されます
驚くばかり!!!。 動いた。 ありがとう。
最も参考になるコメント
実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。