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 name: kubezero-istio-ingress
description: KubeZero Umbrella Chart for Istio based Ingress description: KubeZero Umbrella Chart for Istio based Ingress
type: application type: application
version: 0.5.2 version: 0.5.6
appVersion: 1.9.3 appVersion: 1.9.3
home: https://kubezero.com home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png

View File

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

View File

@ -17,6 +17,8 @@ spec:
{{- if $gateway.replicaCount }} {{- if $gateway.replicaCount }}
replicas: {{ $gateway.replicaCount }} replicas: {{ $gateway.replicaCount }}
{{- end }} {{- end }}
# Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ??
minReadySeconds: 120
{{- end }} {{- end }}
selector: selector:
matchLabels: matchLabels:
@ -69,7 +71,7 @@ spec:
{{- if .Values.global.priorityClassName }} {{- if .Values.global.priorityClassName }}
priorityClassName: "{{ .Values.global.priorityClassName }}" priorityClassName: "{{ .Values.global.priorityClassName }}"
{{- end }} {{- end }}
terminationGracePeriodSeconds: 90 terminationGracePeriodSeconds: 120
{{- if .Values.global.proxy.enableCoreDump }} {{- if .Values.global.proxy.enableCoreDump }}
initContainers: initContainers:
- name: enable-core-dump - name: enable-core-dump
@ -141,6 +143,11 @@ spec:
privileged: false privileged: false
readOnlyRootFilesystem: true readOnlyRootFilesystem: true
{{- end }} {{- end }}
#This needs kube-proxy support coming with 1.22 hopefully, cilium ?
#lifecycle:
# preStop:
# exec:
# command: ["/bin/sh","-c","sleep 30"]
readinessProbe: readinessProbe:
failureThreshold: 30 failureThreshold: 30
httpGet: 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: istio-ingress:
enabled: false enabled: false
telemetry:
enabled: false
gateways: gateways:
istio-ingressgateway: istio-ingressgateway:
autoscaleEnabled: false autoscaleEnabled: false
replicaCount: 1 replicaCount: 1
rollingMaxSurge: 1
rollingMaxUnavailable: 0
resources: resources:
requests: requests:
cpu: 50m cpu: 50m
@ -35,9 +40,17 @@ istio-ingress:
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
values: istio-ingressgateway values: istio-ingressgateway
type: NodePort type: NodePort
podAnnotations:
proxy.istio.io/config: '{ "terminationDrainDuration": "20s" }'
# custom hardened bootstrap config
env: env:
TERMINATION_DRAIN_DURATION_SECONDS: '"60"' ISTIO_BOOTSTRAP_OVERRIDE: /etc/istio/custom-bootstrap/custom_bootstrap.json
# ISTIO_META_HTTP10: '"1"' 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 # The node selector is normally the list of nodeports, see CloudBender
nodeSelector: nodeSelector:
node.kubernetes.io/ingress.public: "30080_30443" node.kubernetes.io/ingress.public: "30080_30443"
@ -72,9 +85,17 @@ istio-ingress:
dnsNames: [] dnsNames: []
# - '*.example.com' # - '*.example.com'
meshConfig:
defaultConfig:
proxyMetadata:
# ISTIO_META_HTTP10: 1
istio-private-ingress: istio-private-ingress:
enabled: false enabled: false
telemetry:
enabled: false
gateways: gateways:
istio-ingressgateway: istio-ingressgateway:
# name and labels make the ingress private # name and labels make the ingress private
@ -85,6 +106,8 @@ istio-private-ingress:
autoscaleEnabled: false autoscaleEnabled: false
replicaCount: 1 replicaCount: 1
rollingMaxSurge: 1
rollingMaxUnavailable: 0
resources: resources:
requests: requests:
cpu: 50m cpu: 50m
@ -99,13 +122,12 @@ istio-private-ingress:
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
values: istio-private-ingressgateway values: istio-private-ingressgateway
type: NodePort type: NodePort
env: podAnnotations:
TERMINATION_DRAIN_DURATION_SECONDS: '"60"' # sidecar.istio.io/bootstrapOverride: istio-gateway-bootstrap-config
# ISTIO_META_HTTP10: '"1"' proxy.istio.io/config: '{ "terminationDrainDuration": "20s" }'
nodeSelector: nodeSelector:
node.kubernetes.io/ingress.private: "31080_31443" node.kubernetes.io/ingress.private: "31080_31443"
#nodeSelector: "31080_31443_31671_31672_31224" #nodeSelector: "31080_31443_31671_31672_31224"
ports: ports:
- name: status-port - name: status-port
port: 15021 port: 15021
@ -149,3 +171,7 @@ istio-private-ingress:
dnsNames: [] dnsNames: []
# - '*.example.com' # - '*.example.com'
meshConfig:
defaultConfig:
proxyMetadata:
# ISTIO_META_HTTP10: 1

