Patch Relase 2.19.4 #43

Merged
stefan merged 21 commits from master into stable 2021-04-27 09:44:20 +00:00
135 changed files with 29486 additions and 229 deletions

View File

@ -0,0 +1 @@
../kubezero-istio/.helmignore

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-istio-ingress
description: KubeZero Umbrella Chart for Istio based Ingress
type: application
version: 0.5.2
version: 0.5.6
appVersion: 1.9.3
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png

View File

@ -17,6 +17,8 @@ spec:
{{- if $gateway.replicaCount }}
replicas: {{ $gateway.replicaCount }}
{{- end }}
# Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ??
minReadySeconds: 120
{{- end }}
selector:
matchLabels:
@ -69,7 +71,7 @@ spec:
{{- if .Values.global.priorityClassName }}
priorityClassName: "{{ .Values.global.priorityClassName }}"
{{- end }}
terminationGracePeriodSeconds: 90
terminationGracePeriodSeconds: 120
{{- if .Values.global.proxy.enableCoreDump }}
initContainers:
- name: enable-core-dump
@ -141,6 +143,11 @@ spec:
privileged: false
readOnlyRootFilesystem: true
{{- end }}
#This needs kube-proxy support coming with 1.22 hopefully, cilium ?
#lifecycle:
# preStop:
# exec:
# command: ["/bin/sh","-c","sleep 30"]
readinessProbe:
failureThreshold: 30
httpGet:

View File

@ -17,6 +17,8 @@ spec:
{{- if $gateway.replicaCount }}
replicas: {{ $gateway.replicaCount }}
{{- end }}
# Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ??
minReadySeconds: 120
{{- end }}
selector:
matchLabels:
@ -69,7 +71,7 @@ spec:
{{- if .Values.global.priorityClassName }}
priorityClassName: "{{ .Values.global.priorityClassName }}"
{{- end }}
terminationGracePeriodSeconds: 90
terminationGracePeriodSeconds: 120
{{- if .Values.global.proxy.enableCoreDump }}
initContainers:
- name: enable-core-dump
@ -141,6 +143,11 @@ spec:
privileged: false
readOnlyRootFilesystem: true
{{- end }}
#This needs kube-proxy support coming with 1.22 hopefully, cilium ?
#lifecycle:
# preStop:
# exec:
# command: ["/bin/sh","-c","sleep 30"]
readinessProbe:
failureThreshold: 30
httpGet:

View File

@ -0,0 +1,61 @@
# https://www.envoyproxy.io/docs/envoy/v1.17.1/configuration/best_practices/edge#configuring-envoy-as-an-edge-proxy
# https://github.com/istio/istio/issues/24715
{{- if or (index .Values "istio-ingress" "enabled") (index .Values "istio-private-ingress" "enabled") }}
apiVersion: v1
kind: ConfigMap
metadata:
name: istio-gateway-bootstrap-config
namespace: {{ .Release.Namespace }}
labels:
{{ include "kubezero-lib.labels" . | indent 4 }}
data:
custom_bootstrap.json: |
{
"overload_manager": {
"actions": [
{
"name": "envoy.overload_actions.shrink_heap",
"triggers": [
{
"name": "envoy.resource_monitors.fixed_heap",
"threshold": {
"value": 0.9
}
}
]
},
{
"name": "envoy.overload_actions.stop_accepting_requests",
"triggers": [
{
"name": "envoy.resource_monitors.fixed_heap",
"threshold": {
"value": 0.99
}
}
]
}
],
"refresh_interval": "0.25s",
"resource_monitors": [
{
"name": "envoy.resource_monitors.fixed_heap",
"typed_config": {
"@type": "type.googleapis.com/envoy.config.resource_monitor.fixed_heap.v2alpha.FixedHeapConfig",
"max_heap_size_bytes": 536870912
}
}
]
},
"layeredRuntime": {
"layers": [
{
"name": "static_layer_0",
"staticLayer": {
"overload.global_downstream_max_connections": 50000
}
}
]
}
}
{{- end }}

View File

@ -0,0 +1,38 @@
{{- if or (index .Values "istio-ingress" "enabled") (index .Values "istio-private-ingress" "enabled") }}
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: ingressgateway-hardening
namespace: {{ .Release.Namespace }}
labels:
{{ include "kubezero-lib.labels" . | indent 4 }}
spec:
configPatches:
- applyTo: CLUSTER
patch:
operation: MERGE
value:
connect_timeout: 15s
per_connection_buffer_limit_bytes: 32768 # 32 KiB
- applyTo: NETWORK_FILTER
match:
listener:
filterChain:
filter:
name: "envoy.filters.network.http_connection_manager"
patch:
operation: MERGE
value:
name: "envoy.filters.network.http_connection_manager"
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager"
common_http_protocol_options:
idle_timeout: 3600s # 1 hour
# headers_with_underscores_action: REJECT_REQUEST
http2_protocol_options:
max_concurrent_streams: 500
initial_stream_window_size: 65536 # 64 KiB
initial_connection_window_size: 1048576 # 1 MiB
#stream_idle_timeout: 300s # 5 mins, must be disabled for long-lived and streaming requests
#request_timeout: 300s # 5 mins, must be disabled for long-lived and streaming requests
{{- end }}

View File

@ -0,0 +1,33 @@
{{- if or (index .Values "istio-ingress" "enabled") (index .Values "istio-private-ingress" "enabled") }}
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: ingressgateway-listener-tcp-keepalive
namespace: {{ .Release.Namespace }}
labels:
{{ include "kubezero-lib.labels" . | indent 4 }}
spec:
configPatches:
- applyTo: LISTENER
patch:
operation: MERGE
value:
socket_options:
# SOL_SOCKET = 1
# SO_KEEPALIVE = 9
- level: 1
name: 9
int_value: 1
state: STATE_LISTENING
# IPPROTO_TCP = 6
# TCP_KEEPIDLE = 4
- level: 6
name: 4
int_value: 60
state: STATE_LISTENING
# TCP_KEEPINTVL = 5
- level: 6
name: 5
int_value: 60
state: STATE_LISTENING
{{- end }}

View File

@ -1,70 +0,0 @@
{{- if index .Values "istio-ingress" "enabled" }}
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: ingressgateway-listener-tcp-keepalive
namespace: {{ .Release.Namespace }}
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: LISTENER
patch:
operation: MERGE
value:
socket_options:
# SOL_SOCKET = 1
# SO_KEEPALIVE = 9
- level: 1
name: 9
int_value: 1
state: STATE_LISTENING
# IPPROTO_TCP = 6
# TCP_KEEPIDLE = 4
- level: 6
name: 4
int_value: 60
state: STATE_LISTENING
# TCP_KEEPINTVL = 5
- level: 6
name: 5
int_value: 60
state: STATE_LISTENING
{{- end }}
{{- if index .Values "istio-private-ingress" "enabled" }}
---
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: private-ingressgateway-listener-tcp-keepalive
namespace: {{ .Release.Namespace }}
spec:
workloadSelector:
labels:
istio: private-ingressgateway
configPatches:
- applyTo: LISTENER
patch:
operation: MERGE
value:
socket_options:
# SOL_SOCKET = 1
# SO_KEEPALIVE = 9
- level: 1
name: 9
int_value: 1
state: STATE_LISTENING
# IPPROTO_TCP = 6
# TCP_KEEPIDLE = 4
- level: 6
name: 4
int_value: 60
state: STATE_LISTENING
# TCP_KEEPINTVL = 5
- level: 6
name: 5
int_value: 60
state: STATE_LISTENING
{{- end }}

View File

@ -0,0 +1,35 @@
{{- if or ( index .Values "istio-ingress" "telemetry" "enabled" ) ( index .Values "istio-private-ingress" "telemetry" "enabled" )}}
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: envoy-stats-monitor
namespace: {{ .Release.Namespace }}
labels:
{{ include "kubezero-lib.labels" . | indent 4 }}
spec:
selector:
matchExpressions:
- {key: istio-prometheus-ignore, operator: DoesNotExist}
jobLabel: envoy-stats
podMetricsEndpoints:
- path: /stats/prometheus
relabelings:
- action: keep
sourceLabels: [__meta_kubernetes_pod_container_name]
regex: "istio-proxy"
- action: keep
sourceLabels: [__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape]
- sourceLabels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
targetLabel: __address__
- action: labeldrop
regex: "__meta_kubernetes_pod_label_(.+)"
- sourceLabels: [__meta_kubernetes_namespace]
action: replace
targetLabel: namespace
- sourceLabels: [__meta_kubernetes_pod_name]
action: replace
targetLabel: pod_name
{{- end }}

View File

@ -17,10 +17,15 @@ global:
istio-ingress:
enabled: false
telemetry:
enabled: false
gateways:
istio-ingressgateway:
autoscaleEnabled: false
replicaCount: 1
rollingMaxSurge: 1
rollingMaxUnavailable: 0
resources:
requests:
cpu: 50m
@ -35,9 +40,17 @@ istio-ingress:
topologyKey: kubernetes.io/hostname
values: istio-ingressgateway
type: NodePort
podAnnotations:
proxy.istio.io/config: '{ "terminationDrainDuration": "20s" }'
# custom hardened bootstrap config
env:
TERMINATION_DRAIN_DURATION_SECONDS: '"60"'
# ISTIO_META_HTTP10: '"1"'
ISTIO_BOOTSTRAP_OVERRIDE: /etc/istio/custom-bootstrap/custom_bootstrap.json
configVolumes:
- name: custom-bootstrap-volume
mountPath: /etc/istio/custom-bootstrap
configMapName: istio-gateway-bootstrap-config
# The node selector is normally the list of nodeports, see CloudBender
nodeSelector:
node.kubernetes.io/ingress.public: "30080_30443"
@ -72,9 +85,17 @@ istio-ingress:
dnsNames: []
# - '*.example.com'
meshConfig:
defaultConfig:
proxyMetadata:
# ISTIO_META_HTTP10: 1
istio-private-ingress:
enabled: false
telemetry:
enabled: false
gateways:
istio-ingressgateway:
# name and labels make the ingress private
@ -85,6 +106,8 @@ istio-private-ingress:
autoscaleEnabled: false
replicaCount: 1
rollingMaxSurge: 1
rollingMaxUnavailable: 0
resources:
requests:
cpu: 50m
@ -99,13 +122,12 @@ istio-private-ingress:
topologyKey: kubernetes.io/hostname
values: istio-private-ingressgateway
type: NodePort
env:
TERMINATION_DRAIN_DURATION_SECONDS: '"60"'
# ISTIO_META_HTTP10: '"1"'
podAnnotations:
# sidecar.istio.io/bootstrapOverride: istio-gateway-bootstrap-config
proxy.istio.io/config: '{ "terminationDrainDuration": "20s" }'
nodeSelector:
node.kubernetes.io/ingress.private: "31080_31443"
#nodeSelector: "31080_31443_31671_31672_31224"
ports:
- name: status-port
port: 15021
@ -149,3 +171,7 @@ istio-private-ingress:
dnsNames: []
# - '*.example.com'
meshConfig:
defaultConfig:
proxyMetadata:
# ISTIO_META_HTTP10: 1

