diff --git a/.github/ct.yaml b/.github/ct.yaml new file mode 100644 index 0000000..cea6df5 --- /dev/null +++ b/.github/ct.yaml @@ -0,0 +1,6 @@ +# See https://github.com/helm/chart-testing#configuration +remote: origin +chart-dirs: + - charts +chart-repos: [] +helm-extra-args: --timeout 600s diff --git a/.github/workflows/chart-lint.yml b/.github/workflows/chart-lint.yml new file mode 100644 index 0000000..418a68f --- /dev/null +++ b/.github/workflows/chart-lint.yml @@ -0,0 +1,32 @@ +name: lint-chart + +on: + pull_request: + paths: + - "charts/**" + +jobs: + lint-test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: "0" + + - name: Run chart-testing (lint) + id: lint + uses: helm/chart-testing-action@v1.0.0-rc.2 + with: + command: lint + config: .github/ct.yaml + + - name: Create kind cluster + uses: helm/kind-action@v1.0.0-rc.1 + if: steps.lint.outputs.changed == 'true' + + - name: Run chart-testing (install) + uses: helm/chart-testing-action@v1.0.0-rc.2 + with: + command: install + config: .github/ct.yaml \ No newline at end of file diff --git a/.github/workflows/chart-release.yml b/.github/workflows/chart-release.yml new file mode 100644 index 0000000..ecc26ee --- /dev/null +++ b/.github/workflows/chart-release.yml @@ -0,0 +1,16 @@ +name: release-chart +on: + push: + tags: + - "*" + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Publish Helm chart + uses: stefanprodan/helm-gh-pages@master + with: + token: ${{ secrets.BOT_GITHUB_TOKEN }} + charts_dir: charts diff --git a/charts/kured/.helmignore b/charts/kured/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/charts/kured/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/kured/Chart.yaml b/charts/kured/Chart.yaml new file mode 100644 index 0000000..3fcddc3 --- /dev/null +++ b/charts/kured/Chart.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +appVersion: "1.4.0" +description: A Helm chart for kured +name: kured +version: 2.0.0 +home: https://github.com/weaveworks/kured +maintainers: + - name: dholbach + email: daniel@weave.works + - name: ckotzbauer + email: christian.kotzbauer@gmail.com +sources: + - https://github.com/weaveworks/kured +icon: https://raw.githubusercontent.com/weaveworks/kured/master/img/logo.png diff --git a/charts/kured/README.md b/charts/kured/README.md new file mode 100644 index 0000000..ae7ee88 --- /dev/null +++ b/charts/kured/README.md @@ -0,0 +1,102 @@ +# Kured (KUbernetes REboot Daemon) + +## Introduction +This chart installs the "Kubernetes Reboot Daemon" using the Helm Package Manager. + +## Prerequisites +- Kubernetes 1.9+ + +## Installing the Chart +To install the chart with the release name `my-release`: +```bash +$ helm repo add kured https://weaveworks.github.io/kured +$ helm install my-release kured/kured +``` + +## Uninstalling the Chart +To uninstall/delete the `my-release` deployment: +```bash +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + + +## Migrate from stable Helm-Chart +The following changes have been made compared to the stable chart: +- **[BREAKING CHANGE]** The `autolock` feature was removed. Use `configuration.startTime` and `configuration.endTime` instead. +- Role inconsistencies have been fixed (allowed verbs for modifying the `DaemonSet`, apiGroup of `PodSecurityPolicy`) +- Added support for affinities. +- Configuration of cli-flags can be made through a `configuration` object. +- Added optional `Service` and `ServiceMonitor` support for metrics endpoint. + + +## Configuration + +| Config | Description | Default | +| ------ | ----------- | ------- | +| `image.repository` | Image repository | `weaveworks/kured` | +| `image.tag` | Image tag | `1.4.0` | +| `image.pullPolicy` | Image pull policy | `IfNotPresent` | +| `image.pullSecrets` | Image pull secrets | `[]` | +| `updateStrategy` | Daemonset update strategy | `OnDelete` | +| `podAnnotations` | Annotations to apply to pods (eg to add Prometheus annotations) | `{}` | +| `extraArgs` | Extra arguments to pass to `/usr/bin/kured`. See below. | `{}` | +| `configuration.annotationTtl` | cli-parameter `--annotation-ttl` | `0` | +| `configuration.alertFilterRegexp` | cli-parameter `--alert-filter-regexp` | `""` | +| `configuration.blockingPodSelector` | Array of selectors for multiple cli-parameters `--blocking-pod-selector` | `[]` | +| `configuration.endTime` | cli-parameter `--end-time` | `""` | +| `configuration.lockAnnotation` | cli-parameter `--lock-annotation` | `""` | +| `configuration.period` | cli-parameter `--period` | `""` | +| `configuration.prometheusUrl` | cli-parameter `--prometheus-url` | `""` | +| `configuration.rebootDays` | Array of days for multiple cli-parameters `--reboot-days` | `[]` | +| `configuration.rebootSentinel` | cli-parameter `--reboot-sentinel` | `""` | +| `configuration.slackChannel` | cli-parameter `--slack-channel` | `""` | +| `configuration.slackHookUrl` | cli-parameter `--slack-hook-url` | `""` | +| `configuration.slackUsername` | cli-parameter `--slack-username` | `""` | +| `configuration.startTime` | cli-parameter `--start-time` | `""` | +| `configuration.timeZone` | cli-parameter `--time-zone` | `""` | +| `rbac.create` | Create RBAC roles | `true` | +| `serviceAccount.create` | Create a service account | `true` | +| `serviceAccount.name` | Service account name to create (or use if `serviceAccount.create` is false) | (chart fullname) | +| `podSecurityPolicy.create` | Create podSecurityPolicy | `false` | +| `resources` | Resources requests and limits. | `{}` | +| `metrics.create` | Create a Service for the metrics endpoint | `false` | +| `metrics.serviceMonitor.create` | Create a ServiceMonitor for prometheus-operator | `true` | +| `metrics.serviceMonitor.namespace` | The namespace to create the ServiceMonitor in | `""` | +| `metrics.serviceMonitor.labels` | Additional labels for the ServiceMonitor | `{}` | +| `metrics.serviceMonitor.interval` | Interval prometheus should scrape the endpoint | `60s` | +| `metrics.serviceMonitor.scrapeTimeout` | A custom scrapeTimeout for prometheus | `""` | +| `priorityClassName` | Priority Class to be used by the pods | `""` | +| `tolerations` | Tolerations to apply to the daemonset (eg to allow running on master) | `[{"key": "node-role.kubernetes.io/master", "effect": "NoSchedule"}]`| +| `affinity` | Affinity for the daemonset (ie, restrict which nodes kured runs on) | `{}` | +| `nodeSelector` | Node Selector for the daemonset (ie, restrict which nodes kured runs on) | `{}` | + +See https://github.com/weaveworks/kured#configuration for values (not contained in the `configuration` object) for `extraArgs`. Note that +```yaml +extraArgs: + foo: 1 + bar-baz: 2 +``` +becomes `/usr/bin/kured ... --foo=1 --bar-baz=2`. + + +## Prometheus Metrics + +Kured exposes a single prometheus metric indicating whether a reboot is required or not (see [kured docs](https://github.com/weaveworks/kured#prometheus-metrics)) for details. + +#### Prometheus-Operator + +```yaml +metrics: + create: true +``` + +#### Prometheus Annotations + +```yaml +podAnnotations: + prometheus.io/scrape: "true" + prometheus.io/path: "/metrics" + prometheus.io/port: "8080" +``` diff --git a/charts/kured/templates/NOTES.txt b/charts/kured/templates/NOTES.txt new file mode 100644 index 0000000..da2a02d --- /dev/null +++ b/charts/kured/templates/NOTES.txt @@ -0,0 +1,3 @@ +Kured will check for /var/run/reboot-required, and reboot nodes when needed. + +See https://github.com/weaveworks/kured/ for details. diff --git a/charts/kured/templates/_helpers.tpl b/charts/kured/templates/_helpers.tpl new file mode 100644 index 0000000..271b902 --- /dev/null +++ b/charts/kured/templates/_helpers.tpl @@ -0,0 +1,64 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "kured.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "kured.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 "kured.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "kured.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "kured.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Return the appropriate apiVersion for podsecuritypolicy. +*/}} +{{- define "kured.psp.apiVersion" -}} +{{- if semverCompare "<1.10-0" .Capabilities.KubeVersion.GitVersion -}} +{{- print "extensions/v1beta1" -}} +{{- else -}} +{{- print "policy/v1beta1" -}} +{{- end -}} +{{- end -}} + +{{/* +Returns a set of labels applied to each resource. +*/}} +{{- define "kured.labels" -}} +app: {{ template "kured.name" . }} +chart: {{ template "kured.chart" . }} +release: {{ .Release.Name }} +heritage: {{ .Release.Service }} +{{- end -}} diff --git a/charts/kured/templates/clusterrole.yaml b/charts/kured/templates/clusterrole.yaml new file mode 100644 index 0000000..1abde05 --- /dev/null +++ b/charts/kured/templates/clusterrole.yaml @@ -0,0 +1,30 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "kured.fullname" . }} + labels: + {{- include "kured.labels" . | nindent 4 }} +rules: +# Allow kured to read spec.unschedulable +# Allow kubectl to drain/uncordon +# +# NB: These permissions are tightly coupled to the bundled version of kubectl; the ones below +# match https://github.com/kubernetes/kubernetes/blob/v1.12.1/pkg/kubectl/cmd/drain.go +# +- apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "patch"] +- apiGroups: [""] + resources: ["pods"] + verbs: ["list","delete","get"] +- apiGroups: ["extensions"] + resources: ["daemonsets"] + verbs: ["get"] +- apiGroups: ["apps"] + resources: ["daemonsets"] + verbs: ["get"] +- apiGroups: [""] + resources: ["pods/eviction"] + verbs: ["create"] +{{- end -}} diff --git a/charts/kured/templates/clusterrolebinding.yaml b/charts/kured/templates/clusterrolebinding.yaml new file mode 100644 index 0000000..1b2e45b --- /dev/null +++ b/charts/kured/templates/clusterrolebinding.yaml @@ -0,0 +1,16 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "kured.fullname" . }} + labels: + {{- include "kured.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "kured.fullname" . }} +subjects: +- kind: ServiceAccount + name: {{ template "kured.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/charts/kured/templates/daemonset.yaml b/charts/kured/templates/daemonset.yaml new file mode 100644 index 0000000..feb2d72 --- /dev/null +++ b/charts/kured/templates/daemonset.yaml @@ -0,0 +1,118 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: {{ template "kured.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "kured.labels" . | nindent 4 }} +spec: + updateStrategy: + type: {{ .Values.updateStrategy }} + selector: + matchLabels: + {{- include "kured.labels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "kured.labels" . | nindent 8 }} + {{- if .Values.podAnnotations }} + annotations: + {{- range $key, $value := .Values.podAnnotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} + spec: + serviceAccountName: {{ template "kured.serviceAccountName" . }} + hostPID: true + restartPolicy: Always + {{- with .Values.image.pullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + securityContext: + privileged: true # Give permission to nsenter /proc/1/ns/mnt + resources: +{{ toYaml .Values.resources | indent 12 }} + command: + - /usr/bin/kured + args: + - --ds-name={{ template "kured.fullname" . }} + - --ds-namespace={{ .Release.Namespace }} + {{- if .Values.configuration.annotationTtl }} + - --annotation-ttl={{ .Values.configuration.annotationTtl }} + {{- end }} + {{- if .Values.configuration.alertFilterRegexp }} + - --alert-filter-regexp={{ .Values.configuration.alertFilterRegexp | quote }} + {{- end }} + {{- range .Values.configuration.blockingPodSelector }} + - --blocking-pod-selector={{ . | quote }} + {{- end }} + {{- if .Values.configuration.endTime }} + - --end-time={{ .Values.configuration.endTime | quote }} + {{- end }} + {{- if .Values.configuration.lockAnnotation }} + - --lock-annotation={{ .Values.configuration.lockAnnotation | quote }} + {{- end }} + {{- if .Values.configuration.period }} + - --period={{ .Values.configuration.period | quote }} + {{- end }} + {{- if .Values.configuration.prometheusUrl }} + - --prometheus-url={{ .Values.configuration.prometheusUrl | quote }} + {{- end }} + {{- range .Values.configuration.rebootDays }} + - --reboot-days={{ . | quote }} + {{- end }} + {{- if .Values.configuration.rebootSentinel }} + - --reboot-sentinel={{ .Values.configuration.rebootSentinel | quote }} + {{- end }} + {{- if .Values.configuration.slackChannel }} + - --slack-channel={{ .Values.configuration.slackChannel | quote }} + {{- end }} + {{- if .Values.configuration.slackHookUrl }} + - --slack-hook-url={{ .Values.configuration.slackHookUrl | quote }} + {{- end }} + {{- if .Values.configuration.slackUsername }} + - --slack-username={{ .Values.configuration.slackUsername | quote }} + {{- end }} + {{- if .Values.configuration.startTime }} + - --start-time={{ .Values.configuration.startTime | quote }} + {{- end }} + {{- if .Values.configuration.timeZone }} + - --time-zone={{ .Values.configuration.timeZone | quote }} + {{- end }} + {{- range $key, $value := .Values.extraArgs }} + {{- if $value }} + - --{{ $key }}={{ $value }} + {{- else }} + - --{{ $key }} + {{- end }} + {{- end }} + ports: + - containerPort: 8080 + name: metrics + env: + # Pass in the name of the node on which this pod is scheduled + # for use with drain/uncordon operations and lock acquisition + - name: KURED_NODE_ID + valueFrom: + fieldRef: + fieldPath: spec.nodeName + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} \ No newline at end of file diff --git a/charts/kured/templates/podsecuritypolicy.yaml b/charts/kured/templates/podsecuritypolicy.yaml new file mode 100644 index 0000000..71a3095 --- /dev/null +++ b/charts/kured/templates/podsecuritypolicy.yaml @@ -0,0 +1,21 @@ +{{- if .Values.podSecurityPolicy.create}} +apiVersion: {{ template "kured.psp.apiVersion" . }} +kind: PodSecurityPolicy +metadata: + name: {{ template "kured.fullname" . }} + labels: + {{- include "kured.labels" . | nindent 4 }} +spec: + privileged: true + hostPID: true + allowedCapabilities: ['*'] + fsGroup: + rule: RunAsAny + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + volumes: ['*'] +{{- end }} diff --git a/charts/kured/templates/role.yaml b/charts/kured/templates/role.yaml new file mode 100644 index 0000000..d937ed7 --- /dev/null +++ b/charts/kured/templates/role.yaml @@ -0,0 +1,30 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "kured.fullname" . }} + labels: + {{- include "kured.labels" . | nindent 4 }} +rules: + # Allow kured to lock/unlock itself + - apiGroups: ["extensions"] + resources: ["daemonsets"] + resourceNames: ["{{ template "kured.fullname" . }}"] + verbs: ["update", "patch"] + - apiGroups: ["apps"] + resources: ["daemonsets"] + resourceNames: ["{{ template "kured.fullname" . }}"] + verbs: ["update", "patch"] +{{- if .Values.podSecurityPolicy.create }} + - apiGroups: ["extensions"] + resources: ["podsecuritypolicies"] + resourceNames: ["{{ template "kured.fullname" . }}"] + verbs: ["use"] + - apiGroups: ["policy"] + resources: ["podsecuritypolicies"] + resourceNames: ["{{ template "kured.fullname" . }}"] + verbs: ["use"] +{{- end }} + +{{- end -}} diff --git a/charts/kured/templates/rolebinding.yaml b/charts/kured/templates/rolebinding.yaml new file mode 100644 index 0000000..58f1b26 --- /dev/null +++ b/charts/kured/templates/rolebinding.yaml @@ -0,0 +1,17 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "kured.fullname" . }} + labels: + {{- include "kured.labels" . | nindent 4 }} +subjects: +- kind: ServiceAccount + namespace: {{ .Release.Namespace }} + name: {{ template "kured.serviceAccountName" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "kured.fullname" . }} +{{- end -}} diff --git a/charts/kured/templates/service.yaml b/charts/kured/templates/service.yaml new file mode 100644 index 0000000..6bdcc4d --- /dev/null +++ b/charts/kured/templates/service.yaml @@ -0,0 +1,15 @@ +{{- if .Values.metrics.create }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kured.fullname" . }} + labels: + {{- include "kured.labels" . | nindent 4 }} +spec: + type: ClusterIP + ports: + - name: metrics + port: 8080 + selector: + {{- include "kured.labels" . | nindent 4 }} +{{- end }} \ No newline at end of file diff --git a/charts/kured/templates/serviceaccount.yaml b/charts/kured/templates/serviceaccount.yaml new file mode 100644 index 0000000..4ce53b9 --- /dev/null +++ b/charts/kured/templates/serviceaccount.yaml @@ -0,0 +1,9 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "kured.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "kured.labels" . | nindent 4 }} +{{- end -}} diff --git a/charts/kured/templates/servicemonitor.yaml b/charts/kured/templates/servicemonitor.yaml new file mode 100644 index 0000000..b13682f --- /dev/null +++ b/charts/kured/templates/servicemonitor.yaml @@ -0,0 +1,31 @@ +{{- if and .Values.metrics.create .Values.metrics.serviceMonitor.create }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kured.fullname" . }} + {{- if .Values.metrics.serviceMonitor.namespace }} + namespace: {{ .Values.metrics.serviceMonitor.namespace }} + {{- end }} + labels: + {{- include "kured.labels" . | nindent 4 }} + {{- if .Values.metrics.serviceMonitor.labels }} + {{- toYaml .Values.metrics.serviceMonitor.labels | nindent 4 }} + {{- end }} +spec: + endpoints: + - interval: {{ .Values.metrics.serviceMonitor.interval }} + {{- if .Values.metrics.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }} + {{- end }} + honorLabels: true + targetPort: 8080 + path: /metrics + scheme: http + jobLabel: "{{ .Release.Name }}" + selector: + matchLabels: + {{- include "kured.labels" . | nindent 4 }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} +{{- end }} diff --git a/charts/kured/values.yaml b/charts/kured/values.yaml new file mode 100644 index 0000000..7d85ad0 --- /dev/null +++ b/charts/kured/values.yaml @@ -0,0 +1,58 @@ +image: + repository: weaveworks/kured + tag: 1.4.0 + pullPolicy: IfNotPresent + pullSecrets: [] + +updateStrategy: OnDelete + +podAnnotations: {} + +extraArgs: {} + +configuration: + annotationTtl: 0 # force clean annotation after this ammount of time (default 0, disabled) + alertFilterRegexp: "" # alert names to ignore when checking for active alerts + blockingPodSelector: [] # label selector identifying pods whose presence should prevent reboots + endTime: "" # only reboot before this time of day (default "23:59") + lockAnnotation: "" # annotation in which to record locking node (default "weave.works/kured-node-lock") + period: "" # reboot check period (default 1h0m0s) + prometheusUrl: "" # Prometheus instance to probe for active alerts + rebootDays: [] # only reboot on these days (default [su,mo,tu,we,th,fr,sa]) + rebootSentinel: "" # path to file whose existence signals need to reboot (default "/var/run/reboot-required") + slackChannel: "" # slack channel for reboot notfications + slackHookUrl: "" # slack hook URL for reboot notfications + slackUsername: "" # slack username for reboot notfications (default "kured") + startTime: "" # only reboot after this time of day (default "0:00") + timeZone: "" # time-zone to use (valid zones from "time" golang package) + +rbac: + create: true + +serviceAccount: + create: true + name: + +podSecurityPolicy: + create: false + +resources: {} + +metrics: + create: false + serviceMonitor: + create: true + namespace: "" + labels: {} + interval: 60s + scrapeTimeout: "" + +priorityClassName: "" + +tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + +affinity: {} + +nodeSelector: {}