View File

@ -1,2 +1,3 @@
istioctl 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 istioctl
istio-?.?.? istio-?.?.?

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-istio name: kubezero-istio
description: KubeZero Umbrella Chart for Istio description: KubeZero Umbrella Chart for Istio
type: application type: application
version: 0.5.3 version: 0.5.6
appVersion: 1.9.3 appVersion: 1.9.3
home: https://kubezero.com home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png 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://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#IstioOperatorSpec
- https://github.com/istio/istio/blob/master/manifests/profiles/default.yaml - https://github.com/istio/istio/blob/master/manifests/profiles/default.yaml
- https://istio.io/latest/docs/setup/install/standalone-operator/ - 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 #!/bin/bash
set -ex set -ex
### TODO
# - https://istio.io/latest/docs/ops/configuration/security/harden-docker-images/
export ISTIO_VERSION=1.9.3 export ISTIO_VERSION=1.9.3
if [ ! -d istio-$ISTIO_VERSION ]; then rm -rf istio
NAME="istio-$ISTIO_VERSION" curl -sL "https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio-${ISTIO_VERSION}-linux-amd64.tar.gz" | tar xz
URL="https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio-${ISTIO_VERSION}-linux-amd64.tar.gz" mv istio-${ISTIO_VERSION} istio
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
# remove unused old telemetry filters # 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-* rm -rf ../kubezero-istio-ingress/charts/istio-*
cp -r istio-${ISTIO_VERSION}/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/ cp -r istio/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/istio-private-ingress
# Rename private chart # Rename private chart
sed -i -e 's/name: istio-ingress/name: istio-private-ingress/' ../kubezero-istio-ingress/charts/istio-private-ingress/Chart.yaml 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 # 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; } [ -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: global:
# hub: docker.io/istio # hub: docker.io/istio
# tag: 1.9.0 # tag: 1.9.3
logAsJson: true logAsJson: true
jwtPolicy: first-party-jwt jwtPolicy: first-party-jwt
@ -35,13 +35,5 @@ istio-discovery:
enabled: false enabled: false
meshConfig: meshConfig:
defaultConfig:
terminationDrainDuration: 60s
# proxyMetadata:
# ISTIO_META_HTTP10: '"1"'
accessLogFile: /dev/stdout accessLogFile: /dev/stdout
accessLogEncoding: 'JSON' 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 name: kubezero-kiam
description: KubeZero Umbrella Chart for Kiam description: KubeZero Umbrella Chart for Kiam
type: application type: application
version: 0.3.3 version: 0.3.4
appVersion: "4.0" appVersion: "4.0"
home: https://kubezero.com home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png 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 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 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 enabled: false
serviceMonitor: serviceMonitor:
enabled: true enabled: false
selector: selector:
release: metrics release: metrics
@ -216,7 +216,7 @@ fluent-bit:
resources: resources:
requests: requests:
cpu: 20m cpu: 20m
memory: 16Mi memory: 32Mi
limits: limits:
memory: 64Mi memory: 64Mi

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

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

View File

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

View File

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

View File