View File

@ -1,2 +1,3 @@
istioctl
istio-?.?.?
istio
istio.zdt

View File

@ -1,2 +1,31 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
README.md.gotmpl
*.patch
*.sh
*.py
istioctl
istio-?.?.?

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-istio
description: KubeZero Umbrella Chart for Istio
type: application
version: 0.5.3
version: 0.5.6
appVersion: 1.9.3
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png

View File

@ -22,3 +22,9 @@ Installs the Istio control plane
- https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#IstioOperatorSpec
- https://github.com/istio/istio/blob/master/manifests/profiles/default.yaml
- https://istio.io/latest/docs/setup/install/standalone-operator/
### Grafana
- https://grafana.com/grafana/dashboards/7645
- https://grafana.com/grafana/dashboards/7639
- https://grafana.com/grafana/dashboards/7636
- https://grafana.com/grafana/dashboards/7630

View File

@ -0,0 +1,21 @@
configmap: grafana-dashboards
gzip: true
folder: Istio
condition: 'index .Values "istio-discovery" "telemetry" "enabled"'
dashboards:
- name: istio-control-plane
url: https://grafana.com/api/dashboards/7645/revisions/60/download
tags:
- Istio
- name: istio-mesh
url: https://grafana.com/api/dashboards/7639/revisions/60/download
tags:
- Istio
- name: istio-service
url: https://grafana.com/api/dashboards/7636/revisions/60/download
tags:
- Istio
- name: istio-workload
url: https://grafana.com/api/dashboards/7630/revisions/60/download
tags:
- Istio

View File

@ -1,12 +0,0 @@
diff --git a/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml b/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml
index b69da65..b5137a4 100644
--- a/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml
+++ b/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml
@@ -63,6 +63,7 @@ spec:
{{- if .Values.global.priorityClassName }}
priorityClassName: "{{ .Values.global.priorityClassName }}"
{{- end }}
+ terminationGracePeriodSeconds: 90
{{- if .Values.global.proxy.enableCoreDump }}
initContainers:
- name: enable-core-dump

View File

