Skip to content

Commit

Permalink
[PLAT-520] Added kube-state-metrics support
Browse files Browse the repository at this point in the history
1. Can take customized endpoint .
2. Can install kube-state-metrics along with the platform.
  • Loading branch information
baba230896 committed Mar 16, 2022
1 parent 470f0f4 commit 89f8543
Show file tree
Hide file tree
Showing 8 changed files with 347 additions and 1 deletion.
13 changes: 13 additions & 0 deletions stable/yugaware/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,16 @@ Make list of allowed CORS origins
{{- end -}}
]
{{- end -}}

{{/*
kube-state-metrics
*/}}
{{- define "kubeStateMetric.endpoint" -}}
{{- if .Values.kubeStateMetric.customEndpoint -}}
{{- .Values.kubeStateMetric.customEndpoint -}}
{{- else if .Values.kubeStateMetric.install -}}
{{- printf "%s-ksm.%s.svc.%s:8080" .Release.Name .Release.Namespace .Values.domainName -}}
{{- else -}}
{{- printf "kube-state-metrics.kube-system.svc.%s:8080" .Values.domainName -}}
{{- end -}}
{{- end -}}
2 changes: 1 addition & 1 deletion stable/yugaware/templates/configs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ data:
- job_name: 'kube-state-metrics'
static_configs:
- targets: ['kube-state-metrics.kube-system.svc.{{.Values.domainName}}:8080']
- targets: ['{{ template "kubeStateMetric.endpoint" . }}']
metric_relabel_configs:
# Save the name of the metric so we can group_by since we cannot by __name__ directly...
- source_labels: ["__name__"]
Expand Down
179 changes: 179 additions & 0 deletions stable/yugaware/templates/kube-state-metrics-clusterrole.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
{{- if and .Values.kubeStateMetric.install (not .Values.kubeStateMetric.customEndpoint) -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app: {{ .Release.Name }}-yugaware-ksm
chart: {{ template "yugaware.chart" . }}
release: {{ .Release.Name }}
name: {{ .Release.Name }}-ksm
rules:
{{ if has "certificatesigningrequests" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["certificates.k8s.io"]
resources:
- certificatesigningrequests
verbs: ["list", "watch"]
{{ end -}}
{{ if has "configmaps" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- configmaps
verbs: ["list", "watch"]
{{ end -}}
{{ if has "cronjobs" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["batch"]
resources:
- cronjobs
verbs: ["list", "watch"]
{{ end -}}
{{ if has "daemonsets" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["extensions", "apps"]
resources:
- daemonsets
verbs: ["list", "watch"]
{{ end -}}
{{ if has "deployments" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["extensions", "apps"]
resources:
- deployments
verbs: ["list", "watch"]
{{ end -}}
{{ if has "endpoints" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- endpoints
verbs: ["list", "watch"]
{{ end -}}
{{ if has "horizontalpodautoscalers" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["autoscaling"]
resources:
- horizontalpodautoscalers
verbs: ["list", "watch"]
{{ end -}}
{{ if has "ingresses" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["extensions", "networking.k8s.io"]
resources:
- ingresses
verbs: ["list", "watch"]
{{ end -}}
{{ if has "jobs" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["batch"]
resources:
- jobs
verbs: ["list", "watch"]
{{ end -}}
{{ if has "limitranges" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- limitranges
verbs: ["list", "watch"]
{{ end -}}
{{ if has "mutatingwebhookconfigurations" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["admissionregistration.k8s.io"]
resources:
- mutatingwebhookconfigurations
verbs: ["list", "watch"]
{{ end -}}
{{ if has "namespaces" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- namespaces
verbs: ["list", "watch"]
{{ end -}}
{{ if has "networkpolicies" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["networking.k8s.io"]
resources:
- networkpolicies
verbs: ["list", "watch"]
{{ end -}}
{{ if has "nodes" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- nodes
verbs: ["list", "watch"]
{{ end -}}
{{ if has "persistentvolumeclaims" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- persistentvolumeclaims
verbs: ["list", "watch"]
{{ end -}}
{{ if has "persistentvolumes" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- persistentvolumes
verbs: ["list", "watch"]
{{ end -}}
{{ if has "poddisruptionbudgets" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["policy"]
resources:
- poddisruptionbudgets
verbs: ["list", "watch"]
{{ end -}}
{{ if has "pods" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- pods
verbs: ["list", "watch"]
{{ end -}}
{{ if has "replicasets" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["extensions", "apps"]
resources:
- replicasets
verbs: ["list", "watch"]
{{ end -}}
{{ if has "replicationcontrollers" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- replicationcontrollers
verbs: ["list", "watch"]
{{ end -}}
{{ if has "resourcequotas" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- resourcequotas
verbs: ["list", "watch"]
{{ end -}}
{{ if has "secrets" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- secrets
verbs: ["list", "watch"]
{{ end -}}
{{ if has "services" $.Values.kubeStateMetric.collectors }}
- apiGroups: [""]
resources:
- services
verbs: ["list", "watch"]
{{ end -}}
{{ if has "statefulsets" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["apps"]
resources:
- statefulsets
verbs: ["list", "watch"]
{{ end -}}
{{ if has "storageclasses" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["storage.k8s.io"]
resources:
- storageclasses
verbs: ["list", "watch"]
{{ end -}}
{{ if has "validatingwebhookconfigurations" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["admissionregistration.k8s.io"]
resources:
- validatingwebhookconfigurations
verbs: ["list", "watch"]
{{ end -}}
{{ if has "volumeattachments" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["storage.k8s.io"]
resources:
- volumeattachments
verbs: ["list", "watch"]
{{ end -}}
{{ if has "verticalpodautoscalers" $.Values.kubeStateMetric.collectors }}
- apiGroups: ["autoscaling.k8s.io"]
resources:
- verticalpodautoscalers
verbs: ["list", "watch"]
{{ end -}}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{{- if and .Values.kubeStateMetric.install (not .Values.kubeStateMetric.customEndpoint) -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app: {{ .Release.Name }}-yugaware-ksm
chart: {{ template "yugaware.chart" . }}
release: {{ .Release.Name }}
name: {{ .Release.Name }}-ksm
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ .Release.Name }}-ksm
subjects:
- kind: ServiceAccount
name: {{ .Release.Name }}-ksm
namespace: {{ .Release.Namespace }}
{{- end -}}
66 changes: 66 additions & 0 deletions stable/yugaware/templates/kube-state-metrics-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{{- if and .Values.kubeStateMetric.install (not .Values.kubeStateMetric.customEndpoint) -}}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-ksm
{{- if .Values.yugaware.service.annotations }}
annotations:
{{ toYaml .Values.yugaware.service.annotations | indent 4 }}
{{- end }}
labels:
app: {{ .Release.Name }}-yugaware-ksm
chart: {{ template "yugaware.chart" . }}
release: {{ .Release.Name }}
spec:
selector:
matchLabels:
app: {{ .Release.Name }}-yugaware-ksm
replicas: {{ .Values.kubeStateMetric.replicas }}
template:
metadata:
labels:
app: {{ .Release.Name }}-yugaware-ksm
annotations:
{{- if .Values.yugaware.pod.annotations }}
{{ toYaml .Values.yugaware.pod.annotations | indent 8 }}
{{- end }}
spec:
serviceAccountName: {{ .Release.Name }}
{{- if .Values.kubeStateMetric.securityContext.enabled }}
securityContext:
fsGroup: {{ .Values.kubeStateMetric.securityContext.fsGroup }}
runAsGroup: {{ .Values.kubeStateMetric.securityContext.runAsGroup }}
runAsUser: {{ .Values.kubeStateMetric.securityContext.runAsUser }}
{{- end }}
containers:
- name: kube-state-metrics-yugaware
args:
{{- if .Values.kubeStateMetric.extraArgs }}
{{- range .Values.kubeStateMetric.extraArgs }}
- {{ . }}
{{- end }}
{{- end }}
- --port=8080
- --resources={{ .Values.kubeStateMetric.collectors | join "," }}
imagePullPolicy: {{ .Values.kubeStateMetric.image.pullPolicy }}
image: "{{ .Values.kubeStateMetric.image.repository }}:{{ .Values.kubeStateMetric.image.tag }}"
ports:
- containerPort: 8080
name: "http"
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 5
{{- if .Values.kubeStateMetric.resources }}
resources:
{{ toYaml .Values.kubeStateMetric.resources | indent 10 }}
{{- end }}
{{- end -}}
14 changes: 14 additions & 0 deletions stable/yugaware/templates/kube-state-metrics-service-account.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{{- if and .Values.kubeStateMetric.install (not .Values.kubeStateMetric.customEndpoint) -}}
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: {{ .Release.Name }}-yugaware-ksm
chart: {{ template "yugaware.chart" . }}
release: {{ .Release.Name }}
name: {{ .Release.Name }}-ksm
{{- if .Values.yugaware.serviceAccountAnnotations }}
annotations:
{{ toYaml .Values.yugaware.serviceAccountAnnotations | indent 4 }}
{{- end }}
{{- end -}}
23 changes: 23 additions & 0 deletions stable/yugaware/templates/kube-state-metrics-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{{- if and .Values.kubeStateMetric.install (not .Values.kubeStateMetric.customEndpoint) -}}
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-ksm
labels:
app: {{ .Release.Name }}-yugaware-ksm
chart: {{ template "yugaware.chart" . }}
release: {{ .Release.Name }}
{{- if .Values.yugaware.service.annotations }}
annotations:
{{ toYaml .Values.yugaware.service.annotations | indent 4 }}
{{- end }}
spec:
type: "ClusterIP"
ports:
- name: "http"
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: {{ .Release.Name }}-yugaware-ksm
{{- end -}}
33 changes: 33 additions & 0 deletions stable/yugaware/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,36 @@ additionalAppConf:
## to modify this unless you are using helm template command i.e. GKE
## app's deployer image against a Kubernetes cluster >= 1.21.
# pdbPolicyVersionOverride: "v1beta1"

## kube-state-metric support
## Custom endpoint has higher priority than installation.
kubeStateMetric:
## To provide custom kube-state-metric endpoint
# customEndpoint: "kube-state-metrics.svc.cluster.local:8080"
## To enable the kube-state-metric installation along with platform
install: false
image:
repository: k8s.gcr.io/kube-state-metrics/kube-state-metrics
tag: v2.4.1
pullPolicy: IfNotPresent
replicas: 1
securityContext:
enabled: true
runAsGroup: 65534
runAsUser: 65534
fsGroup: 65534
resources:
limits:
cpu: 100m
memory: 64Mi
requests:
cpu: 10m
memory: 32Mi
## List of additional cli arguments to configure kube-state-metrics
## for example: --enable-gzip-encoding, --log-file, etc.
## all the possible args can be found here: https://github.com/kubernetes/kube-state-metrics/blob/master/docs/cli-arguments.md
extraArgs: []
## As we know platform need only nodes and pods metrics from kube-state-metrics
## So we just enable the collector for nodes and pods.
collectors:
- pods

0 comments on commit 89f8543

Please sign in to comment.