@ -6,7 +6,7 @@ annotations:
url: https://github.com/prometheus-operator/kube-prometheus url: https://github.com/prometheus-operator/kube-prometheus
artifacthub.io/operator: "true" artifacthub.io/operator: "true"
apiVersion: v2 apiVersion: v2
appVersion: 0.46.0 appVersion: 0.47.0
dependencies: dependencies:
- condition: kubeStateMetrics.enabled - condition: kubeStateMetrics.enabled
name: kube-state-metrics name: kube-state-metrics
@ -19,7 +19,7 @@ dependencies:
- condition: grafana.enabled - condition: grafana.enabled
name: grafana name: grafana
repository: https://grafana.github.io/helm-charts 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. 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 home: https://github.com/prometheus-operator/kube-prometheus
icon: https://raw.githubusercontent.com/prometheus/prometheus.github.io/master/assets/prometheus_logo-cb55bb5c346.png 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-community/helm-charts
- https://github.com/prometheus-operator/kube-prometheus - https://github.com/prometheus-operator/kube-prometheus
type: application 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. 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 ### 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: 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: sources:
- https://github.com/grafana/grafana - https://github.com/grafana/grafana
type: application 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.sha` | Image sha (optional) | `2b56f6106ddc376bb46d974230d530754bf65a640dfbc5245191d72d3b49efc6` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` | | `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `image.pullSecrets` | Image pull secrets | `{}` | | `image.pullSecrets` | Image pull secrets | `{}` |
| `service.enabled` | Enable grafana service | `true` |
| `service.type` | Kubernetes service type | `ClusterIP` | | `service.type` | Kubernetes service type | `ClusterIP` |
| `service.port` | Kubernetes port where service is exposed | `80` | | `service.port` | Kubernetes port where service is exposed | `80` |
| `service.portName` | Name of the port on the service | `service` | | `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.securityContext` | image-renderer deployment securityContext | `{}` |
| `imageRenderer.hostAliases` | image-renderer deployment Host Aliases | `[]` | | `imageRenderer.hostAliases` | image-renderer deployment Host Aliases | `[]` |
| `imageRenderer.priorityClassName` | image-renderer deployment priority class | `''` | | `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.portName` | image-renderer service port name | `'http'` |
| `imageRenderer.service.port` | image-renderer service port used by both service and deployment | `8081` | | `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 | `''` | | `imageRenderer.grafanaSubPath` | Grafana sub path to use for image renderer callback url | `''` |

View File

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

View File

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

View File

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

View File

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

View File

@ -125,6 +125,7 @@ podPortName: grafana
## ref: http://kubernetes.io/docs/user-guide/services/ ## ref: http://kubernetes.io/docs/user-guide/services/
## ##
service: service:
enabled: true
type: ClusterIP type: ClusterIP
port: 80 port: 80
targetPort: 3000 targetPort: 3000
@ -688,6 +689,8 @@ imageRenderer:
# image-renderer deployment priority class # image-renderer deployment priority class
priorityClassName: '' priorityClassName: ''
service: service:
# Enable the image-renderer service
enabled: true
# image-renderer service port name # image-renderer service port name
portName: 'http' portName: 'http'
# image-renderer service port used by both service and deployment # 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 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 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 apiVersion: apiextensions.k8s.io/v1
@ -161,7 +161,7 @@ spec:
description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint.
type: string type: string
relabelings: 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: 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' 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: 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 apiVersion: apiextensions.k8s.io/v1
@ -35,6 +35,55 @@ spec:
spec: spec:
description: Specification of desired Ingress selection for target discovery by Prometheus. description: Specification of desired Ingress selection for target discovery by Prometheus.
properties: 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: interval:
description: Interval at which targets are probed using the configured prober. If not specified Prometheus' global scrape interval is used. description: Interval at which targets are probed using the configured prober. If not specified Prometheus' global scrape interval is used.
type: string type: string
@ -188,6 +237,99 @@ spec:
type: array type: array
type: object type: object
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 type: object
required: required:
- spec - 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 apiVersion: apiextensions.k8s.io/v1
@ -1467,6 +1467,11 @@ spec:
enableAdminAPI: 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' 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 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: 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. 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 type: string
@ -2465,7 +2470,7 @@ spec:
type: object type: object
type: object type: object
bearerToken: bearerToken:
description: bearer token for remote read. description: Bearer token for remote read.
type: string type: string
bearerTokenFile: bearerTokenFile:
description: File to read bearer token for remote read. description: File to read bearer token for remote read.
@ -2636,7 +2641,7 @@ spec:
type: object type: object
type: object type: object
bearerToken: bearerToken:
description: File to read bearer token for remote write. description: Bearer token for remote write.
type: string type: string
bearerTokenFile: bearerTokenFile:
description: File to read bearer token for remote write. description: File to read bearer token for remote write.
@ -2646,6 +2651,16 @@ spec:
type: string 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. 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 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: 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. 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 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 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 apiVersion: apiextensions.k8s.io/v1
@ -149,7 +149,7 @@ spec:
description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint.
type: string type: string
relabelings: 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: 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' 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: 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 apiVersion: apiextensions.k8s.io/v1
@ -3339,4 +3339,4 @@ status:
kind: "" kind: ""
plural: "" plural: ""
conditions: [] conditions: []
storedVersions: [] storedVersions: []