@ -1,16 +0,0 @@
diff --git a/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml b/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml
index e4a983a..ba586de 100644
--- a/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml
+++ b/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml
@@ -59,6 +59,11 @@ spec:
{{- end }}
securityContext:
fsGroup: 1337
+ nodeSelector:
+ node-role.kubernetes.io/master: ""
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
containers:
- name: discovery
{{- if contains "/" .Values.pilot.image }}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,17 @@
{{- if index .Values "istio-discovery" "telemetry" "enabled" }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: istio-component-monitor
namespace: {{ .Release.Namespace }}
labels:
{{ include "kubezero-lib.labels" . | indent 4 }}
spec:
jobLabel: istio
targetLabels: [app]
selector:
matchExpressions:
- {key: istio, operator: In, values: [pilot]}
endpoints:
- port: http-monitoring
{{- end }}

View File

@ -1,37 +1,40 @@
#!/bin/bash
set -ex
### TODO
# - https://istio.io/latest/docs/ops/configuration/security/harden-docker-images/
export ISTIO_VERSION=1.9.3
if [ ! -d istio-$ISTIO_VERSION ]; then
NAME="istio-$ISTIO_VERSION"
URL="https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio-${ISTIO_VERSION}-linux-amd64.tar.gz"
curl -sL "$URL" | tar xz
fi
# Extract control plane charts
rm -rf charts/base charts/istio-*
cp -r istio-${ISTIO_VERSION}/manifests/charts/base charts/
cp -r istio-${ISTIO_VERSION}/manifests/charts/istio-control/istio-discovery charts/
# Patch for istiod to control plane
patch -p3 -i istio-discovery.patch --no-backup-if-mismatch
rm -rf istio
curl -sL "https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio-${ISTIO_VERSION}-linux-amd64.tar.gz" | tar xz
mv istio-${ISTIO_VERSION} istio
# remove unused old telemetry filters
rm -f charts/istio-discovery/templates/telemetryv2_1.[678].yaml
rm -f istio/manifests/charts/istio-control/istio-discovery/templates/telemetryv2_1.[678].yaml
# Ingress charts
# Patch
patch -p0 -i zdt.patch --no-backup-if-mismatch
### Create kubezero istio charts
# remove previous charts
rm -rf charts/base charts/istio-*
# create istio main chart
cp -r istio/manifests/charts/base charts/
cp -r istio/manifests/charts/istio-control/istio-discovery charts/
# Create ingress charts
rm -rf ../kubezero-istio-ingress/charts/istio-*
cp -r istio-${ISTIO_VERSION}/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/
cp -r istio-${ISTIO_VERSION}/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/istio-private-ingress
cp -r istio/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/
cp -r istio/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/istio-private-ingress
# Rename private chart
sed -i -e 's/name: istio-ingress/name: istio-private-ingress/' ../kubezero-istio-ingress/charts/istio-private-ingress/Chart.yaml
# Patch for ingress for extended termination grace period
patch -i ingress-terminationgraceperiod.patch ../kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml --no-backup-if-mismatch
patch -i ingress-terminationgraceperiod.patch ../kubezero-istio-ingress/charts/istio-private-ingress/templates/deployment.yaml --no-backup-if-mismatch
# Get matching istioctl
[ -x istioctl ] && [ "$(./istioctl version --remote=false)" == $ISTIO_VERSION ] || { curl -sL https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istioctl-${ISTIO_VERSION}-linux-amd64.tar.gz | tar xz; chmod +x istioctl; }
# Fetch dashboards from Grafana.com and update ZDT CM
../kubezero-metrics/sync_grafana_dashboards.py dashboards.yaml templates/grafana-dashboards.yaml

View File

@ -1,6 +1,6 @@
global:
# hub: docker.io/istio
# tag: 1.9.0
# tag: 1.9.3
logAsJson: true
jwtPolicy: first-party-jwt
@ -35,13 +35,5 @@ istio-discovery:
enabled: false
meshConfig:
defaultConfig:
terminationDrainDuration: 60s
# proxyMetadata:
# ISTIO_META_HTTP10: '"1"'
accessLogFile: /dev/stdout
accessLogEncoding: 'JSON'
h2UpgradePolicy: 'DO_NOT_UPGRADE'
tcpKeepalive:
interval: 30s
time: 60s

View File

@ -0,0 +1,47 @@
diff -turN istio/manifests/charts/gateways/istio-ingress/templates/deployment.yaml istio.zdt/manifests/charts/gateways/istio-ingress/templates/deployment.yaml
--- istio/manifests/charts/gateways/istio-ingress/templates/deployment.yaml 2021-04-11 01:57:29.000000000 +0200
+++ istio.zdt/manifests/charts/gateways/istio-ingress/templates/deployment.yaml 2021-04-20 12:20:04.401862116 +0200
@@ -17,6 +17,8 @@
{{- if $gateway.replicaCount }}
replicas: {{ $gateway.replicaCount }}
{{- end }}
+ # Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ??
+ minReadySeconds: 120
{{- end }}
selector:
matchLabels:
@@ -69,6 +71,7 @@
{{- if .Values.global.priorityClassName }}
priorityClassName: "{{ .Values.global.priorityClassName }}"
{{- end }}
+ terminationGracePeriodSeconds: 120
{{- if .Values.global.proxy.enableCoreDump }}
initContainers:
- name: enable-core-dump
@@ -140,6 +143,11 @@
privileged: false
readOnlyRootFilesystem: true
{{- end }}
+ #This needs kube-proxy support coming with 1.22 hopefully, cilium ?
+ #lifecycle:
+ # preStop:
+ # exec:
+ # command: ["/bin/sh","-c","sleep 30"]
readinessProbe:
failureThreshold: 30
httpGet:
diff -turN istio/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml istio.zdt/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml
--- istio/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml 2021-04-11 01:57:29.000000000 +0200
+++ istio.zdt/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml 2021-04-19 21:55:45.461749267 +0200
@@ -60,6 +60,11 @@
{{- end }}
securityContext:
fsGroup: 1337
+ nodeSelector:
+ node-role.kubernetes.io/master: ""
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
containers:
- name: discovery
{{- if contains "/" .Values.pilot.image }}

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-kiam
description: KubeZero Umbrella Chart for Kiam
type: application
version: 0.3.3
version: 0.3.4
appVersion: "4.0"
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png

View File

@ -0,0 +1,8 @@
configmap: grafana-dashboards-kiam
condition: '.Values.kiam.server.prometheus.servicemonitor.enabled'
gzip: true
folder: AWS
dashboards:
- name: kiam
url: https://raw.githubusercontent.com/uswitch/kiam/master/docs/dashboard-prom.json
tags: ['AWS']

File diff suppressed because one or more lines are too long

5
charts/kubezero-kiam/update.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
set -ex
# Fetch dashboards
../kubezero-metrics/sync_grafana_dashboards.py dashboards.yaml templates/grafana-dashboards.yaml

View File

@ -0,0 +1,14 @@
configmap: grafana-dashboards
gzip: true
folder: Logging
condition: '.Values.es.prometheus'
dashboards:
- name: fluent-logging
url: https://grafana.com/api/dashboards/7752/revisions/4/download
#url: https://grafana.com/api/dashboards/13042/revisions/2/download
tags:
- Fluent
- name: elasticsearch-logging
url: https://grafana.com/api/dashboards/266/revisions/4/download
tags:
- ECK

File diff suppressed because one or more lines are too long

View File

@ -15,3 +15,6 @@ rm -rf charts/fluentd
curl -L -s -o - https://github.com/fluent/helm-charts/releases/download/fluentd-${FLUENTD_VERSION}/fluentd-${FLUENTD_VERSION}.tgz | tar xfz - -C charts
patch -i fluentd.patch -p0 --no-backup-if-mismatch
# Fetch dashboards from Grafana.com and update ZDT CM
../kubezero-metrics/sync_grafana_dashboards.py dashboards.yaml templates/grafana-dashboards.yaml

View File

@ -205,7 +205,7 @@ fluent-bit:
enabled: false
serviceMonitor:
enabled: true
enabled: false
selector:
release: metrics
@ -216,7 +216,7 @@ fluent-bit:
resources:
requests:
cpu: 20m
memory: 16Mi
memory: 32Mi
limits:
memory: 64Mi

1
charts/kubezero-metrics/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
dashboards/vendor

View File

@ -21,3 +21,9 @@
.idea/
*.tmproj
.vscode/
README.md.gotmpl
*.patch
*.sh
*.py
dashboards

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-metrics
description: KubeZero Umbrella Chart for prometheus-operator
type: application
version: 0.3.5
version: 0.4.0
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png
keywords:
@ -16,7 +16,7 @@ dependencies:
version: ">= 0.1.3"
repository: https://zero-down-time.github.io/kubezero/
- name: kube-prometheus-stack
version: 14.9.0
version: 15.2.0
# Switch back to upstream once all alerts are fixed eg. etcd gpcr
# repository: https://prometheus-community.github.io/helm-charts
- name: prometheus-adapter

View File

@ -6,7 +6,7 @@ annotations:
url: https://github.com/prometheus-operator/kube-prometheus
artifacthub.io/operator: "true"
apiVersion: v2
appVersion: 0.46.0
appVersion: 0.47.0
dependencies:
- condition: kubeStateMetrics.enabled
name: kube-state-metrics
@ -19,7 +19,7 @@ dependencies:
- condition: grafana.enabled
name: grafana
repository: https://grafana.github.io/helm-charts
version: 6.7.*
version: 6.8.*
description: kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards, and Prometheus rules combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator.
home: https://github.com/prometheus-operator/kube-prometheus
icon: https://raw.githubusercontent.com/prometheus/prometheus.github.io/master/assets/prometheus_logo-cb55bb5c346.png
@ -44,4 +44,4 @@ sources:
- https://github.com/prometheus-community/helm-charts
- https://github.com/prometheus-operator/kube-prometheus
type: application
version: 14.9.0
version: 15.2.0

View File

@ -83,6 +83,19 @@ _See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documen
A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an incompatible breaking change needing manual actions.
### From 14.x to 15.x
Version 15 upgrades prometheus-operator from 0.46.x to 0.47.x. Helm does not automatically upgrade or install new CRDs on a chart upgrade, so you have to install the CRDs manually before updating:
```console
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
```
### From 13.x to 14.x
Version 14 upgrades prometheus-operator from 0.45.x to 0.46.x. Helm does not automatically upgrade or install new CRDs on a chart upgrade, so you have to install the CRDs manually before updating:

View File

@ -19,4 +19,4 @@ name: grafana
sources:
- https://github.com/grafana/grafana
type: application
version: 6.7.4
version: 6.8.0

View File

@ -63,6 +63,7 @@ This version requires Helm >= 3.1.0.
| `image.sha` | Image sha (optional) | `2b56f6106ddc376bb46d974230d530754bf65a640dfbc5245191d72d3b49efc6` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `image.pullSecrets` | Image pull secrets | `{}` |
| `service.enabled` | Enable grafana service | `true` |
| `service.type` | Kubernetes service type | `ClusterIP` |
| `service.port` | Kubernetes port where service is exposed | `80` |
| `service.portName` | Name of the port on the service | `service` |
@ -215,6 +216,7 @@ This version requires Helm >= 3.1.0.
| `imageRenderer.securityContext` | image-renderer deployment securityContext | `{}` |
| `imageRenderer.hostAliases` | image-renderer deployment Host Aliases | `[]` |
| `imageRenderer.priorityClassName` | image-renderer deployment priority class | `''` |
| `imageRenderer.service.enabled` | Enable the image-renderer service | `true` |
| `imageRenderer.service.portName` | image-renderer service port name | `'http'` |
| `imageRenderer.service.port` | image-renderer service port used by both service and deployment | `8081` |
| `imageRenderer.grafanaSubPath` | Grafana sub path to use for image renderer callback url | `''` |

View File

@ -197,11 +197,16 @@ containers:
- name: FOLDER_ANNOTATION
value: "{{ .Values.sidecar.dashboards.folderAnnotation }}"
{{- end }}
- name: SCRIPT
value: /opt/script.sh
resources:
{{ toYaml .Values.sidecar.resources | indent 6 }}
volumeMounts:
- name: sc-dashboard-volume
mountPath: {{ .Values.sidecar.dashboards.folder | quote }}
- name: script-volume
mountPath: /opt/script.sh
subPath: script.sh
{{- end}}
- name: {{ .Chart.Name }}
{{- if .Values.image.sha }}

View File

@ -19,8 +19,10 @@ data:
{{- range $elem, $elemVal := $value }}
{{- if kindIs "invalid" $elemVal }}
{{ $elem }} =
{{- else if kindIs "string" $elemVal }}
{{ $elem }} = {{ tpl $elemVal $ }}
{{- else }}
{{ $elem }} = {{ tpl (toYaml $elemVal) $ }}
{{ $elem }} = {{ $elemVal }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -1,4 +1,5 @@
{{ if .Values.imageRenderer.enabled }}
{{ if .Values.imageRenderer.service.enabled }}
apiVersion: v1
kind: Service
metadata:
@ -26,3 +27,4 @@ spec:
selector:
{{- include "grafana.imageRenderer.selectorLabels" . | nindent 4 }}
{{ end }}
{{ end }}

View File

@ -1,3 +1,4 @@
{{ if .Values.service.enabled }}
apiVersion: v1
kind: Service
metadata:
@ -47,4 +48,4 @@ spec:
{{- end }}
selector:
{{- include "grafana.selectorLabels" . | nindent 4 }}
{{ end }}

View File

@ -125,6 +125,7 @@ podPortName: grafana
## ref: http://kubernetes.io/docs/user-guide/services/
##
service:
enabled: true
type: ClusterIP
port: 80
targetPort: 3000
@ -688,6 +689,8 @@ imageRenderer:
# image-renderer deployment priority class
priorityClassName: ''
service:
# Enable the image-renderer service
enabled: true
# image-renderer service port name
portName: 'http'
# image-renderer service port used by both service and deployment

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
---
apiVersion: apiextensions.k8s.io/v1

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
---
apiVersion: apiextensions.k8s.io/v1

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
---
apiVersion: apiextensions.k8s.io/v1
@ -161,7 +161,7 @@ spec:
description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint.
type: string
relabelings:
description: 'RelabelConfigs to apply to samples before ingestion. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config'
description: 'RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields and replaces original scrape job name with __tmp_prometheus_job_name. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config'
items:
description: 'RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines `<metric_relabel_configs>`-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
properties:

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
---
apiVersion: apiextensions.k8s.io/v1
@ -35,6 +35,55 @@ spec:
spec:
description: Specification of desired Ingress selection for target discovery by Prometheus.
properties:
basicAuth:
description: 'BasicAuth allow an endpoint to authenticate over basic authentication. More info: https://prometheus.io/docs/operating/configuration/#endpoint'
properties:
password:
description: The secret in the service monitor namespace that contains the password for authentication.
properties:
key:
description: The key of the secret to select from. Must be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must be defined
type: boolean
required:
- key
type: object
username:
description: The secret in the service monitor namespace that contains the username for authentication.
properties:
key:
description: The key of the secret to select from. Must be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must be defined
type: boolean
required:
- key
type: object
type: object
bearerTokenSecret:
description: Secret to mount to read bearer token for scraping targets. The secret needs to be in the same namespace as the probe and accessible by the Prometheus Operator.
properties:
key:
description: The key of the secret to select from. Must be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must be defined
type: boolean
required:
- key
type: object
interval:
description: Interval at which targets are probed using the configured prober. If not specified Prometheus' global scrape interval is used.
type: string
@ -188,6 +237,99 @@ spec:
type: array
type: object
type: object
tlsConfig:
description: TLS configuration to use when scraping the endpoint.
properties:
ca:
description: Struct containing the CA cert to use for the targets.
properties:
configMap:
description: ConfigMap containing data to use for the targets.
properties:
key:
description: The key to select.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the ConfigMap or its key must be defined
type: boolean
required:
- key
type: object
secret:
description: Secret containing data to use for the targets.
properties:
key:
description: The key of the secret to select from. Must be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must be defined
type: boolean
required:
- key
type: object
type: object
cert:
description: Struct containing the client cert file for the targets.
properties:
configMap:
description: ConfigMap containing data to use for the targets.
properties:
key:
description: The key to select.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the ConfigMap or its key must be defined
type: boolean
required:
- key
type: object
secret:
description: Secret containing data to use for the targets.
properties:
key:
description: The key of the secret to select from. Must be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must be defined
type: boolean
required:
- key
type: object
type: object
insecureSkipVerify:
description: Disable target certificate validation.
type: boolean
keySecret:
description: Secret containing the client key file for the targets.
properties:
key:
description: The key of the secret to select from. Must be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must be defined
type: boolean
required:
- key
type: object
serverName:
description: Used to verify the hostname for the targets.
type: string
type: object
type: object
required:
- spec

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
---
apiVersion: apiextensions.k8s.io/v1
@ -1467,6 +1467,11 @@ spec:
enableAdminAPI:
description: 'Enable access to prometheus web admin API. Defaults to the value of `false`. WARNING: Enabling the admin APIs enables mutating endpoints, to delete data, shutdown Prometheus, and more. Enabling this should be done with care and the user is advised to add additional authentication authorization via a proxy to ensure only clients authorized to perform these actions can do so. For more information see https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis'
type: boolean
enableFeatures:
description: Enable access to Prometheus disabled features. By default, no features are enabled. Enabling disabled features is entirely outside the scope of what the maintainers will support and by doing so, you accept that this behaviour may break at any time without notice. For more information see https://prometheus.io/docs/prometheus/latest/disabled_features/
items:
type: string
type: array
enforcedNamespaceLabel:
description: EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert and metric that is user created. The label value will always be the namespace of the object that is being created.
type: string
@ -2465,7 +2470,7 @@ spec:
type: object
type: object
bearerToken:
description: bearer token for remote read.
description: Bearer token for remote read.
type: string
bearerTokenFile:
description: File to read bearer token for remote read.
@ -2636,7 +2641,7 @@ spec:
type: object
type: object
bearerToken:
description: File to read bearer token for remote write.
description: Bearer token for remote write.
type: string
bearerTokenFile:
description: File to read bearer token for remote write.
@ -2646,6 +2651,16 @@ spec:
type: string
description: Custom HTTP headers to be sent along with each remote write request. Be aware that headers that are set by Prometheus itself can't be overwritten. Only valid in Prometheus versions 2.25.0 and newer.
type: object
metadataConfig:
description: MetadataConfig configures the sending of series metadata to remote storage.
properties:
send:
description: Whether metric metadata is sent to remote storage or not.
type: boolean
sendInterval:
description: How frequently metric metadata is sent to remote storage.
type: string
type: object
name:
description: The name of the remote write queue, must be unique if specified. The name is used in metrics and logging in order to differentiate queues. Only valid in Prometheus versions 2.15.0 and newer.
type: string

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml
---
apiVersion: apiextensions.k8s.io/v1

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
---
apiVersion: apiextensions.k8s.io/v1
@ -149,7 +149,7 @@ spec:
description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint.
type: string
relabelings:
description: 'RelabelConfigs to apply to samples before scraping. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config'
description: 'RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields and replaces original scrape job name with __tmp_prometheus_job_name. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config'
items:
description: 'RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines `<metric_relabel_configs>`-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
properties:

View File

@ -1,4 +1,4 @@
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
---
apiVersion: apiextensions.k8s.io/v1

View File

@ -46,6 +46,10 @@ The longest name that gets created adds and extra 37 characters, so truncation s
{{/* Generate basic labels */}}
{{- define "kube-prometheus-stack.labels" }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: "{{ .Chart.Version }}"
app.kubernetes.io/part-of: {{ template "kube-prometheus-stack.name" . }}
chart: {{ template "kube-prometheus-stack.chartref" . }}
release: {{ $.Release.Name | quote }}
heritage: {{ $.Release.Service | quote }}

View File

@ -91,7 +91,7 @@ spec:
labelSelector:
matchExpressions:
- {key: app, operator: In, values: [alertmanager]}
- {key: prometheus, operator: In, values: [{{ template "kube-prometheus-stack.fullname" . }}-alertmanager]}
- {key: alertmanager, operator: In, values: [{{ template "kube-prometheus-stack.fullname" . }}-alertmanager]}
{{- else if eq .Values.alertmanager.alertmanagerSpec.podAntiAffinity "soft" }}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:

View File

@ -4,11 +4,13 @@
{{- $servicePort := .Values.alertmanager.service.port -}}
{{- $routePrefix := list .Values.alertmanager.alertmanagerSpec.routePrefix }}
{{- $paths := .Values.alertmanager.ingress.paths | default $routePrefix -}}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
apiVersion: networking.k8s.io/v1
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
apiVersion: networking.k8s.io/v1beta1
{{ else }}
{{- else -}}
apiVersion: extensions/v1beta1
{{ end -}}
{{- end }}
kind: Ingress
metadata:
name: {{ $serviceName }}
@ -41,8 +43,15 @@ spec:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ $serviceName }}
port:
number: {{ $servicePort }}
{{- else }}
serviceName: {{ $serviceName }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end -}}
{{- end -}}
{{- else }}
@ -54,8 +63,15 @@ spec:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ $serviceName }}
port:
number: {{ $servicePort }}
{{- else }}
serviceName: {{ $serviceName }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end -}}
{{- end -}}
{{- if .Values.alertmanager.ingress.tls }}

View File

@ -11,17 +11,19 @@ metadata:
items:
{{ range $i, $e := until $count }}
- kind: Ingress
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
apiVersion: networking.k8s.io/v1
{{- else if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
apiVersion: networking.k8s.io/v1beta1
{{ else }}
{{- else }}
apiVersion: extensions/v1beta1
{{ end -}}
{{- end }}
metadata:
name: {{ include "kube-prometheus-stack.fullname" $ }}-alertmanager-{{ $i }}
namespace: {{ template "kube-prometheus-stack.namespace" $ }}
labels:
app: {{ include "kube-prometheus-stack.name" $ }}-alertmanager
{{ include "kube-prometheus-stack.labels" $ | indent 8 }}
{{ include "kube-prometheus-stack.labels" $ | indent 8 }}
{{- if $ingressValues.labels }}
{{ toYaml $ingressValues.labels | indent 8 }}
{{- end }}
@ -45,8 +47,15 @@ items:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ include "kube-prometheus-stack.fullname" $ }}-alertmanager-{{ $i }}
port:
number: {{ $servicePort }}
{{- else }}
serviceName: {{ include "kube-prometheus-stack.fullname" $ }}-alertmanager-{{ $i }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end -}}
{{- if or $ingressValues.tlsSecretName $ingressValues.tlsSecretPerReplica.enabled }}
tls:

View File

@ -6,6 +6,8 @@ metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels:
app: {{ template "kube-prometheus-stack.name" . }}-alertmanager
app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-alertmanager
app.kubernetes.io/component: alertmanager
{{ include "kube-prometheus-stack.labels" . | indent 4 }}
{{- if .Values.alertmanager.serviceAccount.annotations }}
annotations:

View File

@ -6,6 +6,8 @@ metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels:
app: {{ template "kube-prometheus-stack.name" . }}-operator
app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-prometheus-operator
app.kubernetes.io/component: prometheus-operator
{{ include "kube-prometheus-stack.labels" . | indent 4 }}
imagePullSecrets:
{{ toYaml .Values.global.imagePullSecrets | indent 2 }}

View File

@ -1,14 +1,16 @@
{{- if and .Values.prometheus.enabled .Values.prometheus.ingress.enabled }}
{{- $pathType := .Values.prometheus.ingress.pathType | default "" }}
{{- $serviceName := printf "%s-%s" (include "kube-prometheus-stack.fullname" .) "prometheus" }}
{{- $servicePort := .Values.prometheus.service.port -}}
{{- $routePrefix := list .Values.prometheus.prometheusSpec.routePrefix }}
{{- $paths := .Values.prometheus.ingress.paths | default $routePrefix -}}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
{{- if and .Values.prometheus.enabled .Values.prometheus.ingress.enabled -}}
{{- $pathType := .Values.prometheus.ingress.pathType | default "" -}}
{{- $serviceName := printf "%s-%s" (include "kube-prometheus-stack.fullname" .) "prometheus" -}}
{{- $servicePort := .Values.prometheus.service.port -}}
{{- $routePrefix := list .Values.prometheus.prometheusSpec.routePrefix -}}
{{- $paths := .Values.prometheus.ingress.paths | default $routePrefix -}}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
apiVersion: networking.k8s.io/v1
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
apiVersion: networking.k8s.io/v1beta1
{{ else }}
{{- else -}}
apiVersion: extensions/v1beta1
{{ end -}}
{{- end }}
kind: Ingress
metadata:
{{- if .Values.prometheus.ingress.annotations }}
@ -41,8 +43,15 @@ spec:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ $serviceName }}
port:
number: {{ $servicePort }}
{{- else }}
serviceName: {{ $serviceName }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end -}}
{{- end -}}
{{- else }}
@ -54,8 +63,15 @@ spec:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ $serviceName }}
port:
number: {{ $servicePort }}
{{- else }}
serviceName: {{ $serviceName }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end -}}
{{- end -}}
{{- if .Values.prometheus.ingress.tls }}

View File

@ -4,11 +4,13 @@
{{- $thanosPort := .Values.prometheus.thanosIngress.servicePort -}}
{{- $routePrefix := list .Values.prometheus.prometheusSpec.routePrefix }}
{{- $paths := .Values.prometheus.thanosIngress.paths | default $routePrefix -}}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
apiVersion: networking.k8s.io/v1
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
apiVersion: networking.k8s.io/v1beta1
{{ else }}
{{- else -}}
apiVersion: extensions/v1beta1
{{ end -}}
{{- end }}
kind: Ingress
metadata:
{{- if .Values.prometheus.thanosIngress.annotations }}
@ -40,8 +42,15 @@ spec:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ $serviceName }}
port:
number: {{ $thanosPort }}
{{- else }}
serviceName: {{ $serviceName }}
servicePort: {{ $thanosPort }}
{{- end }}
{{- end -}}
{{- end -}}
{{- else }}
@ -53,8 +62,15 @@ spec:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ $serviceName }}
port:
number: {{ $thanosPort }}
{{- else }}
serviceName: {{ $serviceName }}
servicePort: {{ $thanosPort }}
{{- end }}
{{- end -}}
{{- end -}}
{{- if .Values.prometheus.thanosIngress.tls }}

View File

@ -11,17 +11,19 @@ metadata:
items:
{{ range $i, $e := until $count }}
- kind: Ingress
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
apiVersion: networking.k8s.io/v1
{{- else if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
apiVersion: networking.k8s.io/v1beta1
{{ else }}
{{- else }}
apiVersion: extensions/v1beta1
{{ end -}}
{{- end }}
metadata:
name: {{ include "kube-prometheus-stack.fullname" $ }}-prometheus-{{ $i }}
namespace: {{ template "kube-prometheus-stack.namespace" $ }}
labels:
app: {{ include "kube-prometheus-stack.name" $ }}-prometheus
{{ include "kube-prometheus-stack.labels" $ | indent 8 }}
{{ include "kube-prometheus-stack.labels" $ | indent 8 }}
{{- if $ingressValues.labels }}
{{ toYaml $ingressValues.labels | indent 8 }}
{{- end }}
@ -45,8 +47,15 @@ items:
pathType: {{ $pathType }}
{{- end }}
backend:
{{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ include "kube-prometheus-stack.fullname" $ }}-prometheus-{{ $i }}
port:
number: {{ $servicePort }}
{{- else }}
serviceName: {{ include "kube-prometheus-stack.fullname" $ }}-prometheus-{{ $i }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end -}}
{{- if or $ingressValues.tlsSecretName $ingressValues.tlsSecretPerReplica.enabled }}
tls:

View File

@ -70,6 +70,12 @@ spec:
logFormat: {{ .Values.prometheus.prometheusSpec.logFormat }}
listenLocal: {{ .Values.prometheus.prometheusSpec.listenLocal }}
enableAdminAPI: {{ .Values.prometheus.prometheusSpec.enableAdminAPI }}
{{- if .Values.prometheus.prometheusSpec.enableFeatures }}
enableFeatures:
{{- range $enableFeatures := .Values.prometheus.prometheusSpec.enableFeatures }}
- {{ tpl $enableFeatures $ }}
{{- end }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.scrapeInterval }}
scrapeInterval: {{ .Values.prometheus.prometheusSpec.scrapeInterval }}
{{- end }}

View File