View File

@ -46,6 +46,10 @@ The longest name that gets created adds and extra 37 characters, so truncation s
{{/* Generate basic labels */}} {{/* Generate basic labels */}}
{{- define "kube-prometheus-stack.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" . }} chart: {{ template "kube-prometheus-stack.chartref" . }}
release: {{ $.Release.Name | quote }} release: {{ $.Release.Name | quote }}
heritage: {{ $.Release.Service | quote }} heritage: {{ $.Release.Service | quote }}

View File

@ -91,7 +91,7 @@ spec:
labelSelector: labelSelector:
matchExpressions: matchExpressions:
- {key: app, operator: In, values: [alertmanager]} - {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" }} {{- else if eq .Values.alertmanager.alertmanagerSpec.podAntiAffinity "soft" }}
podAntiAffinity: podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution:

View File

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

View File

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

View File

@ -6,6 +6,8 @@ metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }} namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels: labels:
app: {{ template "kube-prometheus-stack.name" . }}-alertmanager 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 }} {{ include "kube-prometheus-stack.labels" . | indent 4 }}
{{- if .Values.alertmanager.serviceAccount.annotations }} {{- if .Values.alertmanager.serviceAccount.annotations }}
annotations: annotations:

View File

@ -6,6 +6,8 @@ metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }} namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels: labels:
app: {{ template "kube-prometheus-stack.name" . }}-operator 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 }} {{ include "kube-prometheus-stack.labels" . | indent 4 }}
imagePullSecrets: imagePullSecrets:
{{ toYaml .Values.global.imagePullSecrets | indent 2 }} {{ toYaml .Values.global.imagePullSecrets | indent 2 }}

View File

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

View File

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

View File

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

View File

@ -70,6 +70,12 @@ spec:
logFormat: {{ .Values.prometheus.prometheusSpec.logFormat }} logFormat: {{ .Values.prometheus.prometheusSpec.logFormat }}
listenLocal: {{ .Values.prometheus.prometheusSpec.listenLocal }} listenLocal: {{ .Values.prometheus.prometheusSpec.listenLocal }}
enableAdminAPI: {{ .Values.prometheus.prometheusSpec.enableAdminAPI }} 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 }} {{- if .Values.prometheus.prometheusSpec.scrapeInterval }}
scrapeInterval: {{ .Values.prometheus.prometheusSpec.scrapeInterval }} scrapeInterval: {{ .Values.prometheus.prometheusSpec.scrapeInterval }}
{{- end }} {{- end }}

View File

@ -6,6 +6,8 @@ metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }} namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels: labels:
app: {{ template "kube-prometheus-stack.name" . }}-prometheus 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 }} {{ include "kube-prometheus-stack.labels" . | indent 4 }}
{{- if .Values.prometheus.serviceAccount.annotations }} {{- if .Values.prometheus.serviceAccount.annotations }}
annotations: annotations:

View File