@ -6,6 +6,8 @@ metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels:
app: {{ template "kube-prometheus-stack.name" . }}-prometheus
app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-prometheus
app.kubernetes.io/component: prometheus
{{ include "kube-prometheus-stack.labels" . | indent 4 }}
{{- if .Values.prometheus.serviceAccount.annotations }}
annotations:

View File

@ -1536,7 +1536,7 @@ prometheusOperator:
##
image:
repository: quay.io/prometheus-operator/prometheus-operator
tag: v0.46.0
tag: v0.47.0
sha: ""
pullPolicy: IfNotPresent
@ -1552,7 +1552,7 @@ prometheusOperator:
##
prometheusConfigReloaderImage:
repository: quay.io/prometheus-operator/prometheus-config-reloader
tag: v0.46.0
tag: v0.47.0
sha: ""
## Set the prometheus config reloader side-car CPU limit
@ -1868,6 +1868,11 @@ prometheus:
##
enableAdminAPI: false
# EnableFeatures API enables access to Prometheus disabled features.
# ref: https://prometheus.io/docs/prometheus/latest/disabled_features/
enableFeatures: []
# - exemplar-storage
## Image of Prometheus.
##
image:

View File

@ -0,0 +1,6 @@
#!/bin/bash
jb update
mkdir -p kube-mixin
jsonnet -J vendor -m kube-mixin -e '(import "mixin.libsonnet").grafanaDashboards'

View File

@ -0,0 +1,15 @@
{
"version": 1,
"dependencies": [
{
"source": {
"git": {
"remote": "https://github.com/kubernetes-monitoring/kubernetes-mixin.git",
"subdir": ""
}
},
"version": "master"
}
],
"legacyImports": true
}

View File

@ -0,0 +1,36 @@
{
"version": 1,
"dependencies": [
{
"source": {
"git": {
"remote": "https://github.com/grafana/grafonnet-lib.git",
"subdir": "grafonnet"
}
},
"version": "55cf4ee53ced2b6d3ce96ecce9fb813b4465be98",
"sum": "4/sUV0Kk+o8I+wlYxL9R6EPhL/NiLfYHk+NXlU64RUk="
},
{
"source": {
"git": {
"remote": "https://github.com/grafana/jsonnet-libs.git",
"subdir": "grafana-builder"
}
},
"version": "970b0dd2fc5b896406eba258cad78b7e0b0f18bf",
"sum": "GRf2GvwEU4jhXV+JOonXSZ4wdDv8mnHBPCQ6TUVd+g8="
},
{
"source": {
"git": {
"remote": "https://github.com/kubernetes-monitoring/kubernetes-mixin.git",
"subdir": ""
}
},
"version": "39a9cda705b5201c35105bd1f24c83923fa839ef",
"sum": "8GmlcgCeC46NSHfRBebyqUOJCG1YvqvuGMj98u+Pge4="
}
],
"legacyImports": false
}

View File