@ -1536,7 +1536,7 @@ prometheusOperator:
## ##
image: image:
repository: quay.io/prometheus-operator/prometheus-operator repository: quay.io/prometheus-operator/prometheus-operator
tag: v0.46.0 tag: v0.47.0
sha: "" sha: ""
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
@ -1552,7 +1552,7 @@ prometheusOperator:
## ##
prometheusConfigReloaderImage: prometheusConfigReloaderImage:
repository: quay.io/prometheus-operator/prometheus-config-reloader repository: quay.io/prometheus-operator/prometheus-config-reloader
tag: v0.46.0 tag: v0.47.0
sha: "" sha: ""
## Set the prometheus config reloader side-car CPU limit ## Set the prometheus config reloader side-car CPU limit
@ -1868,6 +1868,11 @@ prometheus:
## ##
enableAdminAPI: false 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 of Prometheus.
## ##
image: 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 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/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-15 14:43:03.074281889 +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 @@ @@ -54,34 +54,6 @@
{{- if .Values.defaultRules.additionalRuleLabels }} {{- if .Values.defaultRules.additionalRuleLabels }}
{{ toYaml .Values.defaultRules.additionalRuleLabels | indent 8 }} {{ toYaml .Values.defaultRules.additionalRuleLabels | indent 8 }}
@ -37,8 +57,8 @@ diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yam
annotations: annotations:
message: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": gRPC requests to {{`{{`}} $labels.grpc_method {{`}}`}} are taking {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' 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 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/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-15 14:49:41.614282790 +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 @@ @@ -30,7 +30,7 @@
summary: Filesystem is predicted to run out of space within the next 24 hours. summary: Filesystem is predicted to run out of space within the next 24 hours.
expr: |- 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:
H4sIAAAAAAAC/+1dbW/bOBL+nl8h6HpFcudcLdtx0gDFIa9Nge1er0m7uGsDg5ZoW4gsaSkqiRvkfvuR1BslkZKdOH6JuR+68YxMkTPD4cMZDv2wpWl6r2e7fogD/VD7cd2IKAj+GdoIcjTguh4G2PZcSnwgJEJ07ADTR9gnLaYyTj+0HfzJJUyjkVEtgEHghciEhKF/Qd4Y4hEMA517Brqg71A+RiHk6CPbElBt03NPPMdDtEE07IPtZkNrGQb5Z2+voRk7fNMuGLMXH2Vj0d5qRw5EONcFPPHZcxYIRn0PIEuPeY/s/9fk30cmFGjZuNBbfehC/MkiFDd0nIiCgD+68jwH2z6hNxmRDufEczHyHCrQAXCC6Pt27ruO7d5wWvCBC9nzkcgTgeum5zjADyDfUo5hlThDZFtfvEyZkZALCrsjn1sdjnCfDCD+PKGfE+mkbbMxtNKPWa+vUxqCPgSYGypH/YQhYuoRs796dzkBM1Yw8u6ubFyyHB3HRP0kRAi6WDsGrnVnW3ik55+5tH+x50ZdjhFbAvLuIhuIx5gKHjg2CJgBMklmIugDRsl1hdrTb9AdYibmZo4Og5KGameLPrAdJydpSviIgGWTgfKakmv7fUHbRqtG24ZY2+30owOH0LXybyJiGrpHwZV4aoPbYXHw1HQjfYk9wdnYxxMx678QeWXOGNwL3jG2XQEV2cMRvhT6G2pmAip59g9mUnmrpCwP0SGkoymwTmFgltvDxD05go7dAieEiVmV9EB8hcCKKPUu7pvBU28KM5LI4pLM1NyM1+lovni2iz97TByMoHMz24Qii/YhsVoXg2HZI/m0NWqiIX3/Xp5e7j4RmgURZP594HiZACUeJIDIhsG/biEiFg8LQwxk/Q1KAw8wMG9KvQkw9H1o/UZkWuJhgIYQB9x6yK+IdLW499kwqN57pG/mdhCOt23i6uA2WcYwIK2iHlk+7jx0Q5ZgE9q3sNefYBj0mEU8mE5IeoA+/NTfxH/+1Bt0VWMD+/A/Qk8//dQff7whIoWIWM3hG7KYe05Iner1zk/3b5rnatvpsw3fswh1iLzQ7zlwgLdpFxwPWI3kjx51hTta+pVeyiDfPbwJ+5D+0fPuyBgOEXRAH87a34aWtEk5//g7T2Gvp+3Q/5Oh7Wj9iZb2cod0nptZ1BF6aMyMg/j2MexFVpF/JJHNOTAxww9Gjh25sfO0nYeHtDPa42O+KQQHbEXSj/J0ai7M0FLiY/xXZpN4RFQz8hyrYKu03+fE5xcNnNIvR/YAlxmFhe4rMSzNG2jH1IK0r5E9WdzilkKSB97BAcTQQtHFRX6sVfRGvWSJtF3LvrWtkDiukmdKnmFIKOvAPbi3C0tSPzRvoklU8KPj2P+UNJmguqLfjRy11IP+4PWUOOeUdl0awgTcw4q5ndnbsV+wMzYVSh2kDG94DBhmy1tetFSVHo/WqmbewLLlKDOxxup3cYsX8+ZhqhyhAlR1FKhSoEqBqvmBKiIjNxjbWKEqharmgqquYoPCClgpYLXqwMokvmrsVggbw3s2jisyG/IDYepNWbUiSRr6Tr+m/eVI0ljKnrXB4+oGj2du8KS6wZOZGzytbvB05gbPqhs8m7nB8+oGz2du8GN1gx9nbvCiusGL6RtM1hhJgym7YkWZeueQ4cEBwR9JVPl986/67DuH2ti7IQm+75UAbG7X9AL4VQOB9ovuEqZAmYGJPCarXKeoQ7uAwGLfyHOiNZITFnFlBWlYEehn61JJJjNh1IlTtSCx3anYSZp0zxrLpOTCzWRDm0k3sSuY4aH/kP92P3/ePT3VLi4Ox+PDoLCiWNC0x4BlU1r5FYUor7wux4ws+6SfImKmmkUgpV567BuiUtXzDB8QdINc8ZAlOCsHTsj+0YKFt4WuzcZLvotw/TxOhV5K4pTjWpuhCvHKOo063HDcJ1NMqA4KYJ6jDBEc3ih9HC9TH0dkgw6GUE0OMahbtjI2fnKcLlMfyb49mRLaFxDtiDdSFWfzVYX/JFVwE2KztXG+CtooTgztFHk0LruZKvm4ohNks7VysUyt/CEMIqyC6PMh5SdJ3nq33zroD/b3TdMwul2rNWgb7XZ/0No76HQP9rum+Y6mI5ALMQx243yK7Q53k9jJPz00/GR9MN4iOKBa+dBuBm9vAdrNMhNZWoIxWPKBpR7YxzRN8abXMyGXECvagjiY81xbKO5EyykFdb5nJTNRLP1dyEEFGAiS3KL0VKsyPfXkhFRDZSs33EaO52cj4Hao3MgrNJGTxZiIciNrbCOni1lqEjfiR7sMZSRrZSRnC8YjykrW0UrOl+NKrChgoYxlrYzl45JcirKWdbSWiyec0Hz2ScxLDDB//iaJ8kQCkJ2AS+pkcwdM+DLZHGN+VbLGe/FJna6gTLYiECmoi5DVRlTVR1TUSExbqS2olaisl5DKU3T6SVg7IZJtKt9Wk6PlZcPkvC+w63I3Kmsq5HUVlbUVNfUV1TUW8joLea1FTb2FvOaipu6ipvaiuv6iqgZDWodR1qWwHkN+pk1yrk16tm2K+oyqGo2aOo2qWo2Keo3q03Tyuo3a2o3Ks3Hi83HyOo66Wg5pEL3o6FQUbLHYYcrSjinKO2Yt8aiKqkuABA8mcoCiPgkkBhyVoCMPPJIjPTWFtdIakKo6EEktyFT1IGUvKa4LkdSGVNaHVNeIyOtEKmpF5PUi4poRvm6kPNRy/YjQn8iLNCoLNaqKNSoKNmRFG9LCjdK41nQIWyKVVWbWFaAVEadBtAcK0SpEqxDt60S0KmmnIO3SIK30pLpCtQrVKlQrC2kv/k7DUpHJPO40XOplki1JmPz9it0mmZX1XHwKyLoxWcRtksW7jF7BdZLtA7G+ufFMcfdR8TaKusuPipyF3n5U5M18/VHtTUbiIujaSvDWdJXgmU7L+woCZF1o5m5DeWXXGXGjTzYN+Vp1dUXk5l5mlLxtta8yiiPWQtSwjlcX4fy1BNUXFxXGkCF2dTXRy3bxWXc+vgLkU7r0UQp9DAV9FPRR0EeVRinsM3fsk4Q2FfhR4GeF7mVc1qnUtiTcZrTmeixVlI/fkHOpnZosvtF+ShpflHyYJo8v4i41kS/iPzmTP1UynkeI8my86EqFMlqcLhmft5VpkOMmZuQLUhIhzJdOyKsKyfXNyEvg55rl46e7pexVpuFx8XLRaZLwgnGWQe0c0uv++qfX/c05NLohcFN4arQWb3YU3lR4U+HNVceb6rIFBTgXCDhr72JVmFNhzlePOVfgSGdx8s3nIOei48odye+SGHsqrjynuLJRg/O7CucrnK9w/rrFldUFSAruLz6+LL5WXmF+hflVnFnFmVtPwZ/7Cn8q/Knw59rFmRUAVQB0KfFmhUEVBlVx52XFnc8QolD3KWHnrbjnevzTT5TbbkZt0ccyR6IH5giOwXeIgqj/xkFEpj+6zH6GCqCb6HsEA2RWq2e/PaWnb8Nw7DtEEO4wnYUEswSYs/UHUQWU8BfCLTgAoYMlPxCecEW7BgYkCyFwsaklU5yH+xzX86lSi15X/zOEaMKMWrQt4GRu5KhDeF+4sDnVHPf6YpQ+V2fmfI/HXxgGJ0peDlNsYhJZ8VUTtksWagseOaK6Lokgx0QZtuDxRMDx0j+LdNmbepFD3U7Bhe0OvIYWN7cjlnurTu7xasQbCLFuJtzg38n79Ty31FFKEz8cazUaCccIA3gVNSQsiptK1SDEnqjIkJB7phcyI2g3i5zIK+pGM6f7mhlIZb4bTIigx5JZyD8hnInTWCCZyrZrx+4zr/XnHPp9bGRAdUev9g4vYfHpy59s8y8y+llmyY3tf0PO5cQ1RZWi0Rwy1ByqXsV8x5uMi7cY8gtZ+sBLzKDF7tUeC5u1Zcw7ZjlPnXIrJK55T1S12FVO1D3ZGrf3jKVtQSafxXUkhr8l26PpAXSigKA4lplIp90sXceXCojyZHtd+dtEN7eKVSFTxtSvqhqYMZK+i7C2RPtEoRchQmjsjRu55tZtrU2CYGoWL2WLJBL/rHO4YlZ15JbemcXSOxti4ltJROgxim3YTEtxVGMQhVx117vbTee8zsyc0vTc13yboHWUfTmWWS/pDK9efY+L+PC2n3PBupHZOW/zusF/aDd5DnerQYv727Ai3V8nY6Bh8rLZyd/CN9zlG+bf0urwH7gLWfYtvr9JX3Li++Wx/Iv+7eokDkQlEbLf0x89195pvydIS9tOfhc+wlN6yNKfer/fb4H97h7ottoAtg+MdrPV7Jr71vsOMLrNQfTwbRoJa249/h/ptNL4j6cAAA==
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 #!/bin/bash
VERSION=14.9.0 VERSION=15.2.0
rm -rf charts/kube-prometheus-stack 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 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 # The grpc alerts could be re-enabled with etcd 3.5
# https://github.com/etcd-io/etcd/pull/12196 # 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: kube-prometheus-stack:
global:
rbac:
pspEnabled: false
defaultRules: defaultRules:
create: true create: true
@ -61,12 +65,6 @@ kube-prometheus-stack:
limits: limits:
memory: 64Mi memory: 64Mi
namespaces:
releaseNamespace: true
additional:
- kube-system
- logging
admissionWebhooks: admissionWebhooks:
patch: patch:
tolerations: tolerations:
@ -87,6 +85,8 @@ kube-prometheus-stack:
action: replace action: replace
prometheus-node-exporter: prometheus-node-exporter:
rbac:
pspEnabled: false
resources: resources:
requests: requests:
cpu: 20m cpu: 20m
@ -101,6 +101,10 @@ kube-prometheus-stack:
logFormat: json logFormat: json
# externalUrl: # externalUrl:
# gather all monitors
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
resources: resources:
requests: requests:
memory: 512Mi memory: 512Mi
@ -109,25 +113,68 @@ kube-prometheus-stack:
memory: 3Gi memory: 3Gi
# cpu: "1000m" # cpu: "1000m"
walCompression: true
storageSpec: storageSpec:
volumeClaimTemplate: volumeClaimTemplate:
spec: spec:
storageClassName: ebs-sc-gp2-xfs storageClassName: ebs-sc-gp3-xfs
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: 16Gi storage: 16Gi
# Custom Grafana tweaks # Custom Grafana tweaks
# - persistence, plugins, auth
grafana: grafana:
enabled: true enabled: true
persistence: rbac:
enabled: true pspEnabled: false
size: 4Gi
storageClassName: ebs-sc-gp2-xfs defaultDashboardsEnabled: false
deploymentStrategy:
type: Recreate 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
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: plugins:
- grafana-piechart-panel - grafana-piechart-panel
service: service:
@ -139,6 +186,8 @@ kube-prometheus-stack:
# Assign state metrics to control plane # Assign state metrics to control plane
kube-state-metrics: kube-state-metrics:
podSecurityPolicy:
enabled: false
tolerations: tolerations:
- key: node-role.kubernetes.io/master - key: node-role.kubernetes.io/master
effect: NoSchedule 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