@ -0,0 +1,45 @@
configmap: grafana-dashboards-kube-mixin
gzip: true
folder: Kubernetes
dashboards:
- name: coreDNS
url: https://grafana.com/api/dashboards/12539/revisions/5/download
tags: ['kubernetes', 'DNS']
- name: etcd
url: https://grafana.com/api/dashboards/3070/revisions/3/download
tags: ['kubernetes']
# cd kube-mixin; for f in *.json; do echo "- name: ${f%%.json}" >> ../dashboards.yaml; echo " url: file://kube-mixin/$f" >> ../dashboards.yaml; done; cd -
- name: apiserver
url: file://kube-mixin/apiserver.json
- name: cluster-total
url: file://kube-mixin/cluster-total.json
- name: controller-manager
url: file://kube-mixin/controller-manager.json
- name: k8s-resources-cluster
url: file://kube-mixin/k8s-resources-cluster.json
- name: k8s-resources-namespace
url: file://kube-mixin/k8s-resources-namespace.json
- name: k8s-resources-node
url: file://kube-mixin/k8s-resources-node.json
- name: k8s-resources-pod
url: file://kube-mixin/k8s-resources-pod.json
- name: k8s-resources-workload
url: file://kube-mixin/k8s-resources-workload.json
- name: k8s-resources-workloads-namespace
url: file://kube-mixin/k8s-resources-workloads-namespace.json
- name: kubelet
url: file://kube-mixin/kubelet.json
- name: namespace-by-pod
url: file://kube-mixin/namespace-by-pod.json
- name: namespace-by-workload
url: file://kube-mixin/namespace-by-workload.json
- name: persistentvolumesusage
url: file://kube-mixin/persistentvolumesusage.json
- name: pod-total
url: file://kube-mixin/pod-total.json
- name: proxy
url: file://kube-mixin/proxy.json
- name: scheduler
url: file://kube-mixin/scheduler.json
- name: workload-total
url: file://kube-mixin/workload-total.json

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,833 @@
{
"annotations": {
"list": [ ]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"links": [ ],
"refresh": "10s",
"rows": [
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 10,
"id": 1,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 0,
"links": [ ],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 12,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{pod}}",
"legendLink": null,
"step": 10
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "CPU Usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "CPU Usage",
"titleSize": "h6"
},
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "hidden"
},
{
"alias": "CPU Usage",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #A",
"thresholds": [ ],
"type": "number",
"unit": "short"
},
{
"alias": "CPU Requests",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #B",
"thresholds": [ ],
"type": "number",
"unit": "short"
},
{
"alias": "CPU Requests %",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #C",
"thresholds": [ ],
"type": "number",
"unit": "percentunit"
},
{
"alias": "CPU Limits",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #D",
"thresholds": [ ],
"type": "number",
"unit": "short"
},
{
"alias": "CPU Limits %",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #E",
"thresholds": [ ],
"type": "number",
"unit": "percentunit"
},
{
"alias": "Pod",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"pattern": "/.*/",
"thresholds": [ ],
"type": "string",
"unit": "short"
}
],
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "A",
"step": 10
},
{
"expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "B",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "C",
"step": 10
},
{
"expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "D",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "E",
"step": 10
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "CPU Quota",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"transform": "table",
"type": "table",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "CPU Quota",
"titleSize": "h6"
},
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 10,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 0,
"links": [ ],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 12,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"}) by (pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{pod}}",
"legendLink": null,
"step": 10
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Memory Usage (w/o cache)",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "Memory Usage",
"titleSize": "h6"
},
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "hidden"
},
{
"alias": "Memory Usage",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #A",
"thresholds": [ ],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Requests",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #B",
"thresholds": [ ],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Requests %",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #C",
"thresholds": [ ],
"type": "number",
"unit": "percentunit"
},
{
"alias": "Memory Limits",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #D",
"thresholds": [ ],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Limits %",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #E",
"thresholds": [ ],
"type": "number",
"unit": "percentunit"
},
{
"alias": "Memory Usage (RSS)",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #F",
"thresholds": [ ],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Usage (Cache)",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #G",
"thresholds": [ ],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Usage (Swap)",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #H",
"thresholds": [ ],
"type": "number",
"unit": "bytes"
},
{
"alias": "Pod",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
"colors": [ ],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"pattern": "/.*/",
"thresholds": [ ],
"type": "string",
"unit": "short"
}
],
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "A",
"step": 10
},
{
"expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "B",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "C",
"step": 10
},
{
"expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "D",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "E",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "F",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "G",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "H",
"step": 10
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Memory Quota",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"transform": "table",
"type": "table",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "Memory Quota",
"titleSize": "h6"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"kubernetes"
],
"templating": {
"list": [
{
"current": {
"text": "default",
"value": "default"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [ ],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": {
"text": "",
"value": ""
},
"datasource": "$datasource",
"hide": 2,
"includeAll": false,
"label": null,
"multi": false,
"name": "cluster",
"options": [ ],
"query": "label_values(kube_pod_info, cluster)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
"text": "",
"value": ""
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": null,
"multi": true,
"name": "node",
"options": [ ],
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, node)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "UTC",
"title": "Compute Resources / Node (Pods)",
"uid": "200ac8fdbfbb74b39aff88118e4d1c2c",
"version": 0
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,494 @@
{
"__inputs": [ ],
"__requires": [ ],
"annotations": {
"list": [ ]
},
"editable": false,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"id": null,
"links": [ ],
"refresh": "10s",
"rows": [
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 2,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 9,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "(\n sum without(instance, node) (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n sum without(instance, node) (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "Used Space",
"refId": "A"
},
{
"expr": "sum without(instance, node) (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "Free Space",
"refId": "B"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Volume Space Usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(50, 172, 45, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": "$datasource",
"format": "percent",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": { },
"id": 3,
"interval": null,
"links": [ ],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max without(instance,node) (\n(\n kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n -\n kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n)\n/\nkubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "80, 90",
"title": "Volume Space Usage",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 4,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 9,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum without(instance, node) (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "Used inodes",
"refId": "A"
},
{
"expr": "(\n sum without(instance, node) (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n sum without(instance, node) (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": " Free inodes",
"refId": "B"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Volume inodes Usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(50, 172, 45, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": "$datasource",
"format": "percent",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": { },
"id": 5,
"interval": null,
"links": [ ],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max without(instance,node) (\nkubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n/\nkubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "80, 90",
"title": "Volume inodes Usage",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"kubernetes"
],
"templating": {
"list": [
{
"current": {
"text": "default",
"value": "default"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [ ],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": { },
"datasource": "$datasource",
"hide": 2,
"includeAll": false,
"label": "cluster",
"multi": false,
"name": "cluster",
"options": [ ],
"query": "label_values(kubelet_volume_stats_capacity_bytes, cluster)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": { },
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": "Namespace",
"multi": false,
"name": "namespace",
"options": [ ],
"query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\"}, namespace)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": { },
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": "PersistentVolumeClaim",
"multi": false,
"name": "volume",
"options": [ ],
"query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\"}, persistentvolumeclaim)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-7d",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "UTC",
"title": "Persistent Volumes",
"uid": "919b92a8e8041bd567af9edab12c840c",
"version": 0
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,955 @@
{
"__inputs": [ ],
"__requires": [ ],
"annotations": {
"list": [ ]
},
"editable": false,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"id": null,
"links": [ ],
"refresh": "10s",
"rows": [
{
"collapse": false,
"collapsed": false,
"panels": [
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": { },
"id": 2,
"interval": null,
"links": [ ],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 2,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "sum(up{cluster=\"$cluster\", job=\"kube-scheduler\"})",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Up",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "min"
},
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 3,
"legend": {
"alignAsTable": true,
"avg": false,
"current": true,
"max": false,
"min": false,
"rightSide": true,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 5,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(scheduler_e2e_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} e2e",
"refId": "A"
},
{
"expr": "sum(rate(scheduler_binding_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} binding",
"refId": "B"
},
{
"expr": "sum(rate(scheduler_scheduling_algorithm_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} scheduling algorithm",
"refId": "C"
},
{
"expr": "sum(rate(scheduler_volume_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} volume",
"refId": "D"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Scheduling Rate",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 4,
"legend": {
"alignAsTable": true,
"avg": false,
"current": true,
"max": false,
"min": false,
"rightSide": true,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 5,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} e2e",
"refId": "A"
},
{
"expr": "histogram_quantile(0.99, sum(rate(scheduler_binding_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} binding",
"refId": "B"
},
{
"expr": "histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} scheduling algorithm",
"refId": "C"
},
{
"expr": "histogram_quantile(0.99, sum(rate(scheduler_volume_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} volume",
"refId": "D"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Scheduling latency 99th Quantile",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 5,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"2..\"}[5m]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "2xx",
"refId": "A"
},
{
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"3..\"}[5m]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "3xx",
"refId": "B"
},
{
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"4..\"}[5m]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "4xx",
"refId": "C"
},
{
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"5..\"}[5m]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "5xx",
"refId": "D"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Kube API Request Rate",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 6,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 8,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{verb}} {{url}}",
"refId": "A"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Post Request Latency 99th Quantile",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 7,
"legend": {
"alignAsTable": true,
"avg": false,
"current": true,
"max": false,
"min": false,
"rightSide": true,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{verb}} {{url}}",
"refId": "A"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Get Request Latency 99th Quantile",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 8,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
},
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 9,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "CPU usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"aliasColors": { },
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": { },
"id": 10,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [ ],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [ ],
"spaceLength": 10,
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"thresholds": [ ],
"timeFrom": null,
"timeShift": null,
"title": "Goroutines",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [ ]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"kubernetes"
],
"templating": {
"list": [
{
"current": {
"text": "default",
"value": "default"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [ ],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": { },
"datasource": "$datasource",
"hide": 2,
"includeAll": false,
"label": "cluster",
"multi": false,
"name": "cluster",
"options": [ ],
"query": "label_values(kube_pod_info, cluster)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": { },
"datasource": "$datasource",
"hide": 0,
"includeAll": true,
"label": null,
"multi": false,
"name": "instance",
"options": [ ],
"query": "label_values(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-scheduler\"}, instance)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [ ],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "UTC",
"title": "Scheduler",
"uid": "2e6b6a3b4bddf1427b3a55aa1311c656",
"version": 0
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
# https://github.com/kubernetes-monitoring/kubernetes-mixin
local kubernetes = import "kubernetes-mixin/mixin.libsonnet";
kubernetes {
_config+:: {
grafanaK8s+:: {
dashboardNamePrefix: '',
dashboardTags: ['kubernetes'],
},
},
}

View File

@ -0,0 +1,5 @@
configmap: grafana-dashboards-zdt
gzip: true
dashboards:
- name: home
url: file://zdt/home.json

View File

@ -0,0 +1,136 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "Prometheus",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 29,
"links": [],
"panels": [
{
"datasource": null,
"fieldConfig": {
"defaults": {},
"overrides": []
},
"gridPos": {
"h": 3,
"w": 24,
"x": 0,
"y": 0
},
"id": 6,
"options": {
"content": "![ZDT Logo](https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png \"zdt\")\nWelcome to KubeZero Metrics ! ",
"mode": "markdown"
},
"pluginVersion": "7.5.3",
"timeFrom": null,
"timeShift": null,
"title": "Home",
"type": "text"
},
{
"datasource": null,
"fieldConfig": {
"defaults": {},
"overrides": []
},
"gridPos": {
"h": 15,
"w": 12,
"x": 0,
"y": 3
},
"id": 3,
"links": [],
"options": {
"folderId": 0,
"maxItems": 30,
"query": "",
"showHeadings": true,
"showRecentlyViewed": true,
"showSearch": false,
"showStarred": true,
"tags": []
},
"pluginVersion": "7.5.3",
"tags": [],
"title": "Dashboards",
"type": "dashlist"
},
{
"datasource": null,
"fieldConfig": {
"defaults": {},
"overrides": []
},
"gridPos": {
"h": 15,
"w": 12,
"x": 12,
"y": 3
},
"id": 4,
"links": [],
"options": {
"feedUrl": "https://zero-downtime.net/index.xml"
},
"title": "Latest from our blog",
"type": "news"
}
],
"refresh": "30s",
"schemaVersion": 27,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"hidden": true,
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
],
"type": "timepicker"
},
"timezone": "browser",
"title": "Home Copy",
"uid": "6QOeg59Mz",
"version": 4
}

View File

@ -1,6 +1,26 @@
diff -turN charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl charts/kube-prometheus-stack.zdt/charts/grafana/templates/_pod.tpl
--- charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl 2021-04-22 00:36:35.000000000 +0200
+++ charts/kube-prometheus-stack.zdt/charts/grafana/templates/_pod.tpl 2021-04-25 11:16:06.807876896 +0200
@@ -197,11 +197,16 @@
- name: FOLDER_ANNOTATION
value: "{{ .Values.sidecar.dashboards.folderAnnotation }}"
{{- end }}
+ - name: SCRIPT
+ value: /opt/script.sh
resources:
{{ toYaml .Values.sidecar.resources | indent 6 }}
volumeMounts:
- name: sc-dashboard-volume
mountPath: {{ .Values.sidecar.dashboards.folder | quote }}
+ - name: script-volume
+ mountPath: /opt/script.sh
+ subPath: script.sh
{{- end}}
- name: {{ .Chart.Name }}
{{- if .Values.image.sha }}
diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/etcd.yaml
--- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml 2021-04-14 22:13:29.000000000 +0200
+++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/etcd.yaml 2021-04-15 14:43:03.074281889 +0200
--- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml 2021-04-22 00:36:35.000000000 +0200
+++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/etcd.yaml 2021-04-25 11:10:33.021207900 +0200
@@ -54,34 +54,6 @@
{{- if .Values.defaultRules.additionalRuleLabels }}
{{ toYaml .Values.defaultRules.additionalRuleLabels | indent 8 }}
@ -37,8 +57,8 @@ diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yam
annotations:
message: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": gRPC requests to {{`{{`}} $labels.grpc_method {{`}}`}} are taking {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.'
diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/node-exporter.yaml charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/node-exporter.yaml
--- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-14 22:13:29.000000000 +0200
+++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-15 14:49:41.614282790 +0200
--- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-22 00:36:35.000000000 +0200
+++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-25 11:10:33.021207900 +0200
@@ -30,7 +30,7 @@
summary: Filesystem is predicted to run out of space within the next 24 hours.
expr: |-

View File

@ -0,0 +1,120 @@
#!/usr/bin/env python3
import sys
import json
import yaml
import requests
import textwrap
import io
import gzip
import base64
config_file = sys.argv[1]
configmap_file = sys.argv[2]
def traverse_json(obj):
if isinstance(obj, dict):
for k, v in obj.items():
# CloudBender::StackRef
if k == "datasource" and v:
obj[k] = "Prometheus"
if isinstance(v, dict) or isinstance(v, list):
traverse_json(v)
elif isinstance(obj, list):
for k in obj:
if isinstance(k, dict) or isinstance(k, list):
traverse_json(k)
# read config file
with open(config_file, 'r') as yaml_contents:
config = yaml.safe_load(yaml_contents.read())
if 'condition' in config:
configmap = '''{{- if %(condition)s }}
''' % config
else:
configmap = ''
# Base configmap for KubeZero
configmap += '''apiVersion: v1
kind: ConfigMap
metadata:
name: {{ printf "%%s-%%s" (include "kubezero-lib.fullname" $) "%(configmap)s" | trunc 63 | trimSuffix "-" }}
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
''' % config
# Put all dashboards into a folder ?
if 'folder' in config:
configmap += ''' annotations:
k8s-sidecar-target-directory: %(folder)s
''' % config
# compress ?
if 'gzip' in config and config['gzip']:
configmap += '''binaryData:
'''
else:
configmap += '''data:
'''
for b in config['dashboards']:
if not b['url'].startswith('file://'):
response = requests.get(b['url'])
if response.status_code != 200:
print('Skipping the file, response code %s not equals 200' % response.status_code)
continue
raw_text = response.text
else:
with open(b['url'].replace('file://', ''), 'r') as file_contents:
raw_text = file_contents.read()
obj = json.loads(raw_text)
# replace datasources
traverse_json(obj)
# Set default tim in all charts to 1h
obj['time'] = { "from": "now-1h", "to": "now" }
obj['refresh'] = "30s"
# set tags
if 'tags' in b:
obj['tags'] = b['tags']
text = json.dumps(obj, indent=2)
if 'gzip' in config and config['gzip']:
# compress and base64 encode
buf = io.BytesIO()
f = gzip.GzipFile(mode='w', fileobj=buf, mtime=0)
f.write(text.encode())
f.close()
textb64 = base64.b64encode(buf.getvalue()).decode('utf-8')
textb64 = textwrap.indent(textb64, ' '*4)
configmap += ''' %(name)s.json.gz:
''' % b
configmap += textb64+'\n'
else:
# encode otherwise helm will mess with raw json
text = text.replace("{{", "{{`{{").replace("}}", "}}`}}").replace("{{`{{", "{{`{{`}}").replace("}}`}}", "{{`}}`}}")
text = textwrap.indent(text, ' '*4)
configmap += ''' %(name)s.json:
''' % b
configmap += text+'\n'
if 'condition' in config:
configmap += '{{- end }}'+'\n'
# Write Configmap
with open(configmap_file, 'w') as f:
f.write(configmap)

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: script-configmap
namespace: {{ $.Release.Namespace }}
labels:
{{ include "kubezero-lib.labels" $ | indent 4 }}
data:
script.sh: |-
#!/bin/sh
find /tmp/dashboards -name "*.gz" -exec gunzip -f -k {} \;

View File

@ -0,0 +1,49 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards-kube-mixin" | trunc 63 | trimSuffix "-" }}
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
annotations:
k8s-sidecar-target-directory: Kubernetes
binaryData:
coreDNS.json.gz:
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
etcd.json.gz:
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
apiserver.json.gz:
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
cluster-total.json.gz:
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
controller-manager.json.gz:
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
k8s-resources-cluster.json.gz:
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
k8s-resources-namespace.json.gz:
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
k8s-resources-node.json.gz:
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
k8s-resources-pod.json.gz:
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
k8s-resources-workload.json.gz:
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
k8s-resources-workloads-namespace.json.gz:
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
kubelet.json.gz:
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
namespace-by-pod.json.gz:
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
namespace-by-workload.json.gz:
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
persistentvolumesusage.json.gz:
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
pod-total.json.gz:
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
proxy.json.gz:
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
scheduler.json.gz:
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
workload-total.json.gz:
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

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards-zdt" | trunc 63 | trimSuffix "-" }}
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
binaryData:
home.json.gz:
H4sIAAAAAAAC/9VVS2/UMBC+8yuMD6hI7e5mH63ghlohKkAUWopEWyFvPEmsdexgO93dVv3v2M7L2RQqbnDZ9XwzHs/jy8z9M4QwEUIaYpgUGr9G9xayIGfaWOnKS6hGvWZZMm5OhVVG+x1KiSFalioGq8BnSuZgMig1DmxAkCV3eqNKCPCM0UdQFktxLLlUzqFKl2Rvso+mUWR/Fot9FL0MXQuS+4ffdLmgF+gNB2V6IZht4e0o0dlSEkVxrXvw/zf298GZY6DM7ESLUwHmlFpElJxXiCJFdiElN6yw+MSDzJlMX/kzZ2Llqnp148WCCOC6rWtT1X71Gu9ekzDg9FiKhKVtc6orkJCSG9+yhyBDeQtK2YJWrzbZtf5SqzuTuu8rs+Is8LF2CcwDYNMkV8tbJw98+8QPW1EWfU550DbVgHDUws+vvp9coA8ylTd7mTGFfj0ex1SM7kDJAyrXwrAcRrbmY6I1GD1elUtwyjG3dw50Tjg/OJyPCpGia3xHzTV+eS2+AY8t+ZCR6L21/27t0UcwisUaPUdtHEEyufT0wzlRK/csHiRW8DJl4hKUtgk506PRYjRrfWAX6FtL+d3mOfw8Y4kZKoynFn5nQw381Ow0sDFVFHUM/xJRosUOU6LpE0yZPc6UlnE7X8nvyZNITkH5TzB8IyebUwO5M56F+M8SlHsfh93WmVy/A0KZSPVw6DjtF4gtQ/n2ksEa6OM250BU7KqREK4HSkOUeuymIelvqv0kw5qbQwqdNKNMD4nkxpyf5P8vmXrAH9g0/3s2AdCvirs6NeNnOHqYoLAZbXI+nAptBz4QA9qgxE4AZMuJlnY+DXshYK3rPtjfah8oSBRoVwg8m1T9wzrOICcdFaZHFWy2vO6pWlWWPVLYoZEX3K4+kQ63eLfXXGKdPqmGFhZyfRBldczYyBrDvWsFi1egust2bVMQPZY3Cf1gdsqrWxLsOqtcBAyNJoEwC4Uo786L4ByFwmwSarLuPA3OUb3db5q8bBI/OipcPflK6PgwdBy+Mp2HAu3ORzSMdzeWZtR3he0V+04Kr18qudZWWSuCtYGOZbGt8NJ/Afjw8ydIF68+3lXobUuh+bOHXxBMSbrqCQAA

View File

@ -1,10 +1,16 @@
#!/bin/bash
VERSION=14.9.0
VERSION=15.2.0
rm -rf charts/kube-prometheus-stack
curl -L -s -o - https://github.com/prometheus-community/helm-charts/releases/download/kube-prometheus-stack-${VERSION}/kube-prometheus-stack-${VERSION}.tgz | tar xfz - -C charts
# The grpc alerts could be re-enabled with etcd 3.5
# https://github.com/etcd-io/etcd/pull/12196
patch -p0 -i adjust_alarms.patch --no-backup-if-mismatch
patch -p0 -i metrics-zdt.patch --no-backup-if-mismatch
# Create ZDT dashboard configmap
cd dashboards
../sync_grafana_dashboards.py k8s-dashboards.yaml ../templates/grafana-dashboards-k8s.yaml
../sync_grafana_dashboards.py zdt-dashboards.yaml ../templates/grafana-dashboards-zdt.yaml
cd -

View File

@ -1,4 +1,8 @@
kube-prometheus-stack:
global:
rbac:
pspEnabled: false
defaultRules:
create: true
@ -61,12 +65,6 @@ kube-prometheus-stack:
limits:
memory: 64Mi
namespaces:
releaseNamespace: true
additional:
- kube-system
- logging
admissionWebhooks:
patch:
tolerations:
@ -87,6 +85,8 @@ kube-prometheus-stack:
action: replace
prometheus-node-exporter:
rbac:
pspEnabled: false
resources:
requests:
cpu: 20m
@ -101,6 +101,10 @@ kube-prometheus-stack:
logFormat: json
# externalUrl:
# gather all monitors
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
resources:
requests:
memory: 512Mi
@ -109,25 +113,68 @@ kube-prometheus-stack:
memory: 3Gi
# cpu: "1000m"
walCompression: true
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: ebs-sc-gp2-xfs
storageClassName: ebs-sc-gp3-xfs
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 16Gi
# Custom Grafana tweaks
# - persistence, plugins, auth
grafana:
enabled: true
persistence:
rbac:
pspEnabled: false
defaultDashboardsEnabled: false
grafana.ini:
server:
enable_gzip: true
analytics:
check_for_updates: false
security:
disable_gravatar: true
cookie_secure: true
strict_transport_security: true
#auth:
# disable_login_form: true
# disable_signout_menu: true
auth.anonymous:
enabled: true
size: 4Gi
storageClassName: ebs-sc-gp2-xfs
deploymentStrategy:
type: Recreate
dashboards:
min_refresh_interval: "30s"
default_home_dashboard_path: '/tmp/dashboards/home.json'
alerting:
enabled: false
date_formats:
default_timezone: UTC
sidecar:
# We require at least 1.12.0 for the SCRIPT and relative folder names
image:
tag: 1.12.0
dashboards:
searchNamespace: ALL
provider:
foldersFromFilesStructure: true
# For the gunzip script
extraContainerVolumes:
- name: script-volume
configMap:
name: script-configmap
defaultMode: 0777
#persistence:
# enabled: true
# size: 4Gi
# storageClassName: ebs-sc-gp2-xfs
#deploymentStrategy:
# type: Recreate
plugins:
- grafana-piechart-panel
service:
@ -139,6 +186,8 @@ kube-prometheus-stack:
# Assign state metrics to control plane
kube-state-metrics:
podSecurityPolicy:
enabled: false
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule

View File

@ -0,0 +1,17 @@
apiVersion: v2
name: kubezero-nats
description: KubeZero umbrella chart for NATS
type: application
version: 0.1.0
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png
keywords:
- kubezero
- nats
maintainers:
- name: Quarky9
dependencies:
- name: nats
version: 0.8.3
#repository: https://nats-io.github.io/k8s/helm/charts/
kubeVersion: ">= 1.18.0"

View File

@ -0,0 +1,24 @@
# kubezero-nats
![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
KubeZero umbrella chart for NATS
**Homepage:** <https://kubezero.com>
## Maintainers
| Name | Email | Url |
| ---- | ------ | --- |
| Quarky9 | | |
## Requirements
Kubernetes: `>= 1.18.0`
| Repository | Name | Version |
|------------|------|---------|
| | nats | 0.8.3 |
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0)

View File

@ -0,0 +1,19 @@
{{ template "chart.header" . }}
{{ template "chart.deprecationWarning" . }}
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
{{ template "chart.description" . }}
{{ template "chart.homepageLine" . }}
{{ template "chart.maintainersSection" . }}
{{ template "chart.sourcesSection" . }}
{{ template "chart.requirementsSection" . }}
{{ template "chart.valuesSection" . }}
## Resources
- https://grafana.com/grafana/dashboards/13707

View File

@ -0,0 +1,21 @@
apiVersion: v2
appVersion: "2.1.9"
description: A Helm chart for the NATS.io High Speed Cloud Native Distributed Communications Technology.
name: nats
keywords:
- nats
- messaging
- cncf
version: 0.8.3
home: http://github.com/nats-io/k8s
maintainers:
- name: Waldemar Quevedo
github: https://github.com/wallyqs
email: wally@nats.io
- name: Colin Sullivan
github: https://github.com/ColinSullivan1
email: colin@nats.io
- name: Jaime Piña
github: https://github.com/variadico
email: jaime@nats.io
icon: https://nats.io/img/nats-icon-color.png

View File

@ -0,0 +1,586 @@
# NATS Server
[NATS](https://nats.io) is a simple, secure and performant communications system for digital systems, services and devices. NATS is part of the Cloud Native Computing Foundation ([CNCF](https://cncf.io)). NATS has over [30 client language implementations](https://nats.io/download/), and its server can run on-premise, in the cloud, at the edge, and even on a Raspberry Pi. NATS can secure and simplify design and operation of modern distributed systems.
## TL;DR;
```console
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
helm install my-nats nats/nats
```
## Configuration
### Server Image
```yaml
nats:
image: nats:2.1.7-alpine3.11
pullPolicy: IfNotPresent
```
### Limits
```yaml
nats:
# The number of connect attempts against discovered routes.
connectRetries: 30
# How many seconds should pass before sending a PING
# to a client that has no activity.
pingInterval:
# Server settings.
limits:
maxConnections:
maxSubscriptions:
maxControlLine:
maxPayload:
writeDeadline:
maxPending:
maxPings:
lameDuckDuration:
# Number of seconds to wait for client connections to end after the pod termination is requested
terminationGracePeriodSeconds: 60
```
### Logging
*Note*: It is not recommended to enable trace or debug in production since enabling it will significantly degrade performance.
```yaml
nats:
logging:
debug:
trace:
logtime:
connectErrorReports:
reconnectErrorReports:
```
### TLS setup for client connections
You can find more on how to setup and trouble shoot TLS connnections at:
https://docs.nats.io/nats-server/configuration/securing_nats/tls
```yaml
nats:
tls:
secret:
name: nats-client-tls
ca: "ca.crt"
cert: "tls.crt"
key: "tls.key"
```
## Clustering
If clustering is enabled, then a 3-node cluster will be setup. More info at:
https://docs.nats.io/nats-server/configuration/clustering#nats-server-clustering
```yaml
cluster:
enabled: true
replicas: 3
tls:
secret:
name: nats-server-tls
ca: "ca.crt"
cert: "tls.crt"
key: "tls.key"
```
Example:
```sh
$ helm install nats nats/nats --set cluster.enabled=true
```
## Leafnodes
Leafnode connections to extend a cluster. More info at:
https://docs.nats.io/nats-server/configuration/leafnodes
```yaml
leafnodes:
enabled: true
remotes:
- url: "tls://connect.ngs.global:7422"
#######################
# #
# TLS Configuration #
# #
#######################
#
# # You can find more on how to setup and trouble shoot TLS connnections at:
#
# # https://docs.nats.io/nats-server/configuration/securing_nats/tls
#
tls:
secret:
name: nats-client-tls
ca: "ca.crt"
cert: "tls.crt"
key: "tls.key"
```
## Setting up External Access
### Using HostPorts
In case of both external access and advertisements being enabled, an
initializer container will be used to gather the public ips. This
container will required to have enough RBAC policy to be able to make a
look up of the public ip of the node where it is running.
For example, to setup external access for a cluster and advertise the public ip to clients:
```yaml
nats:
# Toggle whether to enable external access.
# This binds a host port for clients, gateways and leafnodes.
externalAccess: true
# Toggle to disable client advertisements (connect_urls),
# in case of running behind a load balancer (which is not recommended)
# it might be required to disable advertisements.
advertise: true
# In case both external access and advertise are enabled
# then a service account would be required to be able to
# gather the public ip from a node.
serviceAccount: "nats-server"
```
Where the service account named `nats-server` has the following RBAC policy for example:
```yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: nats-server
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: nats-server
rules:
- apiGroups: [""]
resources:
- nodes
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: nats-server-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: nats-server
subjects:
- kind: ServiceAccount
name: nats-server
namespace: default
```
The container image of the initializer can be customized via:
```yaml
bootconfig:
image: connecteverything/nats-boot-config:0.5.2
pullPolicy: IfNotPresent
```
### Using LoadBalancers
In case of using a load balancer for external access, it is recommended to disable no advertise
so that internal ips from the NATS Servers are not advertised to the clients connecting through
the load balancer.
```yaml
nats:
image: nats:alpine
cluster:
enabled: true
noAdvertise: true
leafnodes:
enabled: true
noAdvertise: true
natsbox:
enabled: true
```
Then could use an L4 enabled load balancer to connect to NATS, for example:
```yaml
apiVersion: v1
kind: Service
metadata:
name: nats-lb
spec:
type: LoadBalancer
selector:
app: nats
ports:
- protocol: TCP
port: 4222
targetPort: 4222
name: nats
- protocol: TCP
port: 7422
targetPort: 7422
name: leafnodes
- protocol: TCP
port: 7522
targetPort: 7522
name: gateways
```
## Gateways
A super cluster can be formed by pointing to remote gateways.
You can find more about gateways in the NATS documentation:
https://docs.nats.io/nats-server/configuration/gateways
```yaml
gateway:
enabled: false
name: 'default'
#############################
# #
# List of remote gateways #
# #
#############################
# gateways:
# - name: other
# url: nats://my-gateway-url:7522
#######################
# #
# TLS Configuration #
# #
#######################
#
# # You can find more on how to setup and trouble shoot TLS connnections at:
#
# # https://docs.nats.io/nats-server/configuration/securing_nats/tls
#
# tls:
# secret:
# name: nats-client-tls
# ca: "ca.crt"
# cert: "tls.crt"
# key: "tls.key"
```
## Auth setup
### Auth with a Memory Resolver
```yaml
auth:
enabled: true
# Reference to the Operator JWT.
operatorjwt:
configMap:
name: operator-jwt
key: KO.jwt
# Public key of the System Account
systemAccount:
resolver:
############################
# #
# Memory resolver settings #
# #
##############################
type: memory
#
# Use a configmap reference which will be mounted
# into the container.
#
configMap:
name: nats-accounts
key: resolver.conf
```
### Auth using an Account Server Resolver
```yaml
auth:
enabled: true
# Reference to the Operator JWT.
operatorjwt:
configMap:
name: operator-jwt
key: KO.jwt
# Public key of the System Account
systemAccount:
resolver:
##########################
# #
# URL resolver settings #
# #
##########################
type: URL
url: "http://nats-account-server:9090/jwt/v1/accounts/"
```
## JetStream
### Setting up Memory and File Storage
```yaml
nats:
image: synadia/nats-server:nightly
jetstream:
enabled: true
memStorage:
enabled: true
size: 2Gi
fileStorage:
enabled: true
size: 1Gi
storageDirectory: /data/
storageClassName: default
```
### Using with an existing PersistentVolumeClaim
For example, given the following `PersistentVolumeClaim`:
```yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nats-js-disk
annotations:
volume.beta.kubernetes.io/storage-class: "default"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
```
You can start JetStream so that one pod is bounded to it:
```yaml
nats:
image: synadia/nats-server:nightly
jetstream:
enabled: true
fileStorage:
enabled: true
storageDirectory: /data/
existingClaim: nats-js-disk
claimStorageSize: 3Gi
```
### Clustering example
```yaml
nats:
image: synadia/nats-server:nightly
jetstream:
enabled: true
memStorage:
enabled: true
size: "2Gi"
fileStorage:
enabled: true
size: "1Gi"
storageDirectory: /data/
storageClassName: default
cluster:
enabled: true
# Cluster name is required, by default will be release name.
# name: "nats"
replicas: 3
```
## Misc
### NATS Box
A lightweight container with NATS and NATS Streaming utilities that is deployed along the cluster to confirm the setup.
You can find the image at: https://github.com/nats-io/nats-box
```yaml
natsbox:
enabled: true
image: synadia/nats-box:latest
pullPolicy: IfNotPresent
# credentials:
# secret:
# name: nats-sys-creds
# key: sys.creds
```
### Configuration Reload sidecar
The NATS config reloader image to use:
```yaml
reloader:
enabled: true
image: connecteverything/nats-server-config-reloader:0.6.0
pullPolicy: IfNotPresent
```
### Prometheus Exporter sidecar
You can toggle whether to start the sidecar that can be used to feed metrics to Prometheus:
```yaml
exporter:
enabled: true
image: synadia/prometheus-nats-exporter:0.5.0
pullPolicy: IfNotPresent
```
### Prometheus operator ServiceMonitor support
You can enable prometheus operator ServiceMonitor:
```yaml
exporter:
# You have to enable exporter first
enabled: true
serviceMonitor:
enabled: true
## Specify the namespace where Prometheus Operator is running
# namespace: monitoring
# ...
```
### Pod Customizations
#### Security Context
```yaml
# Toggle whether to use setup a Pod Security Context
# ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
securityContext:
fsGroup: 1000
runAsUser: 1000
runAsNonRoot: true
```
#### Affinity
<https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity>
`matchExpressions` must be configured according to your setup
```yaml
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node.kubernetes.io/purpose
operator: In
values:
- nats
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nats
- stan
topologyKey: "kubernetes.io/hostname"
```
#### Service topology
[Service topology](https://kubernetes.io/docs/concepts/services-networking/service-topology/) is disabled by default, but can be enabled by setting `topologyKeys`. For example:
```yaml
topologyKeys:
- "kubernetes.io/hostname"
- "topology.kubernetes.io/zone"
- "topology.kubernetes.io/region"
```
#### CPU/Memory Resource Requests/Limits
Sets the pods cpu/memory requests/limits
```yaml
nats:
resources:
requests:
cpu: 2
memory: 4Gi
limits:
cpu: 4
memory: 6Gi
```
No resources are set by default.
#### Annotations
<https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations>
```yaml
podAnnotations:
key1 : "value1",
key2 : "value2"
```
### Name Overides
Can change the name of the resources as needed with:
```yaml
nameOverride: "my-nats"
```
### Image Pull Secrets
```yaml
imagePullSecrets:
- name: myRegistry
```
Adds this to the StatefulSet:
```yaml
spec:
imagePullSecrets:
- name: myRegistry
```

View File

@ -0,0 +1,26 @@
{{- if or .Values.nats.logging.debug .Values.nats.logging.trace }}
*WARNING*: Keep in mind that running the server with
debug and/or trace enabled significantly affects the
performance of the server!
{{- end }}
You can find more information about running NATS on Kubernetes
in the NATS documentation website:
https://docs.nats.io/nats-on-kubernetes/nats-kubernetes
{{- if .Values.natsbox.enabled }}
NATS Box has been deployed into your cluster, you can
now use the NATS tools within the container as follows:
kubectl exec -n {{ .Release.Namespace }} -it deployment/{{ template "nats.fullname" . }}-box -- /bin/sh -l
nats-box:~# nats-sub test &
nats-box:~# nats-pub test hi
nats-box:~# nc {{ template "nats.fullname" . }} 4222
{{- end }}
Thanks for using NATS!

View File

@ -0,0 +1,95 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "nats.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "nats.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "nats.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "nats.labels" -}}
helm.sh/chart: {{ include "nats.chart" . }}
{{ include "nats.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "nats.selectorLabels" -}}
app.kubernetes.io/name: {{ include "nats.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Return the proper NATS image name
*/}}
{{- define "nats.clusterAdvertise" -}}
{{- printf "$(POD_NAME).%s.$(POD_NAMESPACE).svc" (include "nats.fullname" . ) }}
{{- end }}
{{/*
Return the NATS cluster routes.
*/}}
{{- define "nats.clusterRoutes" -}}
{{- $name := default .Release.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- range $i, $e := until (.Values.cluster.replicas | int) -}}
{{- printf "nats://%s-%d.%s.%s.svc:6222," $name $i $name $.Release.Namespace -}}
{{- end -}}
{{- end }}
{{- define "nats.tlsConfig" -}}
tls {
{{- if .cert }}
cert_file: {{ .secretPath }}/{{ .secret.name }}/{{ .cert }}
{{- end }}
{{- if .key }}
key_file: {{ .secretPath }}/{{ .secret.name }}/{{ .key }}
{{- end }}
{{- if .ca }}
ca_file: {{ .secretPath }}/{{ .secret.name }}/{{ .ca }}
{{- end }}
{{- if .insecure }}
insecure: {{ .insecure }}
{{- end }}
{{- if .verify }}
verify: {{ .verify }}
{{- end }}
{{- if .verifyAndMap }}
verify_and_map: {{ .verifyAndMap }}
{{- end }}
{{- if .curvePreferences }}
curve_preferences: {{ .curvePreferences }}
{{- end }}
{{- if .timeout }}
timeout: {{ .timeout }}
{{- end }}
}
{{- end }}

Some files were not shown because too many files have changed in this diff Show More