Add caretta
This commit is contained in:
parent
60a66c241c
commit
f6e2b35c7b
23
argocd-apps/caretta.yaml
Normal file
23
argocd-apps/caretta.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: caretta
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: infra
|
||||||
|
source:
|
||||||
|
repoURL: 'https://git.dvirlabs.com/dvirlabs/infra.git'
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: charts/caretta
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- ../../manifests/caretta/values.yaml
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: caretta
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
9
charts/caretta/Chart.lock
Normal file
9
charts/caretta/Chart.lock
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
dependencies:
|
||||||
|
- name: victoria-metrics-single
|
||||||
|
repository: https://victoriametrics.github.io/helm-charts
|
||||||
|
version: 0.8.48
|
||||||
|
- name: grafana
|
||||||
|
repository: https://grafana.github.io/helm-charts
|
||||||
|
version: 6.48.0
|
||||||
|
digest: sha256:eb7c3b54ae1fef78dae03136bdd7c0e34a3a08a34c147a227e824437a443bccb
|
||||||
|
generated: "2022-12-26T10:15:04.518501964Z"
|
||||||
15
charts/caretta/Chart.yaml
Normal file
15
charts/caretta/Chart.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
appVersion: v0.0.16
|
||||||
|
dependencies:
|
||||||
|
- condition: victoria-metrics-single.enabled
|
||||||
|
name: victoria-metrics-single
|
||||||
|
repository: https://victoriametrics.github.io/helm-charts
|
||||||
|
version: 0.8.48
|
||||||
|
- condition: grafana.enabled
|
||||||
|
name: grafana
|
||||||
|
repository: https://grafana.github.io/helm-charts
|
||||||
|
version: 6.48.0
|
||||||
|
description: A helm chart for Caretta service map.
|
||||||
|
name: caretta
|
||||||
|
type: application
|
||||||
|
version: 0.0.16
|
||||||
23
charts/caretta/charts/grafana/.helmignore
Normal file
23
charts/caretta/charts/grafana/.helmignore
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# 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
|
||||||
|
.vscode
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
OWNERS
|
||||||
22
charts/caretta/charts/grafana/Chart.yaml
Normal file
22
charts/caretta/charts/grafana/Chart.yaml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
appVersion: 9.3.1
|
||||||
|
description: The leading tool for querying and visualizing time series and metrics.
|
||||||
|
home: https://grafana.net
|
||||||
|
icon: https://raw.githubusercontent.com/grafana/grafana/master/public/img/logo_transparent_400x.png
|
||||||
|
kubeVersion: ^1.8.0-0
|
||||||
|
maintainers:
|
||||||
|
- email: zanhsieh@gmail.com
|
||||||
|
name: zanhsieh
|
||||||
|
- email: rluckie@cisco.com
|
||||||
|
name: rtluckie
|
||||||
|
- email: maor.friedman@redhat.com
|
||||||
|
name: maorfr
|
||||||
|
- email: miroslav.hadzhiev@gmail.com
|
||||||
|
name: Xtigyro
|
||||||
|
- email: mail@torstenwalter.de
|
||||||
|
name: torstenwalter
|
||||||
|
name: grafana
|
||||||
|
sources:
|
||||||
|
- https://github.com/grafana/grafana
|
||||||
|
type: application
|
||||||
|
version: 6.48.0
|
||||||
603
charts/caretta/charts/grafana/README.md
Normal file
603
charts/caretta/charts/grafana/README.md
Normal file
@ -0,0 +1,603 @@
|
|||||||
|
# Grafana Helm Chart
|
||||||
|
|
||||||
|
* Installs the web dashboarding system [Grafana](http://grafana.org/)
|
||||||
|
|
||||||
|
## Get Repo Info
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm repo add grafana https://grafana.github.io/helm-charts
|
||||||
|
helm repo update
|
||||||
|
```
|
||||||
|
|
||||||
|
_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
To install the chart with the release name `my-release`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm install my-release grafana/grafana
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uninstalling the Chart
|
||||||
|
|
||||||
|
To uninstall/delete the my-release deployment:
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm delete my-release
|
||||||
|
```
|
||||||
|
|
||||||
|
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||||
|
|
||||||
|
## Upgrading an existing Release to a new major version
|
||||||
|
|
||||||
|
A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an
|
||||||
|
incompatible breaking change needing manual actions.
|
||||||
|
|
||||||
|
### To 4.0.0 (And 3.12.1)
|
||||||
|
|
||||||
|
This version requires Helm >= 2.12.0.
|
||||||
|
|
||||||
|
### To 5.0.0
|
||||||
|
|
||||||
|
You have to add --force to your helm upgrade command as the labels of the chart have changed.
|
||||||
|
|
||||||
|
### To 6.0.0
|
||||||
|
|
||||||
|
This version requires Helm >= 3.1.0.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-------------------------------------------|-----------------------------------------------|---------------------------------------------------------|
|
||||||
|
| `replicas` | Number of nodes | `1` |
|
||||||
|
| `podDisruptionBudget.minAvailable` | Pod disruption minimum available | `nil` |
|
||||||
|
| `podDisruptionBudget.maxUnavailable` | Pod disruption maximum unavailable | `nil` |
|
||||||
|
| `deploymentStrategy` | Deployment strategy | `{ "type": "RollingUpdate" }` |
|
||||||
|
| `livenessProbe` | Liveness Probe settings | `{ "httpGet": { "path": "/api/health", "port": 3000 } "initialDelaySeconds": 60, "timeoutSeconds": 30, "failureThreshold": 10 }` |
|
||||||
|
| `readinessProbe` | Readiness Probe settings | `{ "httpGet": { "path": "/api/health", "port": 3000 } }`|
|
||||||
|
| `securityContext` | Deployment securityContext | `{"runAsUser": 472, "runAsGroup": 472, "fsGroup": 472}` |
|
||||||
|
| `priorityClassName` | Name of Priority Class to assign pods | `nil` |
|
||||||
|
| `image.repository` | Image repository | `grafana/grafana` |
|
||||||
|
| `image.tag` | Overrides the Grafana image tag whose default is the chart appVersion (`Must be >= 5.0.0`) | `` |
|
||||||
|
| `image.sha` | Image sha (optional) | `` |
|
||||||
|
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||||
|
| `image.pullSecrets` | Image pull secrets (can be templated) | `[]` |
|
||||||
|
| `service.enabled` | Enable grafana service | `true` |
|
||||||
|
| `service.type` | Kubernetes service type | `ClusterIP` |
|
||||||
|
| `service.port` | Kubernetes port where service is exposed | `80` |
|
||||||
|
| `service.portName` | Name of the port on the service | `service` |
|
||||||
|
| `service.appProtocol` | Adds the appProtocol field to the service | `` |
|
||||||
|
| `service.targetPort` | Internal service is port | `3000` |
|
||||||
|
| `service.nodePort` | Kubernetes service nodePort | `nil` |
|
||||||
|
| `service.annotations` | Service annotations (can be templated) | `{}` |
|
||||||
|
| `service.labels` | Custom labels | `{}` |
|
||||||
|
| `service.clusterIP` | internal cluster service IP | `nil` |
|
||||||
|
| `service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `nil` |
|
||||||
|
| `service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to lb (if supported) | `[]` |
|
||||||
|
| `service.externalIPs` | service external IP addresses | `[]` |
|
||||||
|
| `headlessService` | Create a headless service | `false` |
|
||||||
|
| `extraExposePorts` | Additional service ports for sidecar containers| `[]` |
|
||||||
|
| `hostAliases` | adds rules to the pod's /etc/hosts | `[]` |
|
||||||
|
| `ingress.enabled` | Enables Ingress | `false` |
|
||||||
|
| `ingress.annotations` | Ingress annotations (values are templated) | `{}` |
|
||||||
|
| `ingress.labels` | Custom labels | `{}` |
|
||||||
|
| `ingress.path` | Ingress accepted path | `/` |
|
||||||
|
| `ingress.pathType` | Ingress type of path | `Prefix` |
|
||||||
|
| `ingress.hosts` | Ingress accepted hostnames | `["chart-example.local"]` |
|
||||||
|
| `ingress.extraPaths` | Ingress extra paths to prepend to every host configuration. Useful when configuring [custom actions with AWS ALB Ingress Controller](https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/#actions). Requires `ingress.hosts` to have one or more host entries. | `[]` |
|
||||||
|
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
||||||
|
| `resources` | CPU/Memory resource requests/limits | `{}` |
|
||||||
|
| `nodeSelector` | Node labels for pod assignment | `{}` |
|
||||||
|
| `tolerations` | Toleration labels for pod assignment | `[]` |
|
||||||
|
| `affinity` | Affinity settings for pod assignment | `{}` |
|
||||||
|
| `extraInitContainers` | Init containers to add to the grafana pod | `{}` |
|
||||||
|
| `extraContainers` | Sidecar containers to add to the grafana pod | `""` |
|
||||||
|
| `extraContainerVolumes` | Volumes that can be mounted in sidecar containers | `[]` |
|
||||||
|
| `extraLabels` | Custom labels for all manifests | `{}` |
|
||||||
|
| `schedulerName` | Name of the k8s scheduler (other than default) | `nil` |
|
||||||
|
| `persistence.enabled` | Use persistent volume to store data | `false` |
|
||||||
|
| `persistence.type` | Type of persistence (`pvc` or `statefulset`) | `pvc` |
|
||||||
|
| `persistence.size` | Size of persistent volume claim | `10Gi` |
|
||||||
|
| `persistence.existingClaim` | Use an existing PVC to persist data (can be templated) | `nil` |
|
||||||
|
| `persistence.storageClassName` | Type of persistent volume claim | `nil` |
|
||||||
|
| `persistence.accessModes` | Persistence access modes | `[ReadWriteOnce]` |
|
||||||
|
| `persistence.annotations` | PersistentVolumeClaim annotations | `{}` |
|
||||||
|
| `persistence.finalizers` | PersistentVolumeClaim finalizers | `[ "kubernetes.io/pvc-protection" ]` |
|
||||||
|
| `persistence.extraPvcLabels` | Extra labels to apply to a PVC. | `{}` |
|
||||||
|
| `persistence.subPath` | Mount a sub dir of the persistent volume (can be templated) | `nil` |
|
||||||
|
| `persistence.inMemory.enabled` | If persistence is not enabled, whether to mount the local storage in-memory to improve performance | `false` |
|
||||||
|
| `persistence.inMemory.sizeLimit` | SizeLimit for the in-memory local storage | `nil` |
|
||||||
|
| `initChownData.enabled` | If false, don't reset data ownership at startup | true |
|
||||||
|
| `initChownData.image.repository` | init-chown-data container image repository | `busybox` |
|
||||||
|
| `initChownData.image.tag` | init-chown-data container image tag | `1.31.1` |
|
||||||
|
| `initChownData.image.sha` | init-chown-data container image sha (optional)| `""` |
|
||||||
|
| `initChownData.image.pullPolicy` | init-chown-data container image pull policy | `IfNotPresent` |
|
||||||
|
| `initChownData.resources` | init-chown-data pod resource requests & limits | `{}` |
|
||||||
|
| `schedulerName` | Alternate scheduler name | `nil` |
|
||||||
|
| `env` | Extra environment variables passed to pods | `{}` |
|
||||||
|
| `envValueFrom` | Environment variables from alternate sources. See the API docs on [EnvVarSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#envvarsource-v1-core) for format details. Can be templated | `{}` |
|
||||||
|
| `envFromSecret` | Name of a Kubernetes secret (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `""` |
|
||||||
|
| `envFromSecrets` | List of Kubernetes secrets (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `[]` |
|
||||||
|
| `envFromConfigMaps` | List of Kubernetes ConfigMaps (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `[]` |
|
||||||
|
| `envRenderSecret` | Sensible environment variables passed to pods and stored as secret | `{}` |
|
||||||
|
| `enableServiceLinks` | Inject Kubernetes services as environment variables. | `true` |
|
||||||
|
| `extraSecretMounts` | Additional grafana server secret mounts | `[]` |
|
||||||
|
| `extraVolumeMounts` | Additional grafana server volume mounts | `[]` |
|
||||||
|
| `createConfigmap` | Enable creating the grafana configmap | `true` |
|
||||||
|
| `extraConfigmapMounts` | Additional grafana server configMap volume mounts (values are templated) | `[]` |
|
||||||
|
| `extraEmptyDirMounts` | Additional grafana server emptyDir volume mounts | `[]` |
|
||||||
|
| `plugins` | Plugins to be loaded along with Grafana | `[]` |
|
||||||
|
| `datasources` | Configure grafana datasources (passed through tpl) | `{}` |
|
||||||
|
| `alerting` | Configure grafana alerting (passed through tpl) | `{}` |
|
||||||
|
| `notifiers` | Configure grafana notifiers | `{}` |
|
||||||
|
| `dashboardProviders` | Configure grafana dashboard providers | `{}` |
|
||||||
|
| `dashboards` | Dashboards to import | `{}` |
|
||||||
|
| `dashboardsConfigMaps` | ConfigMaps reference that contains dashboards | `{}` |
|
||||||
|
| `grafana.ini` | Grafana's primary configuration | `{}` |
|
||||||
|
| `global.imagePullSecrets` | Global image pull secrets (can be templated). Allows either an array of {name: pullSecret} maps (k8s-style), or an array of strings (more common helm-style). | `[]` |
|
||||||
|
| `ldap.enabled` | Enable LDAP authentication | `false` |
|
||||||
|
| `ldap.existingSecret` | The name of an existing secret containing the `ldap.toml` file, this must have the key `ldap-toml`. | `""` |
|
||||||
|
| `ldap.config` | Grafana's LDAP configuration | `""` |
|
||||||
|
| `annotations` | Deployment annotations | `{}` |
|
||||||
|
| `labels` | Deployment labels | `{}` |
|
||||||
|
| `podAnnotations` | Pod annotations | `{}` |
|
||||||
|
| `podLabels` | Pod labels | `{}` |
|
||||||
|
| `podPortName` | Name of the grafana port on the pod | `grafana` |
|
||||||
|
| `lifecycleHooks` | Lifecycle hooks for podStart and preStop [Example](https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/#define-poststart-and-prestop-handlers) | `{}` |
|
||||||
|
| `sidecar.image.repository` | Sidecar image repository | `quay.io/kiwigrid/k8s-sidecar` |
|
||||||
|
| `sidecar.image.tag` | Sidecar image tag | `1.19.2` |
|
||||||
|
| `sidecar.image.sha` | Sidecar image sha (optional) | `""` |
|
||||||
|
| `sidecar.imagePullPolicy` | Sidecar image pull policy | `IfNotPresent` |
|
||||||
|
| `sidecar.resources` | Sidecar resources | `{}` |
|
||||||
|
| `sidecar.securityContext` | Sidecar securityContext | `{}` |
|
||||||
|
| `sidecar.enableUniqueFilenames` | Sets the kiwigrid/k8s-sidecar UNIQUE_FILENAMES environment variable. If set to `true` the sidecar will create unique filenames where duplicate data keys exist between ConfigMaps and/or Secrets within the same or multiple Namespaces. | `false` |
|
||||||
|
| `sidecar.alerts.enabled` | Enables the cluster wide search for alerts and adds/updates/deletes them in grafana |`false` |
|
||||||
|
| `sidecar.alerts.label` | Label that config maps with alerts should have to be added | `grafana_alert` |
|
||||||
|
| `sidecar.alerts.labelValue` | Label value that config maps with alerts should have to be added | `""` |
|
||||||
|
| `sidecar.alerts.searchNamespace` | Namespaces list. If specified, the sidecar will search for alerts config-maps inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
|
||||||
|
| `sidecar.alerts.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
|
||||||
|
| `sidecar.alerts.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
|
||||||
|
| `sidecar.alerts.reloadURL` | Full url of datasource configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/alerting/reload"` |
|
||||||
|
| `sidecar.alerts.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
|
||||||
|
| `sidecar.alerts.initDatasources` | Set to true to deploy the datasource sidecar as an initContainer in addition to a container. This is needed if skipReload is true, to load any alerts defined at startup time. | `false` |
|
||||||
|
| `sidecar.dashboards.enabled` | Enables the cluster wide search for dashboards and adds/updates/deletes them in grafana | `false` |
|
||||||
|
| `sidecar.dashboards.SCProvider` | Enables creation of sidecar provider | `true` |
|
||||||
|
| `sidecar.dashboards.provider.name` | Unique name of the grafana provider | `sidecarProvider` |
|
||||||
|
| `sidecar.dashboards.provider.orgid` | Id of the organisation, to which the dashboards should be added | `1` |
|
||||||
|
| `sidecar.dashboards.provider.folder` | Logical folder in which grafana groups dashboards | `""` |
|
||||||
|
| `sidecar.dashboards.provider.disableDelete` | Activate to avoid the deletion of imported dashboards | `false` |
|
||||||
|
| `sidecar.dashboards.provider.allowUiUpdates` | Allow updating provisioned dashboards from the UI | `false` |
|
||||||
|
| `sidecar.dashboards.provider.type` | Provider type | `file` |
|
||||||
|
| `sidecar.dashboards.provider.foldersFromFilesStructure` | Allow Grafana to replicate dashboard structure from filesystem. | `false` |
|
||||||
|
| `sidecar.dashboards.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
|
||||||
|
| `sidecar.skipTlsVerify` | Set to true to skip tls verification for kube api calls | `nil` |
|
||||||
|
| `sidecar.dashboards.label` | Label that config maps with dashboards should have to be added | `grafana_dashboard` |
|
||||||
|
| `sidecar.dashboards.labelValue` | Label value that config maps with dashboards should have to be added | `""` |
|
||||||
|
| `sidecar.dashboards.folder` | Folder in the pod that should hold the collected dashboards (unless `sidecar.dashboards.defaultFolderName` is set). This path will be mounted. | `/tmp/dashboards` |
|
||||||
|
| `sidecar.dashboards.folderAnnotation` | The annotation the sidecar will look for in configmaps to override the destination folder for files | `nil` |
|
||||||
|
| `sidecar.dashboards.defaultFolderName` | The default folder name, it will create a subfolder under the `sidecar.dashboards.folder` and put dashboards in there instead | `nil` |
|
||||||
|
| `sidecar.dashboards.searchNamespace` | Namespaces list. If specified, the sidecar will search for dashboards config-maps inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
|
||||||
|
| `sidecar.dashboards.script` | Absolute path to shell script to execute after a configmap got reloaded. | `nil` |
|
||||||
|
| `sidecar.dashboards.reloadURL` | Full url of dashboards configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/dashboards/reload"` |
|
||||||
|
| `sidecar.dashboards.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
|
||||||
|
| `sidecar.dashboards.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
|
||||||
|
| `sidecar.dashboards.extraMounts` | Additional dashboard sidecar volume mounts. | `[]` |
|
||||||
|
| `sidecar.datasources.enabled` | Enables the cluster wide search for datasources and adds/updates/deletes them in grafana |`false` |
|
||||||
|
| `sidecar.datasources.label` | Label that config maps with datasources should have to be added | `grafana_datasource` |
|
||||||
|
| `sidecar.datasources.labelValue` | Label value that config maps with datasources should have to be added | `""` |
|
||||||
|
| `sidecar.datasources.searchNamespace` | Namespaces list. If specified, the sidecar will search for datasources config-maps inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
|
||||||
|
| `sidecar.datasources.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
|
||||||
|
| `sidecar.datasources.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
|
||||||
|
| `sidecar.datasources.reloadURL` | Full url of datasource configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/datasources/reload"` |
|
||||||
|
| `sidecar.datasources.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
|
||||||
|
| `sidecar.datasources.initDatasources` | Set to true to deploy the datasource sidecar as an initContainer in addition to a container. This is needed if skipReload is true, to load any datasources defined at startup time. | `false` |
|
||||||
|
| `sidecar.notifiers.enabled` | Enables the cluster wide search for notifiers and adds/updates/deletes them in grafana | `false` |
|
||||||
|
| `sidecar.notifiers.label` | Label that config maps with notifiers should have to be added | `grafana_notifier` |
|
||||||
|
| `sidecar.notifiers.labelValue` | Label value that config maps with notifiers should have to be added | `""` |
|
||||||
|
| `sidecar.notifiers.searchNamespace` | Namespaces list. If specified, the sidecar will search for notifiers config-maps (or secrets) inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
|
||||||
|
| `sidecar.notifiers.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
|
||||||
|
| `sidecar.notifiers.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
|
||||||
|
| `sidecar.notifiers.reloadURL` | Full url of notifier configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/notifications/reload"` |
|
||||||
|
| `sidecar.notifiers.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
|
||||||
|
| `sidecar.notifiers.initNotifiers` | Set to true to deploy the notifier sidecar as an initContainer in addition to a container. This is needed if skipReload is true, to load any notifiers defined at startup time. | `false` |
|
||||||
|
| `smtp.existingSecret` | The name of an existing secret containing the SMTP credentials. | `""` |
|
||||||
|
| `smtp.userKey` | The key in the existing SMTP secret containing the username. | `"user"` |
|
||||||
|
| `smtp.passwordKey` | The key in the existing SMTP secret containing the password. | `"password"` |
|
||||||
|
| `admin.existingSecret` | The name of an existing secret containing the admin credentials (can be templated). | `""` |
|
||||||
|
| `admin.userKey` | The key in the existing admin secret containing the username. | `"admin-user"` |
|
||||||
|
| `admin.passwordKey` | The key in the existing admin secret containing the password. | `"admin-password"` |
|
||||||
|
| `serviceAccount.autoMount` | Automount the service account token in the pod| `true` |
|
||||||
|
| `serviceAccount.annotations` | ServiceAccount annotations | |
|
||||||
|
| `serviceAccount.create` | Create service account | `true` |
|
||||||
|
| `serviceAccount.labels` | ServiceAccount labels | `{}` |
|
||||||
|
| `serviceAccount.name` | Service account name to use, when empty will be set to created account if `serviceAccount.create` is set else to `default` | `` |
|
||||||
|
| `serviceAccount.nameTest` | Service account name to use for test, when empty will be set to created account if `serviceAccount.create` is set else to `default` | `nil` |
|
||||||
|
| `rbac.create` | Create and use RBAC resources | `true` |
|
||||||
|
| `rbac.namespaced` | Creates Role and Rolebinding instead of the default ClusterRole and ClusteRoleBindings for the grafana instance | `false` |
|
||||||
|
| `rbac.useExistingRole` | Set to a rolename to use existing role - skipping role creating - but still doing serviceaccount and rolebinding to the rolename set here. | `nil` |
|
||||||
|
| `rbac.pspEnabled` | Create PodSecurityPolicy (with `rbac.create`, grant roles permissions as well) | `true` |
|
||||||
|
| `rbac.pspUseAppArmor` | Enforce AppArmor in created PodSecurityPolicy (requires `rbac.pspEnabled`) | `true` |
|
||||||
|
| `rbac.extraRoleRules` | Additional rules to add to the Role | [] |
|
||||||
|
| `rbac.extraClusterRoleRules` | Additional rules to add to the ClusterRole | [] |
|
||||||
|
| `command` | Define command to be executed by grafana container at startup | `nil` |
|
||||||
|
| `testFramework.enabled` | Whether to create test-related resources | `true` |
|
||||||
|
| `testFramework.image` | `test-framework` image repository. | `bats/bats` |
|
||||||
|
| `testFramework.tag` | `test-framework` image tag. | `v1.4.1` |
|
||||||
|
| `testFramework.imagePullPolicy` | `test-framework` image pull policy. | `IfNotPresent` |
|
||||||
|
| `testFramework.securityContext` | `test-framework` securityContext | `{}` |
|
||||||
|
| `downloadDashboards.env` | Environment variables to be passed to the `download-dashboards` container | `{}` |
|
||||||
|
| `downloadDashboards.envFromSecret` | Name of a Kubernetes secret (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `""` |
|
||||||
|
| `downloadDashboards.resources` | Resources of `download-dashboards` container | `{}` |
|
||||||
|
| `downloadDashboardsImage.repository` | Curl docker image repo | `curlimages/curl` |
|
||||||
|
| `downloadDashboardsImage.tag` | Curl docker image tag | `7.73.0` |
|
||||||
|
| `downloadDashboardsImage.sha` | Curl docker image sha (optional) | `""` |
|
||||||
|
| `downloadDashboardsImage.pullPolicy` | Curl docker image pull policy | `IfNotPresent` |
|
||||||
|
| `namespaceOverride` | Override the deployment namespace | `""` (`Release.Namespace`) |
|
||||||
|
| `serviceMonitor.enabled` | Use servicemonitor from prometheus operator | `false` |
|
||||||
|
| `serviceMonitor.namespace` | Namespace this servicemonitor is installed in | |
|
||||||
|
| `serviceMonitor.interval` | How frequently Prometheus should scrape | `1m` |
|
||||||
|
| `serviceMonitor.path` | Path to scrape | `/metrics` |
|
||||||
|
| `serviceMonitor.scheme` | Scheme to use for metrics scraping | `http` |
|
||||||
|
| `serviceMonitor.tlsConfig` | TLS configuration block for the endpoint | `{}` |
|
||||||
|
| `serviceMonitor.labels` | Labels for the servicemonitor passed to Prometheus Operator | `{}` |
|
||||||
|
| `serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `30s` |
|
||||||
|
| `serviceMonitor.relabelings` | MetricRelabelConfigs to apply to samples before ingestion. | `[]` |
|
||||||
|
| `revisionHistoryLimit` | Number of old ReplicaSets to retain | `10` |
|
||||||
|
| `imageRenderer.enabled` | Enable the image-renderer deployment & service | `false` |
|
||||||
|
| `imageRenderer.image.repository` | image-renderer Image repository | `grafana/grafana-image-renderer` |
|
||||||
|
| `imageRenderer.image.tag` | image-renderer Image tag | `latest` |
|
||||||
|
| `imageRenderer.image.sha` | image-renderer Image sha (optional) | `""` |
|
||||||
|
| `imageRenderer.image.pullPolicy` | image-renderer ImagePullPolicy | `Always` |
|
||||||
|
| `imageRenderer.env` | extra env-vars for image-renderer | `{}` |
|
||||||
|
| `imageRenderer.serviceAccountName` | image-renderer deployment serviceAccountName | `""` |
|
||||||
|
| `imageRenderer.securityContext` | image-renderer deployment securityContext | `{}` |
|
||||||
|
| `imageRenderer.hostAliases` | image-renderer deployment Host Aliases | `[]` |
|
||||||
|
| `imageRenderer.priorityClassName` | image-renderer deployment priority class | `''` |
|
||||||
|
| `imageRenderer.service.enabled` | Enable the image-renderer service | `true` |
|
||||||
|
| `imageRenderer.service.portName` | image-renderer service port name | `http` |
|
||||||
|
| `imageRenderer.service.port` | image-renderer port used by deployment | `8081` |
|
||||||
|
| `imageRenderer.service.targetPort` | image-renderer service port used by service | `8081` |
|
||||||
|
| `imageRenderer.appProtocol` | Adds the appProtocol field to the service | `` |
|
||||||
|
| `imageRenderer.grafanaSubPath` | Grafana sub path to use for image renderer callback url | `''` |
|
||||||
|
| `imageRenderer.podPortName` | name of the image-renderer port on the pod | `http` |
|
||||||
|
| `imageRenderer.revisionHistoryLimit` | number of image-renderer replica sets to keep | `10` |
|
||||||
|
| `imageRenderer.networkPolicy.limitIngress` | Enable a NetworkPolicy to limit inbound traffic from only the created grafana pods | `true` |
|
||||||
|
| `imageRenderer.networkPolicy.limitEgress` | Enable a NetworkPolicy to limit outbound traffic to only the created grafana pods | `false` |
|
||||||
|
| `imageRenderer.resources` | Set resource limits for image-renderer pdos | `{}` |
|
||||||
|
| `imageRenderer.nodeSelector` | Node labels for pod assignment | `{}` |
|
||||||
|
| `imageRenderer.tolerations` | Toleration labels for pod assignment | `[]` |
|
||||||
|
| `imageRenderer.affinity` | Affinity settings for pod assignment | `{}` |
|
||||||
|
| `networkPolicy.enabled` | Enable creation of NetworkPolicy resources. | `false` |
|
||||||
|
| `networkPolicy.allowExternal` | Don't require client label for connections | `true` |
|
||||||
|
| `networkPolicy.explicitNamespacesSelector` | A Kubernetes LabelSelector to explicitly select namespaces from which traffic could be allowed | `{}` |
|
||||||
|
| `networkPolicy.ingress` | Enable the creation of an ingress network policy | `true` |
|
||||||
|
| `networkPolicy.egress.enabled` | Enable the creation of an egress network policy | `false` |
|
||||||
|
| `networkPolicy.egress.ports` | An array of ports to allow for the egress | `[]` |
|
||||||
|
| `enableKubeBackwardCompatibility` | Enable backward compatibility of kubernetes where pod's defintion version below 1.13 doesn't have the enableServiceLinks option | `false` |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Example ingress with path
|
||||||
|
|
||||||
|
With grafana 6.3 and above
|
||||||
|
```yaml
|
||||||
|
grafana.ini:
|
||||||
|
server:
|
||||||
|
domain: monitoring.example.com
|
||||||
|
root_url: "%(protocol)s://%(domain)s/grafana"
|
||||||
|
serve_from_sub_path: true
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
hosts:
|
||||||
|
- "monitoring.example.com"
|
||||||
|
path: "/grafana"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example of extraVolumeMounts
|
||||||
|
|
||||||
|
Volume can be type persistentVolumeClaim or hostPath but not both at same time.
|
||||||
|
If neither existingClaim or hostPath argument is given then type is emptyDir.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- extraVolumeMounts:
|
||||||
|
- name: plugins
|
||||||
|
mountPath: /var/lib/grafana/plugins
|
||||||
|
subPath: configs/grafana/plugins
|
||||||
|
existingClaim: existing-grafana-claim
|
||||||
|
readOnly: false
|
||||||
|
- name: dashboards
|
||||||
|
mountPath: /var/lib/grafana/dashboards
|
||||||
|
hostPath: /usr/shared/grafana/dashboards
|
||||||
|
readOnly: false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Import dashboards
|
||||||
|
|
||||||
|
There are a few methods to import dashboards to Grafana. Below are some examples and explanations as to how to use each method:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
dashboards:
|
||||||
|
default:
|
||||||
|
some-dashboard:
|
||||||
|
json: |
|
||||||
|
{
|
||||||
|
"annotations":
|
||||||
|
|
||||||
|
...
|
||||||
|
# Complete json file here
|
||||||
|
...
|
||||||
|
|
||||||
|
"title": "Some Dashboard",
|
||||||
|
"uid": "abcd1234",
|
||||||
|
"version": 1
|
||||||
|
}
|
||||||
|
custom-dashboard:
|
||||||
|
# This is a path to a file inside the dashboards directory inside the chart directory
|
||||||
|
file: dashboards/custom-dashboard.json
|
||||||
|
prometheus-stats:
|
||||||
|
# Ref: https://grafana.com/dashboards/2
|
||||||
|
gnetId: 2
|
||||||
|
revision: 2
|
||||||
|
datasource: Prometheus
|
||||||
|
loki-dashboard-quick-search:
|
||||||
|
gnetId: 12019
|
||||||
|
revision: 2
|
||||||
|
datasource:
|
||||||
|
- name: DS_PROMETHEUS
|
||||||
|
value: Prometheus
|
||||||
|
- name: DS_LOKI
|
||||||
|
value: Loki
|
||||||
|
local-dashboard:
|
||||||
|
url: https://raw.githubusercontent.com/user/repository/master/dashboards/dashboard.json
|
||||||
|
```
|
||||||
|
|
||||||
|
## BASE64 dashboards
|
||||||
|
|
||||||
|
Dashboards could be stored on a server that does not return JSON directly and instead of it returns a Base64 encoded file (e.g. Gerrit)
|
||||||
|
A new parameter has been added to the url use case so if you specify a b64content value equals to true after the url entry a Base64 decoding is applied before save the file to disk.
|
||||||
|
If this entry is not set or is equals to false not decoding is applied to the file before saving it to disk.
|
||||||
|
|
||||||
|
### Gerrit use case
|
||||||
|
|
||||||
|
Gerrit API for download files has the following schema: <https://yourgerritserver/a/{project-name}/branches/{branch-id}/files/{file-id}/content> where {project-name} and
|
||||||
|
{file-id} usually has '/' in their values and so they MUST be replaced by %2F so if project-name is user/repo, branch-id is master and file-id is equals to dir1/dir2/dashboard
|
||||||
|
the url value is <https://yourgerritserver/a/user%2Frepo/branches/master/files/dir1%2Fdir2%2Fdashboard/content>
|
||||||
|
|
||||||
|
## Sidecar for dashboards
|
||||||
|
|
||||||
|
If the parameter `sidecar.dashboards.enabled` is set, a sidecar container is deployed in the grafana
|
||||||
|
pod. This container watches all configmaps (or secrets) in the cluster and filters out the ones with
|
||||||
|
a label as defined in `sidecar.dashboards.label`. The files defined in those configmaps are written
|
||||||
|
to a folder and accessed by grafana. Changes to the configmaps are monitored and the imported
|
||||||
|
dashboards are deleted/updated.
|
||||||
|
|
||||||
|
A recommendation is to use one configmap per dashboard, as a reduction of multiple dashboards inside
|
||||||
|
one configmap is currently not properly mirrored in grafana.
|
||||||
|
|
||||||
|
Example dashboard config:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: sample-grafana-dashboard
|
||||||
|
labels:
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
data:
|
||||||
|
k8s-dashboard.json: |-
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sidecar for datasources
|
||||||
|
|
||||||
|
If the parameter `sidecar.datasources.enabled` is set, an init container is deployed in the grafana
|
||||||
|
pod. This container lists all secrets (or configmaps, though not recommended) in the cluster and
|
||||||
|
filters out the ones with a label as defined in `sidecar.datasources.label`. The files defined in
|
||||||
|
those secrets are written to a folder and accessed by grafana on startup. Using these yaml files,
|
||||||
|
the data sources in grafana can be imported.
|
||||||
|
|
||||||
|
Secrets are recommended over configmaps for this usecase because datasources usually contain private
|
||||||
|
data like usernames and passwords. Secrets are the more appropriate cluster resource to manage those.
|
||||||
|
|
||||||
|
Example values to add a datasource adapted from [Grafana](http://docs.grafana.org/administration/provisioning/#example-datasource-config-file):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
datasources:
|
||||||
|
datasources.yaml:
|
||||||
|
apiVersion: 1
|
||||||
|
datasources:
|
||||||
|
# <string, required> name of the datasource. Required
|
||||||
|
- name: Graphite
|
||||||
|
# <string, required> datasource type. Required
|
||||||
|
type: graphite
|
||||||
|
# <string, required> access mode. proxy or direct (Server or Browser in the UI). Required
|
||||||
|
access: proxy
|
||||||
|
# <int> org id. will default to orgId 1 if not specified
|
||||||
|
orgId: 1
|
||||||
|
# <string> url
|
||||||
|
url: http://localhost:8080
|
||||||
|
# <string> database password, if used
|
||||||
|
password:
|
||||||
|
# <string> database user, if used
|
||||||
|
user:
|
||||||
|
# <string> database name, if used
|
||||||
|
database:
|
||||||
|
# <bool> enable/disable basic auth
|
||||||
|
basicAuth:
|
||||||
|
# <string> basic auth username
|
||||||
|
basicAuthUser:
|
||||||
|
# <string> basic auth password
|
||||||
|
basicAuthPassword:
|
||||||
|
# <bool> enable/disable with credentials headers
|
||||||
|
withCredentials:
|
||||||
|
# <bool> mark as default datasource. Max one per org
|
||||||
|
isDefault:
|
||||||
|
# <map> fields that will be converted to json and stored in json_data
|
||||||
|
jsonData:
|
||||||
|
graphiteVersion: "1.1"
|
||||||
|
tlsAuth: true
|
||||||
|
tlsAuthWithCACert: true
|
||||||
|
# <string> json object of data that will be encrypted.
|
||||||
|
secureJsonData:
|
||||||
|
tlsCACert: "..."
|
||||||
|
tlsClientCert: "..."
|
||||||
|
tlsClientKey: "..."
|
||||||
|
version: 1
|
||||||
|
# <bool> allow users to edit datasources from the UI.
|
||||||
|
editable: false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sidecar for notifiers
|
||||||
|
|
||||||
|
If the parameter `sidecar.notifiers.enabled` is set, an init container is deployed in the grafana
|
||||||
|
pod. This container lists all secrets (or configmaps, though not recommended) in the cluster and
|
||||||
|
filters out the ones with a label as defined in `sidecar.notifiers.label`. The files defined in
|
||||||
|
those secrets are written to a folder and accessed by grafana on startup. Using these yaml files,
|
||||||
|
the notification channels in grafana can be imported. The secrets must be created before
|
||||||
|
`helm install` so that the notifiers init container can list the secrets.
|
||||||
|
|
||||||
|
Secrets are recommended over configmaps for this usecase because alert notification channels usually contain
|
||||||
|
private data like SMTP usernames and passwords. Secrets are the more appropriate cluster resource to manage those.
|
||||||
|
|
||||||
|
Example datasource config adapted from [Grafana](https://grafana.com/docs/grafana/latest/administration/provisioning/#alert-notification-channels):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
notifiers:
|
||||||
|
- name: notification-channel-1
|
||||||
|
type: slack
|
||||||
|
uid: notifier1
|
||||||
|
# either
|
||||||
|
org_id: 2
|
||||||
|
# or
|
||||||
|
org_name: Main Org.
|
||||||
|
is_default: true
|
||||||
|
send_reminder: true
|
||||||
|
frequency: 1h
|
||||||
|
disable_resolve_message: false
|
||||||
|
# See `Supported Settings` section for settings supporter for each
|
||||||
|
# alert notification type.
|
||||||
|
settings:
|
||||||
|
recipient: 'XXX'
|
||||||
|
token: 'xoxb'
|
||||||
|
uploadImage: true
|
||||||
|
url: https://slack.com
|
||||||
|
|
||||||
|
delete_notifiers:
|
||||||
|
- name: notification-channel-1
|
||||||
|
uid: notifier1
|
||||||
|
org_id: 2
|
||||||
|
- name: notification-channel-2
|
||||||
|
# default org_id: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to serve Grafana with a path prefix (/grafana)
|
||||||
|
|
||||||
|
In order to serve Grafana with a prefix (e.g., <http://example.com/grafana>), add the following to your values.yaml.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: "nginx"
|
||||||
|
nginx.ingress.kubernetes.io/rewrite-target: /$1
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
|
||||||
|
path: /grafana/?(.*)
|
||||||
|
hosts:
|
||||||
|
- k8s.example.dev
|
||||||
|
|
||||||
|
grafana.ini:
|
||||||
|
server:
|
||||||
|
root_url: http://localhost:3000/grafana # this host can be localhost
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to securely reference secrets in grafana.ini
|
||||||
|
|
||||||
|
This example uses Grafana [file providers](https://grafana.com/docs/grafana/latest/administration/configuration/#file-provider) for secret values and the `extraSecretMounts` configuration flag (Additional grafana server secret mounts) to mount the secrets.
|
||||||
|
|
||||||
|
In grafana.ini:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
grafana.ini:
|
||||||
|
[auth.generic_oauth]
|
||||||
|
enabled = true
|
||||||
|
client_id = $__file{/etc/secrets/auth_generic_oauth/client_id}
|
||||||
|
client_secret = $__file{/etc/secrets/auth_generic_oauth/client_secret}
|
||||||
|
```
|
||||||
|
|
||||||
|
Existing secret, or created along with helm:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: auth-generic-oauth-secret
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
client_id: <value>
|
||||||
|
client_secret: <value>
|
||||||
|
```
|
||||||
|
|
||||||
|
Include in the `extraSecretMounts` configuration flag:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- extraSecretMounts:
|
||||||
|
- name: auth-generic-oauth-secret-mount
|
||||||
|
secretName: auth-generic-oauth-secret
|
||||||
|
defaultMode: 0440
|
||||||
|
mountPath: /etc/secrets/auth_generic_oauth
|
||||||
|
readOnly: true
|
||||||
|
```
|
||||||
|
|
||||||
|
### extraSecretMounts using a Container Storage Interface (CSI) provider
|
||||||
|
|
||||||
|
This example uses a CSI driver e.g. retrieving secrets using [Azure Key Vault Provider](https://github.com/Azure/secrets-store-csi-driver-provider-azure)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- extraSecretMounts:
|
||||||
|
- name: secrets-store-inline
|
||||||
|
mountPath: /run/secrets
|
||||||
|
readOnly: true
|
||||||
|
csi:
|
||||||
|
driver: secrets-store.csi.k8s.io
|
||||||
|
readOnly: true
|
||||||
|
volumeAttributes:
|
||||||
|
secretProviderClass: "my-provider"
|
||||||
|
nodePublishSecretRef:
|
||||||
|
name: akv-creds
|
||||||
|
```
|
||||||
|
|
||||||
|
## Image Renderer Plug-In
|
||||||
|
|
||||||
|
This chart supports enabling [remote image rendering](https://github.com/grafana/grafana-image-renderer/blob/master/README.md#run-in-docker)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
imageRenderer:
|
||||||
|
enabled: true
|
||||||
|
```
|
||||||
|
|
||||||
|
### Image Renderer NetworkPolicy
|
||||||
|
|
||||||
|
By default the image-renderer pods will have a network policy which only allows ingress traffic from the created grafana instance
|
||||||
|
|
||||||
|
### High Availability for unified alerting
|
||||||
|
|
||||||
|
If you want to run Grafana in a high availability cluster you need to enable
|
||||||
|
the headless service by setting `headlessService: true` in your `values.yaml`
|
||||||
|
file.
|
||||||
|
|
||||||
|
As next step you have to setup the `grafana.ini` in your `values.yaml` in a way
|
||||||
|
that it will make use of the headless service to obtain all the IPs of the
|
||||||
|
cluster. You should replace ``{{ Name }}`` with the name of your helm deployment.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
grafana.ini:
|
||||||
|
...
|
||||||
|
unified_alerting:
|
||||||
|
enabled: true
|
||||||
|
ha_peers: {{ Name }}-headless:9094
|
||||||
|
alerting:
|
||||||
|
enabled: false
|
||||||
|
```
|
||||||
1
charts/caretta/charts/grafana/ci/default-values.yaml
Normal file
1
charts/caretta/charts/grafana/ci/default-values.yaml
Normal file
@ -0,0 +1 @@
|
|||||||
|
# Leave this file empty to ensure that CI runs builds against the default configuration in values.yaml.
|
||||||
16
charts/caretta/charts/grafana/ci/with-affinity-values.yaml
Normal file
16
charts/caretta/charts/grafana/ci/with-affinity-values.yaml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
affinity:
|
||||||
|
podAntiAffinity:
|
||||||
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
- podAffinityTerm:
|
||||||
|
labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/instance: grafana-test
|
||||||
|
app.kubernetes.io/name: grafana
|
||||||
|
topologyKey: failure-domain.beta.kubernetes.io/zone
|
||||||
|
weight: 100
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
- labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/instance: grafana-test
|
||||||
|
app.kubernetes.io/name: grafana
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
dashboards:
|
||||||
|
my-provider:
|
||||||
|
my-awesome-dashboard:
|
||||||
|
# An empty but valid dashboard
|
||||||
|
json: |
|
||||||
|
{
|
||||||
|
"__inputs": [],
|
||||||
|
"__requires": [
|
||||||
|
{
|
||||||
|
"type": "grafana",
|
||||||
|
"id": "grafana",
|
||||||
|
"name": "Grafana",
|
||||||
|
"version": "6.3.5"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": "-- Grafana --",
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editable": true,
|
||||||
|
"gnetId": null,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": null,
|
||||||
|
"links": [],
|
||||||
|
"panels": [],
|
||||||
|
"schemaVersion": 19,
|
||||||
|
"style": "dark",
|
||||||
|
"tags": [],
|
||||||
|
"templating": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {
|
||||||
|
"refresh_intervals": ["5s"]
|
||||||
|
},
|
||||||
|
"timezone": "",
|
||||||
|
"title": "Dummy Dashboard",
|
||||||
|
"uid": "IdcYQooWk",
|
||||||
|
"version": 1
|
||||||
|
}
|
||||||
|
datasource: Prometheus
|
||||||
19
charts/caretta/charts/grafana/ci/with-dashboard-values.yaml
Normal file
19
charts/caretta/charts/grafana/ci/with-dashboard-values.yaml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
dashboards:
|
||||||
|
my-provider:
|
||||||
|
my-awesome-dashboard:
|
||||||
|
gnetId: 10000
|
||||||
|
revision: 1
|
||||||
|
datasource: Prometheus
|
||||||
|
dashboardProviders:
|
||||||
|
dashboardproviders.yaml:
|
||||||
|
apiVersion: 1
|
||||||
|
providers:
|
||||||
|
- name: 'my-provider'
|
||||||
|
orgId: 1
|
||||||
|
folder: ''
|
||||||
|
type: file
|
||||||
|
updateIntervalSeconds: 10
|
||||||
|
disableDeletion: true
|
||||||
|
editable: true
|
||||||
|
options:
|
||||||
|
path: /var/lib/grafana/dashboards/my-provider
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
extraConfigmapMounts:
|
||||||
|
- name: '{{ include "grafana.fullname" . }}'
|
||||||
|
configMap: '{{ include "grafana.fullname" . }}'
|
||||||
|
mountPath: /var/lib/grafana/dashboards/test-dashboard.json
|
||||||
|
# This is not a realistic test, but for this we only care about extraConfigmapMounts not being empty and pointing to an existing ConfigMap
|
||||||
|
subPath: grafana.ini
|
||||||
|
readOnly: true
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
podLabels:
|
||||||
|
customLableA: Aaaaa
|
||||||
|
imageRenderer:
|
||||||
|
enabled: true
|
||||||
|
env:
|
||||||
|
RENDERING_ARGS: --disable-gpu,--window-size=1280x758
|
||||||
|
RENDERING_MODE: clustered
|
||||||
|
podLabels:
|
||||||
|
customLableB: Bbbbb
|
||||||
|
networkPolicy:
|
||||||
|
limitIngress: true
|
||||||
|
limitEgress: true
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1000Mi
|
||||||
|
requests:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 50Mi
|
||||||
3
charts/caretta/charts/grafana/ci/with-persistence.yaml
Normal file
3
charts/caretta/charts/grafana/ci/with-persistence.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
persistence:
|
||||||
|
type: pvc
|
||||||
|
enabled: true
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
54
charts/caretta/charts/grafana/templates/NOTES.txt
Normal file
54
charts/caretta/charts/grafana/templates/NOTES.txt
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
1. Get your '{{ .Values.adminUser }}' user password by running:
|
||||||
|
|
||||||
|
kubectl get secret --namespace {{ include "grafana.namespace" . }} {{ include "grafana.fullname" . }} -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
|
||||||
|
|
||||||
|
2. The Grafana server can be accessed via port {{ .Values.service.port }} on the following DNS name from within your cluster:
|
||||||
|
|
||||||
|
{{ include "grafana.fullname" . }}.{{ include "grafana.namespace" . }}.svc.cluster.local
|
||||||
|
{{ if .Values.ingress.enabled }}
|
||||||
|
If you bind grafana to 80, please update values in values.yaml and reinstall:
|
||||||
|
```
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 0
|
||||||
|
runAsGroup: 0
|
||||||
|
fsGroup: 0
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "setcap"
|
||||||
|
- "'cap_net_bind_service=+ep'"
|
||||||
|
- "/usr/sbin/grafana-server &&"
|
||||||
|
- "sh"
|
||||||
|
- "/run.sh"
|
||||||
|
```
|
||||||
|
Details refer to https://grafana.com/docs/installation/configuration/#http-port.
|
||||||
|
Or grafana would always crash.
|
||||||
|
|
||||||
|
From outside the cluster, the server URL(s) are:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
http://{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
Get the Grafana URL to visit by running these commands in the same shell:
|
||||||
|
{{- if contains "NodePort" .Values.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ include "grafana.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "grafana.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ include "grafana.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get svc --namespace {{ include "grafana.namespace" . }} -w {{ include "grafana.fullname" . }}'
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ include "grafana.namespace" . }} {{ include "grafana.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
http://$SERVICE_IP:{{ .Values.service.port -}}
|
||||||
|
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ include "grafana.namespace" . }} -l "app.kubernetes.io/name={{ include "grafana.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ include "grafana.namespace" . }} port-forward $POD_NAME 3000
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
3. Login with the password from step 1 and the username: {{ .Values.adminUser }}
|
||||||
|
|
||||||
|
{{- if not .Values.persistence.enabled }}
|
||||||
|
#################################################################################
|
||||||
|
###### WARNING: Persistence is disabled!!! You will lose your data when #####
|
||||||
|
###### the Grafana pod is terminated. #####
|
||||||
|
#################################################################################
|
||||||
|
{{- end }}
|
||||||
199
charts/caretta/charts/grafana/templates/_helpers.tpl
Normal file
199
charts/caretta/charts/grafana/templates/_helpers.tpl
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.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 "grafana.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 "grafana.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "grafana.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "grafana.serviceAccountNameTest" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (print (include "grafana.fullname" .) "-test") .Values.serviceAccount.nameTest }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.nameTest }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Allow the release namespace to be overridden for multi-namespace deployments in combined charts
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.namespace" -}}
|
||||||
|
{{- if .Values.namespaceOverride }}
|
||||||
|
{{- .Values.namespaceOverride }}
|
||||||
|
{{- else }}
|
||||||
|
{{- .Release.Namespace }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "grafana.chart" . }}
|
||||||
|
{{ include "grafana.selectorLabels" . }}
|
||||||
|
{{- if or .Chart.AppVersion .Values.image.tag }}
|
||||||
|
app.kubernetes.io/version: {{ .Values.image.tag | default .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- with .Values.extraLabels }}
|
||||||
|
{{ toYaml . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "grafana.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.imageRenderer.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "grafana.chart" . }}
|
||||||
|
{{ include "grafana.imageRenderer.selectorLabels" . }}
|
||||||
|
{{- if or .Chart.AppVersion .Values.image.tag }}
|
||||||
|
app.kubernetes.io/version: {{ .Values.image.tag | default .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels ImageRenderer
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.imageRenderer.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "grafana.name" . }}-image-renderer
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Looks if there's an existing secret and reuse its password. If not it generates
|
||||||
|
new password and use it.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.password" -}}
|
||||||
|
{{- $secret := (lookup "v1" "Secret" (include "grafana.namespace" .) (include "grafana.fullname" .) ) }}
|
||||||
|
{{- if $secret }}
|
||||||
|
{{- index $secret "data" "admin-password" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- (randAlphaNum 40) | b64enc | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for rbac.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.rbac.apiVersion" -}}
|
||||||
|
{{- if $.Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1" }}
|
||||||
|
{{- print "rbac.authorization.k8s.io/v1" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- print "rbac.authorization.k8s.io/v1beta1" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for ingress.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.ingress.apiVersion" -}}
|
||||||
|
{{- if and ($.Capabilities.APIVersions.Has "networking.k8s.io/v1") (semverCompare ">= 1.19-0" .Capabilities.KubeVersion.Version) }}
|
||||||
|
{{- print "networking.k8s.io/v1" }}
|
||||||
|
{{- else if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
|
||||||
|
{{- print "networking.k8s.io/v1beta1" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- print "extensions/v1beta1" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for Horizontal Pod Autoscaler.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.hpa.apiVersion" -}}
|
||||||
|
{{- if semverCompare "<1.23-0" .Capabilities.KubeVersion.Version }}
|
||||||
|
{{- print "autoscaling/v2beta1" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- print "autoscaling/v2" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for podDisruptionBudget.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.podDisruptionBudget.apiVersion" -}}
|
||||||
|
{{- if $.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" }}
|
||||||
|
{{- print "policy/v1" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- print "policy/v1beta1" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return if ingress is stable.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.ingress.isStable" -}}
|
||||||
|
{{- eq (include "grafana.ingress.apiVersion" .) "networking.k8s.io/v1" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return if ingress supports ingressClassName.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.ingress.supportsIngressClassName" -}}
|
||||||
|
{{- or (eq (include "grafana.ingress.isStable" .) "true") (and (eq (include "grafana.ingress.apiVersion" .) "networking.k8s.io/v1beta1") (semverCompare ">= 1.18-0" .Capabilities.KubeVersion.Version)) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return if ingress supports pathType.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.ingress.supportsPathType" -}}
|
||||||
|
{{- or (eq (include "grafana.ingress.isStable" .) "true") (and (eq (include "grafana.ingress.apiVersion" .) "networking.k8s.io/v1beta1") (semverCompare ">= 1.18-0" .Capabilities.KubeVersion.Version)) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Formats imagePullSecrets. Input is (dict "root" . "imagePullSecrets" .{specific imagePullSecrets})
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.imagePullSecrets" -}}
|
||||||
|
{{- $root := .root }}
|
||||||
|
{{- range (concat .root.Values.global.imagePullSecrets .imagePullSecrets) }}
|
||||||
|
{{- if eq (typeOf .) "map[string]interface {}" }}
|
||||||
|
- {{ toYaml (dict "name" (tpl .name $root)) | trim }}
|
||||||
|
{{- else }}
|
||||||
|
- name: {{ tpl . $root }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
1144
charts/caretta/charts/grafana/templates/_pod.tpl
Normal file
1144
charts/caretta/charts/grafana/templates/_pod.tpl
Normal file
File diff suppressed because it is too large
Load Diff
25
charts/caretta/charts/grafana/templates/clusterrole.yaml
Normal file
25
charts/caretta/charts/grafana/templates/clusterrole.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{{- if and .Values.rbac.create (not .Values.rbac.namespaced) (not .Values.rbac.useExistingRole) }}
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "grafana.fullname" . }}-clusterrole
|
||||||
|
{{- if or .Values.sidecar.dashboards.enabled (or .Values.rbac.extraClusterRoleRules (or .Values.sidecar.datasources.enabled .Values.sidecar.plugins.enabled)) }}
|
||||||
|
rules:
|
||||||
|
{{- if or .Values.sidecar.dashboards.enabled (or .Values.sidecar.datasources.enabled .Values.sidecar.plugins.enabled) }}
|
||||||
|
- apiGroups: [""] # "" indicates the core API group
|
||||||
|
resources: ["configmaps", "secrets"]
|
||||||
|
verbs: ["get", "watch", "list"]
|
||||||
|
{{- end}}
|
||||||
|
{{- with .Values.rbac.extraClusterRoleRules }}
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
rules: []
|
||||||
|
{{- end}}
|
||||||
|
{{- end}}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
{{- if and .Values.rbac.create (not .Values.rbac.namespaced) }}
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-clusterrolebinding
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ include "grafana.serviceAccountName" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
{{- if .Values.rbac.useExistingRole }}
|
||||||
|
name: {{ .Values.rbac.useExistingRole }}
|
||||||
|
{{- else }}
|
||||||
|
name: {{ include "grafana.fullname" . }}-clusterrole
|
||||||
|
{{- end }}
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
{{- if and .Values.sidecar.dashboards.enabled .Values.sidecar.dashboards.SCProvider }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "grafana.fullname" . }}-config-dashboards
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
data:
|
||||||
|
provider.yaml: |-
|
||||||
|
apiVersion: 1
|
||||||
|
providers:
|
||||||
|
- name: '{{ .Values.sidecar.dashboards.provider.name }}'
|
||||||
|
orgId: {{ .Values.sidecar.dashboards.provider.orgid }}
|
||||||
|
{{- if not .Values.sidecar.dashboards.provider.foldersFromFilesStructure }}
|
||||||
|
folder: '{{ .Values.sidecar.dashboards.provider.folder }}'
|
||||||
|
{{- end }}
|
||||||
|
type: {{ .Values.sidecar.dashboards.provider.type }}
|
||||||
|
disableDeletion: {{ .Values.sidecar.dashboards.provider.disableDelete }}
|
||||||
|
allowUiUpdates: {{ .Values.sidecar.dashboards.provider.allowUiUpdates }}
|
||||||
|
updateIntervalSeconds: {{ .Values.sidecar.dashboards.provider.updateIntervalSeconds | default 30 }}
|
||||||
|
options:
|
||||||
|
foldersFromFilesStructure: {{ .Values.sidecar.dashboards.provider.foldersFromFilesStructure }}
|
||||||
|
path: {{ .Values.sidecar.dashboards.folder }}{{- with .Values.sidecar.dashboards.defaultFolderName }}/{{ . }}{{- end }}
|
||||||
|
{{- end }}
|
||||||
125
charts/caretta/charts/grafana/templates/configmap.yaml
Normal file
125
charts/caretta/charts/grafana/templates/configmap.yaml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
{{- if .Values.createConfigmap }}
|
||||||
|
{{- $root := . -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
data:
|
||||||
|
{{- with .Values.plugins }}
|
||||||
|
plugins: {{ join "," . }}
|
||||||
|
{{- end }}
|
||||||
|
grafana.ini: |
|
||||||
|
{{- range $elem, $elemVal := index .Values "grafana.ini" }}
|
||||||
|
{{- if not (kindIs "map" $elemVal) }}
|
||||||
|
{{- if kindIs "invalid" $elemVal }}
|
||||||
|
{{ $elem }} =
|
||||||
|
{{- else if kindIs "string" $elemVal }}
|
||||||
|
{{ $elem }} = {{ tpl $elemVal $ }}
|
||||||
|
{{- else }}
|
||||||
|
{{ $elem }} = {{ $elemVal }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := index .Values "grafana.ini" }}
|
||||||
|
{{- if kindIs "map" $value }}
|
||||||
|
[{{ $key }}]
|
||||||
|
{{- range $elem, $elemVal := $value }}
|
||||||
|
{{- if kindIs "invalid" $elemVal }}
|
||||||
|
{{ $elem }} =
|
||||||
|
{{- else if kindIs "string" $elemVal }}
|
||||||
|
{{ $elem }} = {{ tpl $elemVal $ }}
|
||||||
|
{{- else }}
|
||||||
|
{{ $elem }} = {{ $elemVal }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range $key, $value := .Values.datasources }}
|
||||||
|
{{- $key | nindent 2 }}: |
|
||||||
|
{{- tpl (toYaml $value | nindent 4) $root }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range $key, $value := .Values.notifiers }}
|
||||||
|
{{- $key | nindent 2 }}: |
|
||||||
|
{{- toYaml $value | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range $key, $value := .Values.alerting }}
|
||||||
|
{{- $key | nindent 2 }}: |
|
||||||
|
{{- tpl (toYaml $value | nindent 4) $root }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range $key, $value := .Values.dashboardProviders }}
|
||||||
|
{{- $key | nindent 2 }}: |
|
||||||
|
{{- toYaml $value | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.dashboards }}
|
||||||
|
download_dashboards.sh: |
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -euf
|
||||||
|
{{- if .Values.dashboardProviders }}
|
||||||
|
{{- range $key, $value := .Values.dashboardProviders }}
|
||||||
|
{{- range $value.providers }}
|
||||||
|
mkdir -p {{ .options.path }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ $dashboardProviders := .Values.dashboardProviders }}
|
||||||
|
{{- range $provider, $dashboards := .Values.dashboards }}
|
||||||
|
{{- range $key, $value := $dashboards }}
|
||||||
|
{{- if (or (hasKey $value "gnetId") (hasKey $value "url")) }}
|
||||||
|
curl -skf \
|
||||||
|
--connect-timeout 60 \
|
||||||
|
--max-time 60 \
|
||||||
|
{{- if not $value.b64content }}
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
{{- if $value.token }}
|
||||||
|
-H "Authorization: token {{ $value.token }}" \
|
||||||
|
{{- end }}
|
||||||
|
{{- if $value.bearerToken }}
|
||||||
|
-H "Authorization: Bearer {{ $value.bearerToken }}" \
|
||||||
|
{{- end }}
|
||||||
|
{{- if $value.gitlabToken }}
|
||||||
|
-H "PRIVATE-TOKEN: {{ $value.gitlabToken }}" \
|
||||||
|
{{- end }}
|
||||||
|
-H "Content-Type: application/json;charset=UTF-8" \
|
||||||
|
{{- end }}
|
||||||
|
{{- $dpPath := "" -}}
|
||||||
|
{{- range $kd := (index $dashboardProviders "dashboardproviders.yaml").providers }}
|
||||||
|
{{- if eq $kd.name $provider }}
|
||||||
|
{{- $dpPath = $kd.options.path }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $value.url }}
|
||||||
|
"{{ $value.url }}" \
|
||||||
|
{{- else }}
|
||||||
|
"https://grafana.com/api/dashboards/{{ $value.gnetId }}/revisions/{{- if $value.revision -}}{{ $value.revision }}{{- else -}}1{{- end -}}/download" \
|
||||||
|
{{- end }}
|
||||||
|
{{- if $value.datasource }}
|
||||||
|
{{- if kindIs "string" $value.datasource }}
|
||||||
|
| sed '/-- .* --/! s/"datasource":.*,/"datasource": "{{ $value.datasource }}",/g' \
|
||||||
|
{{- end }}
|
||||||
|
{{- if kindIs "slice" $value.datasource }}
|
||||||
|
{{- range $value.datasource }}
|
||||||
|
| sed '/-- .* --/! s/${{"{"}}{{ .name }}}/{{ .value }}/g' \
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $value.b64content }}
|
||||||
|
| base64 -d \
|
||||||
|
{{- end }}
|
||||||
|
> "{{- if $dpPath -}}{{ $dpPath }}{{- else -}}/var/lib/grafana/dashboards/{{ $provider }}{{- end -}}/{{ $key }}.json"
|
||||||
|
{{ end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
{{- if .Values.dashboards }}
|
||||||
|
{{ $files := .Files }}
|
||||||
|
{{- range $provider, $dashboards := .Values.dashboards }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" $ }}-dashboards-{{ $provider }}
|
||||||
|
namespace: {{ include "grafana.namespace" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" $ | nindent 4 }}
|
||||||
|
dashboard-provider: {{ $provider }}
|
||||||
|
{{- if $dashboards }}
|
||||||
|
data:
|
||||||
|
{{- $dashboardFound := false }}
|
||||||
|
{{- range $key, $value := $dashboards }}
|
||||||
|
{{- if (or (hasKey $value "json") (hasKey $value "file")) }}
|
||||||
|
{{- $dashboardFound = true }}
|
||||||
|
{{- print $key | nindent 2 }}.json:
|
||||||
|
{{- if hasKey $value "json" }}
|
||||||
|
|-
|
||||||
|
{{- $value.json | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if hasKey $value "file" }}
|
||||||
|
{{- toYaml ( $files.Get $value.file ) | nindent 4}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not $dashboardFound }}
|
||||||
|
{}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
50
charts/caretta/charts/grafana/templates/deployment.yaml
Normal file
50
charts/caretta/charts/grafana/templates/deployment.yaml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{{- if (and (not .Values.useStatefulSet) (or (not .Values.persistence.enabled) (eq .Values.persistence.type "pvc"))) }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if and (not .Values.autoscaling.enabled) (.Values.replicas) }}
|
||||||
|
replicas: {{ .Values.replicas }}
|
||||||
|
{{- end }}
|
||||||
|
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- with .Values.deploymentStrategy }}
|
||||||
|
strategy:
|
||||||
|
{{- toYaml . | trim | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 8 }}
|
||||||
|
{{- with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
||||||
|
checksum/dashboards-json-config: {{ include (print $.Template.BasePath "/dashboards-json-configmap.yaml") . | sha256sum }}
|
||||||
|
checksum/sc-dashboard-provider-config: {{ include (print $.Template.BasePath "/configmap-dashboard-provider.yaml") . | sha256sum }}
|
||||||
|
{{- if and (or (and (not .Values.admin.existingSecret) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD__FILE) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD)) (and .Values.ldap.enabled (not .Values.ldap.existingSecret))) (not .Values.env.GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION) }}
|
||||||
|
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.envRenderSecret }}
|
||||||
|
checksum/secret-env: {{ include (print $.Template.BasePath "/secret-env.yaml") . | sha256sum }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- include "grafana.pod" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{{ range .Values.extraObjects }}
|
||||||
|
---
|
||||||
|
{{ tpl (toYaml .) $ }}
|
||||||
|
{{ end }}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
{{- $sts := list "sts" "StatefulSet" "statefulset" -}}
|
||||||
|
{{- if or .Values.headlessService (and .Values.persistence.enabled (not .Values.persistence.existingClaim) (has .Values.persistence.type $sts)) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-headless
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
selector:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 4 }}
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 3000
|
||||||
|
targetPort: {{ .Values.service.targetPort }}
|
||||||
|
{{- end }}
|
||||||
49
charts/caretta/charts/grafana/templates/hpa.yaml
Normal file
49
charts/caretta/charts/grafana/templates/hpa.yaml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{{- $sts := list "sts" "StatefulSet" "statefulset" -}}
|
||||||
|
{{- if .Values.autoscaling.enabled }}
|
||||||
|
apiVersion: {{ include "grafana.hpa.apiVersion" . }}
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "grafana.name" . }}
|
||||||
|
helm.sh/chart: {{ include "grafana.chart" . }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
{{- if has .Values.persistence.type $sts }}
|
||||||
|
kind: StatefulSet
|
||||||
|
{{- else }}
|
||||||
|
kind: Deployment
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
minReplicas: {{ .Values.autoscaling.minReplicas }}
|
||||||
|
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
|
||||||
|
metrics:
|
||||||
|
{{- if .Values.autoscaling.targetMemory }}
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: memory
|
||||||
|
{{- if semverCompare "<1.23-0" .Capabilities.KubeVersion.Version }}
|
||||||
|
targetAverageUtilization: {{ .Values.autoscaling.targetMemory }}
|
||||||
|
{{- else }}
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: {{ .Values.autoscaling.targetMemory }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.autoscaling.targetCPU }}
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
{{- if semverCompare "<1.23-0" .Capabilities.KubeVersion.Version }}
|
||||||
|
targetAverageUtilization: {{ .Values.autoscaling.targetCPU }}
|
||||||
|
{{- else }}
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: {{ .Values.autoscaling.targetCPU }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,119 @@
|
|||||||
|
{{ if .Values.imageRenderer.enabled }}
|
||||||
|
{{- $root := . -}}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-image-renderer
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.imageRenderer.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.imageRenderer.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.imageRenderer.replicas }}
|
||||||
|
revisionHistoryLimit: {{ .Values.imageRenderer.revisionHistoryLimit }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.imageRenderer.selectorLabels" . | nindent 6 }}
|
||||||
|
|
||||||
|
{{- with .Values.imageRenderer.deploymentStrategy }}
|
||||||
|
strategy:
|
||||||
|
{{- toYaml . | trim | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.imageRenderer.selectorLabels" . | nindent 8 }}
|
||||||
|
{{- with .Values.imageRenderer.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
||||||
|
{{- with .Values.imageRenderer.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.imageRenderer.schedulerName }}
|
||||||
|
schedulerName: "{{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.serviceAccountName }}
|
||||||
|
serviceAccountName: "{{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.hostAliases }}
|
||||||
|
hostAliases:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.priorityClassName }}
|
||||||
|
priorityClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.image.pullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- range . }}
|
||||||
|
- name: {{ tpl . $root }}
|
||||||
|
{{- end}}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}-image-renderer
|
||||||
|
{{- if .Values.imageRenderer.image.sha }}
|
||||||
|
image: "{{ .Values.imageRenderer.image.repository }}:{{ .Values.imageRenderer.image.tag }}@sha256:{{ .Values.imageRenderer.image.sha }}"
|
||||||
|
{{- else }}
|
||||||
|
image: "{{ .Values.imageRenderer.image.repository }}:{{ .Values.imageRenderer.image.tag }}"
|
||||||
|
{{- end }}
|
||||||
|
imagePullPolicy: {{ .Values.imageRenderer.image.pullPolicy }}
|
||||||
|
{{- if .Values.imageRenderer.command }}
|
||||||
|
command:
|
||||||
|
{{- range .Values.imageRenderer.command }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end}}
|
||||||
|
ports:
|
||||||
|
- name: {{ .Values.imageRenderer.service.portName }}
|
||||||
|
containerPort: {{ .Values.imageRenderer.service.targetPort }}
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: {{ .Values.imageRenderer.service.portName }}
|
||||||
|
env:
|
||||||
|
- name: HTTP_PORT
|
||||||
|
value: {{ .Values.imageRenderer.service.targetPort | quote }}
|
||||||
|
{{- range $key, $value := .Values.imageRenderer.env }}
|
||||||
|
- name: {{ $key | quote }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.containerSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /tmp
|
||||||
|
name: image-renderer-tmpfs
|
||||||
|
{{- with .Values.imageRenderer.resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- tpl (toYaml .) $root | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: image-renderer-tmpfs
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
{{- if and .Values.imageRenderer.enabled .Values.imageRenderer.networkPolicy.limitIngress }}
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-image-renderer-ingress
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
comment: Limit image-renderer ingress traffic from grafana
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.imageRenderer.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- with .Values.imageRenderer.podLabels }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- port: {{ .Values.imageRenderer.service.targetPort }}
|
||||||
|
protocol: TCP
|
||||||
|
from:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
name: {{ include "grafana.namespace" . }}
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 14 }}
|
||||||
|
{{- with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 14 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if and .Values.imageRenderer.enabled .Values.imageRenderer.networkPolicy.limitEgress }}
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-image-renderer-egress
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
comment: Limit image-renderer egress traffic to grafana
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.imageRenderer.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- with .Values.imageRenderer.podLabels }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
policyTypes:
|
||||||
|
- Egress
|
||||||
|
egress:
|
||||||
|
# allow dns resolution
|
||||||
|
- ports:
|
||||||
|
- port: 53
|
||||||
|
protocol: UDP
|
||||||
|
- port: 53
|
||||||
|
protocol: TCP
|
||||||
|
# talk only to grafana
|
||||||
|
- ports:
|
||||||
|
- port: {{ .Values.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
to:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 14 }}
|
||||||
|
{{- with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 14 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
{{- if and .Values.imageRenderer.enabled .Values.imageRenderer.service.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-image-renderer
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.imageRenderer.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.imageRenderer.service.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.imageRenderer.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
{{- with .Values.imageRenderer.service.clusterIP }}
|
||||||
|
clusterIP: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: {{ .Values.imageRenderer.service.portName }}
|
||||||
|
port: {{ .Values.imageRenderer.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: {{ .Values.imageRenderer.service.targetPort }}
|
||||||
|
{{- with .Values.imageRenderer.appProtocol }}
|
||||||
|
appProtocol: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "grafana.imageRenderer.selectorLabels" . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
78
charts/caretta/charts/grafana/templates/ingress.yaml
Normal file
78
charts/caretta/charts/grafana/templates/ingress.yaml
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressApiIsStable := eq (include "grafana.ingress.isStable" .) "true" -}}
|
||||||
|
{{- $ingressSupportsIngressClassName := eq (include "grafana.ingress.supportsIngressClassName" .) "true" -}}
|
||||||
|
{{- $ingressSupportsPathType := eq (include "grafana.ingress.supportsPathType" .) "true" -}}
|
||||||
|
{{- $fullName := include "grafana.fullname" . -}}
|
||||||
|
{{- $servicePort := .Values.service.port -}}
|
||||||
|
{{- $ingressPath := .Values.ingress.path -}}
|
||||||
|
{{- $ingressPathType := .Values.ingress.pathType -}}
|
||||||
|
{{- $extraPaths := .Values.ingress.extraPaths -}}
|
||||||
|
apiVersion: {{ include "grafana.ingress.apiVersion" . }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingress.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- range $key, $value := . }}
|
||||||
|
{{ $key }}: {{ tpl $value $ | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if and $ingressSupportsIngressClassName .Values.ingress.ingressClassName }}
|
||||||
|
ingressClassName: {{ .Values.ingress.ingressClassName }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- if .Values.ingress.hosts }}
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ tpl . $ }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- with $extraPaths }}
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
{{- if $ingressSupportsPathType }}
|
||||||
|
pathType: {{ $ingressPathType }}
|
||||||
|
{{- end }}
|
||||||
|
backend:
|
||||||
|
{{- if $ingressApiIsStable }}
|
||||||
|
service:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
port:
|
||||||
|
number: {{ $servicePort }}
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ $fullName }}
|
||||||
|
servicePort: {{ $servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
- http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
{{- if $ingressApiIsStable }}
|
||||||
|
service:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
port:
|
||||||
|
number: {{ $servicePort }}
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ $fullName }}
|
||||||
|
servicePort: {{ $servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $ingressPath }}
|
||||||
|
path: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $ingressSupportsPathType }}
|
||||||
|
pathType: {{ $ingressPathType }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
52
charts/caretta/charts/grafana/templates/networkpolicy.yaml
Normal file
52
charts/caretta/charts/grafana/templates/networkpolicy.yaml
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
{{- if .Values.networkPolicy.enabled }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
policyTypes:
|
||||||
|
{{- if .Values.networkPolicy.ingress }}
|
||||||
|
- Ingress
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.networkPolicy.egress.enabled }}
|
||||||
|
- Egress
|
||||||
|
{{- end }}
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 6 }}
|
||||||
|
|
||||||
|
{{- if .Values.networkPolicy.egress.enabled }}
|
||||||
|
egress:
|
||||||
|
- ports:
|
||||||
|
{{ .Values.networkPolicy.egress.ports | toJson }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.networkPolicy.ingress }}
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- port: {{ .Values.service.targetPort }}
|
||||||
|
{{- if not .Values.networkPolicy.allowExternal }}
|
||||||
|
from:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{ include "grafana.fullname" . }}-client: "true"
|
||||||
|
{{- with .Values.networkPolicy.explicitNamespacesSelector }}
|
||||||
|
- namespaceSelector:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.labels" . | nindent 14 }}
|
||||||
|
role: read
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
{{- if .Values.podDisruptionBudget }}
|
||||||
|
apiVersion: {{ include "grafana.podDisruptionBudget.apiVersion" . }}
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
|
||||||
|
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
||||||
|
{{- if .Values.rbac.pspUseAppArmor }}
|
||||||
|
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
|
||||||
|
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
# Default set from Docker, with DAC_OVERRIDE and CHOWN
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- 'configMap'
|
||||||
|
- 'emptyDir'
|
||||||
|
- 'projected'
|
||||||
|
- 'csi'
|
||||||
|
- 'secret'
|
||||||
|
- 'downwardAPI'
|
||||||
|
- 'persistentVolumeClaim'
|
||||||
|
hostNetwork: false
|
||||||
|
hostIPC: false
|
||||||
|
hostPID: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
fsGroup:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
{{- end }}
|
||||||
36
charts/caretta/charts/grafana/templates/pvc.yaml
Normal file
36
charts/caretta/charts/grafana/templates/pvc.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) (eq .Values.persistence.type "pvc")}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.persistence.extraPvcLabels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.persistence.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.persistence.finalizers }}
|
||||||
|
finalizers:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{- range .Values.persistence.accessModes }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size | quote }}
|
||||||
|
{{- with .Values.persistence.storageClassName }}
|
||||||
|
storageClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.persistence.selectorLabels }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
32
charts/caretta/charts/grafana/templates/role.yaml
Normal file
32
charts/caretta/charts/grafana/templates/role.yaml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{{- if and .Values.rbac.create (not .Values.rbac.useExistingRole) -}}
|
||||||
|
apiVersion: {{ include "grafana.rbac.apiVersion" . }}
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if or .Values.rbac.pspEnabled (and .Values.rbac.namespaced (or .Values.sidecar.dashboards.enabled .Values.sidecar.datasources.enabled .Values.sidecar.plugins.enabled .Values.rbac.extraRoleRules)) }}
|
||||||
|
rules:
|
||||||
|
{{- if .Values.rbac.pspEnabled }}
|
||||||
|
- apiGroups: ['extensions']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames: [{{ include "grafana.fullname" . }}]
|
||||||
|
{{- end }}
|
||||||
|
{{- if and .Values.rbac.namespaced (or .Values.sidecar.dashboards.enabled .Values.sidecar.datasources.enabled .Values.sidecar.plugins.enabled) }}
|
||||||
|
- apiGroups: [""] # "" indicates the core API group
|
||||||
|
resources: ["configmaps", "secrets"]
|
||||||
|
verbs: ["get", "watch", "list"]
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.rbac.extraRoleRules }}
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
rules: []
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
25
charts/caretta/charts/grafana/templates/rolebinding.yaml
Normal file
25
charts/caretta/charts/grafana/templates/rolebinding.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
apiVersion: {{ include "grafana.rbac.apiVersion" . }}
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
{{- if .Values.rbac.useExistingRole }}
|
||||||
|
name: {{ .Values.rbac.useExistingRole }}
|
||||||
|
{{- else }}
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ include "grafana.serviceAccountName" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
14
charts/caretta/charts/grafana/templates/secret-env.yaml
Normal file
14
charts/caretta/charts/grafana/templates/secret-env.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{{- if .Values.envRenderSecret }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-env
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
{{- range $key, $val := .Values.envRenderSecret }}
|
||||||
|
{{ $key }}: {{ $val | b64enc | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
26
charts/caretta/charts/grafana/templates/secret.yaml
Normal file
26
charts/caretta/charts/grafana/templates/secret.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{{- if or (and (not .Values.admin.existingSecret) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD__FILE) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD) (not .Values.env.GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION)) (and .Values.ldap.enabled (not .Values.ldap.existingSecret)) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
{{- if and (not .Values.env.GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION) (not .Values.admin.existingSecret) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD__FILE) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD) }}
|
||||||
|
admin-user: {{ .Values.adminUser | b64enc | quote }}
|
||||||
|
{{- if .Values.adminPassword }}
|
||||||
|
admin-password: {{ .Values.adminPassword | b64enc | quote }}
|
||||||
|
{{- else }}
|
||||||
|
admin-password: {{ include "grafana.password" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.ldap.existingSecret }}
|
||||||
|
ldap-toml: {{ tpl .Values.ldap.config $ | b64enc | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
55
charts/caretta/charts/grafana/templates/service.yaml
Normal file
55
charts/caretta/charts/grafana/templates/service.yaml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{{- if .Values.service.enabled }}
|
||||||
|
{{- $root := . }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.service.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- tpl (toYaml . | nindent 4) $root }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }}
|
||||||
|
type: ClusterIP
|
||||||
|
{{- with .Values.service.clusterIP }}
|
||||||
|
clusterIP: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if eq .Values.service.type "LoadBalancer" }}
|
||||||
|
type: {{ .Values.service.type }}
|
||||||
|
{{- with .Values.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
type: {{ .Values.service.type }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: {{ .Values.service.portName }}
|
||||||
|
port: {{ .Values.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: {{ .Values.service.targetPort }}
|
||||||
|
{{- with .Values.service.appProtocol }}
|
||||||
|
appProtocol: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
|
||||||
|
nodePort: {{ .Values.service.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.extraExposePorts }}
|
||||||
|
{{- tpl (toYaml . | nindent 4) $root }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
17
charts/caretta/charts/grafana/templates/serviceaccount.yaml
Normal file
17
charts/caretta/charts/grafana/templates/serviceaccount.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- $root := . -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.serviceAccount.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- tpl (toYaml . | nindent 4) $root }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "grafana.serviceAccountName" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
44
charts/caretta/charts/grafana/templates/servicemonitor.yaml
Normal file
44
charts/caretta/charts/grafana/templates/servicemonitor.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{{- if .Values.serviceMonitor.enabled }}
|
||||||
|
---
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
{{- if .Values.serviceMonitor.namespace }}
|
||||||
|
namespace: {{ tpl .Values.serviceMonitor.namespace . }}
|
||||||
|
{{- else }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.serviceMonitor.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
endpoints:
|
||||||
|
- port: {{ .Values.service.portName }}
|
||||||
|
{{- with .Values.serviceMonitor.interval }}
|
||||||
|
interval: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.serviceMonitor.scrapeTimeout }}
|
||||||
|
scrapeTimeout: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
honorLabels: true
|
||||||
|
path: {{ .Values.serviceMonitor.path }}
|
||||||
|
scheme: {{ .Values.serviceMonitor.scheme }}
|
||||||
|
{{- with .Values.serviceMonitor.tlsConfig }}
|
||||||
|
tlsConfig:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.serviceMonitor.relabelings }}
|
||||||
|
relabelings:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
jobLabel: "{{ .Release.Name }}"
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 6 }}
|
||||||
|
namespaceSelector:
|
||||||
|
matchNames:
|
||||||
|
- {{ include "grafana.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
55
charts/caretta/charts/grafana/templates/statefulset.yaml
Normal file
55
charts/caretta/charts/grafana/templates/statefulset.yaml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{{- $sts := list "sts" "StatefulSet" "statefulset" -}}
|
||||||
|
{{- if (or (.Values.useStatefulSet) (and .Values.persistence.enabled (not .Values.persistence.existingClaim) (has .Values.persistence.type $sts)))}}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicas }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 6 }}
|
||||||
|
serviceName: {{ include "grafana.fullname" . }}-headless
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.selectorLabels" . | nindent 8 }}
|
||||||
|
{{- with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
||||||
|
checksum/dashboards-json-config: {{ include (print $.Template.BasePath "/dashboards-json-configmap.yaml") . | sha256sum }}
|
||||||
|
checksum/sc-dashboard-provider-config: {{ include (print $.Template.BasePath "/configmap-dashboard-provider.yaml") . | sha256sum }}
|
||||||
|
{{- if and (or (and (not .Values.admin.existingSecret) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD__FILE) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD)) (and .Values.ldap.enabled (not .Values.ldap.existingSecret))) (not .Values.env.GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION) }}
|
||||||
|
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- include "grafana.pod" . | nindent 6 }}
|
||||||
|
{{- if .Values.persistence.enabled}}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: storage
|
||||||
|
spec:
|
||||||
|
accessModes: {{ .Values.persistence.accessModes }}
|
||||||
|
storageClassName: {{ .Values.persistence.storageClassName }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size }}
|
||||||
|
{{- with .Values.persistence.selectorLabels }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
{{- if .Values.testFramework.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
run.sh: |-
|
||||||
|
@test "Test Health" {
|
||||||
|
url="http://{{ include "grafana.fullname" . }}/api/health"
|
||||||
|
|
||||||
|
code=$(wget --server-response --spider --timeout 90 --tries 10 ${url} 2>&1 | awk '/^ HTTP/{print $2}')
|
||||||
|
[ "$code" == "200" ]
|
||||||
|
}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
{{- if and (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") .Values.testFramework.enabled .Values.rbac.pspEnabled }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
allowPrivilegeEscalation: true
|
||||||
|
privileged: false
|
||||||
|
hostNetwork: false
|
||||||
|
hostIPC: false
|
||||||
|
hostPID: false
|
||||||
|
fsGroup:
|
||||||
|
rule: RunAsAny
|
||||||
|
seLinux:
|
||||||
|
rule: RunAsAny
|
||||||
|
supplementalGroups:
|
||||||
|
rule: RunAsAny
|
||||||
|
runAsUser:
|
||||||
|
rule: RunAsAny
|
||||||
|
volumes:
|
||||||
|
- configMap
|
||||||
|
- downwardAPI
|
||||||
|
- emptyDir
|
||||||
|
- projected
|
||||||
|
- csi
|
||||||
|
- secret
|
||||||
|
{{- end }}
|
||||||
17
charts/caretta/charts/grafana/templates/tests/test-role.yaml
Normal file
17
charts/caretta/charts/grafana/templates/tests/test-role.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{{- if and (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") .Values.testFramework.enabled .Values.rbac.pspEnabled }}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['policy']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames: [{{ include "grafana.fullname" . }}-test]
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
{{- if and (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") .Values.testFramework.enabled .Values.rbac.pspEnabled }}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ include "grafana.serviceAccountNameTest" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
{{- if and .Values.testFramework.enabled .Values.serviceAccount.create }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
name: {{ include "grafana.serviceAccountNameTest" . }}
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
||||||
|
{{- end }}
|
||||||
49
charts/caretta/charts/grafana/templates/tests/test.yaml
Normal file
49
charts/caretta/charts/grafana/templates/tests/test.yaml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{{- if .Values.testFramework.enabled }}
|
||||||
|
{{- $root := . }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
labels:
|
||||||
|
{{- include "grafana.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
||||||
|
namespace: {{ include "grafana.namespace" . }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: {{ include "grafana.serviceAccountNameTest" . }}
|
||||||
|
{{- with .Values.testFramework.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if or .Values.image.pullSecrets .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- include "grafana.imagePullSecrets" (dict "root" $root "imagePullSecrets" .Values.image.pullSecrets) | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- tpl (toYaml .) $root | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Release.Name }}-test
|
||||||
|
image: "{{ .Values.testFramework.image}}:{{ .Values.testFramework.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.testFramework.imagePullPolicy}}"
|
||||||
|
command: ["/opt/bats/bin/bats", "-t", "/tests/run.sh"]
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /tests
|
||||||
|
name: tests
|
||||||
|
readOnly: true
|
||||||
|
volumes:
|
||||||
|
- name: tests
|
||||||
|
configMap:
|
||||||
|
name: {{ include "grafana.fullname" . }}-test
|
||||||
|
restartPolicy: Never
|
||||||
|
{{- end }}
|
||||||
1157
charts/caretta/charts/grafana/values.yaml
Normal file
1157
charts/caretta/charts/grafana/values.yaml
Normal file
File diff suppressed because it is too large
Load Diff
22
charts/caretta/charts/victoria-metrics-single/.helmignore
Normal file
22
charts/caretta/charts/victoria-metrics-single/.helmignore
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# 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
|
||||||
|
.vscode/
|
||||||
8
charts/caretta/charts/victoria-metrics-single/Chart.yaml
Normal file
8
charts/caretta/charts/victoria-metrics-single/Chart.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
appVersion: 1.85.3
|
||||||
|
description: Victoria Metrics Single version - high-performance, cost-effective and
|
||||||
|
scalable TSDB, long-term remote storage for Prometheus
|
||||||
|
name: victoria-metrics-single
|
||||||
|
sources:
|
||||||
|
- https://github.com/VictoriaMetrics/helm-charts
|
||||||
|
version: 0.8.48
|
||||||
237
charts/caretta/charts/victoria-metrics-single/README.md
Normal file
237
charts/caretta/charts/victoria-metrics-single/README.md
Normal file
File diff suppressed because one or more lines are too long
107
charts/caretta/charts/victoria-metrics-single/README.md.gotmpl
Normal file
107
charts/caretta/charts/victoria-metrics-single/README.md.gotmpl
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
# Victoria Metrics Helm Chart for Single Version
|
||||||
|
|
||||||
|
{{ template "chart.typeBadge" . }} {{ template "chart.versionBadge" . }}
|
||||||
|
|
||||||
|
{{ template "chart.description" . }}
|
||||||
|
|
||||||
|
# Prerequisites
|
||||||
|
|
||||||
|
* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md).
|
||||||
|
|
||||||
|
* PV support on underlying infrastructure.
|
||||||
|
|
||||||
|
# Chart Details
|
||||||
|
|
||||||
|
This chart will do the following:
|
||||||
|
|
||||||
|
* Rollout Victoria Metrics Single.
|
||||||
|
|
||||||
|
# How to install
|
||||||
|
|
||||||
|
Access a Kubernetes cluster.
|
||||||
|
|
||||||
|
Add a chart helm repository with follow commands:
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm repo add vm https://victoriametrics.github.io/helm-charts/
|
||||||
|
|
||||||
|
helm repo update
|
||||||
|
```
|
||||||
|
|
||||||
|
List versions of ``vm/victoria-metrics-single`` chart available to installation:
|
||||||
|
|
||||||
|
##### for helm v3
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm search repo vm/victoria-metrics-single -l
|
||||||
|
```
|
||||||
|
|
||||||
|
Export default values of ``victoria-metrics-single`` chart to file ``values.yaml``:
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm show values vm/victoria-metrics-single > values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Change the values according to the need of the environment in ``values.yaml`` file.
|
||||||
|
|
||||||
|
Test the installation with command:
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm install vmsingle vm/victoria-metrics-single -f values.yaml -n NAMESPACE --debug --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
Install chart with command:
|
||||||
|
|
||||||
|
##### for helm v3
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm install vmsingle vm/victoria-metrics-single -f values.yaml -n NAMESPACE
|
||||||
|
```
|
||||||
|
|
||||||
|
Get the pods lists by running this commands:
|
||||||
|
|
||||||
|
```console
|
||||||
|
kubectl get pods -A | grep 'single'
|
||||||
|
```
|
||||||
|
|
||||||
|
Get the application by running this command:
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm list -f vmsingle -n NAMESPACE
|
||||||
|
```
|
||||||
|
|
||||||
|
See the history of versions of ``vmsingle`` application with command.
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm history vmsingle -n NAMESPACE
|
||||||
|
```
|
||||||
|
|
||||||
|
# How to uninstall
|
||||||
|
|
||||||
|
Remove application with command.
|
||||||
|
|
||||||
|
```console
|
||||||
|
helm uninstall vmsingle -n NAMESPACE
|
||||||
|
```
|
||||||
|
|
||||||
|
# Documentation of Helm Chart
|
||||||
|
|
||||||
|
Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md).
|
||||||
|
|
||||||
|
Generate docs with ``helm-docs`` command.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd charts/victoria-metrics-single
|
||||||
|
|
||||||
|
helm-docs
|
||||||
|
```
|
||||||
|
|
||||||
|
The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README.
|
||||||
|
|
||||||
|
# Parameters
|
||||||
|
|
||||||
|
The following tables lists the configurable parameters of the chart and their default values.
|
||||||
|
|
||||||
|
Change the values according to the need of the environment in ``victoria-metrics-single/values.yaml`` file.
|
||||||
|
|
||||||
|
{{ template "chart.valuesTable" . }}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
{{- if .Values.printNotes }}
|
||||||
|
{{- if .Values.server.enabled }}
|
||||||
|
The VictoriaMetrics write api can be accessed via port {{ .Values.server.service.servicePort }} on the following DNS name from within your cluster:
|
||||||
|
{{ template "victoria-metrics.server.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
|
||||||
|
|
||||||
|
|
||||||
|
Metrics Ingestion:
|
||||||
|
Get the Victoria Metrics service URL by running these commands in the same shell:
|
||||||
|
|
||||||
|
{{- if contains "NodePort" .Values.server.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "victoria-metrics.server.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.server.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "victoria-metrics.server.fullname" . }}'
|
||||||
|
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "victoria-metrics.server.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
echo http://$SERVICE_IP:{{ .Values.server.service.servicePort }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.server.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ .Values.server.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME {{ .Values.server.service.servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
Write url inside the kubernetes cluster:
|
||||||
|
http://{{ template "victoria-metrics.server.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.server.service.servicePort }}/api/v1/write
|
||||||
|
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
|
||||||
|
Metrics Scrape:
|
||||||
|
Pull-based scrapes are enabled
|
||||||
|
Scrape config can be displayed by running this command::
|
||||||
|
{{- if eq .Values.server.scrape.configMap "" }}
|
||||||
|
kubectl get cm {{ template "victoria-metrics.server.fullname" . }}-scrapeconfig -n {{ .Release.Namespace }}
|
||||||
|
{{- else }}
|
||||||
|
kubectl get cm .Values.server.scrape.configMap -n {{ .Release.Namespace }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
The target’s information is accessible via api:
|
||||||
|
Inside cluster:
|
||||||
|
http://{{ template "victoria-metrics.server.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.server.service.servicePort }}/targets
|
||||||
|
Outside cluster:
|
||||||
|
You need to port-forward service (see instructions above) and call
|
||||||
|
http://<service-host-port>/targets
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
Read Data:
|
||||||
|
The following url can be used as the datasource url in Grafana::
|
||||||
|
http://{{ template "victoria-metrics.server.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.server.service.servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,176 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.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 "victoria-metrics.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 "victoria-metrics.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
{{ default (include "victoria-metrics.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create unified labels for victoria-metrics components
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.common.matchLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "victoria-metrics.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "victoria-metrics.common.metaLabels" -}}
|
||||||
|
helm.sh/chart: {{ include "victoria-metrics.chart" . }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "victoria-metrics.server.labels" -}}
|
||||||
|
{{ include "victoria-metrics.server.matchLabels" . }}
|
||||||
|
{{ include "victoria-metrics.common.metaLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "victoria-metrics.server.matchLabels" -}}
|
||||||
|
app: {{ .Values.server.name }}
|
||||||
|
{{ include "victoria-metrics.common.matchLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a fully qualified server name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.server.fullname" -}}
|
||||||
|
{{- if .Values.server.fullnameOverride -}}
|
||||||
|
{{- .Values.server.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name .Values.server.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s-%s" .Release.Name $name .Values.server.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
|
||||||
|
{{- define "split-host-port" -}}
|
||||||
|
{{- $hp := split ":" . -}}
|
||||||
|
{{- printf "%s" $hp._1 -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Defines the name of scrape configuration map
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.server.scrape.configname" -}}
|
||||||
|
{{- if .Values.server.scrape.configMap -}}
|
||||||
|
{{- .Values.server.scrape.configMap -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- include "victoria-metrics.server.fullname" . -}}-scrapeconfig
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for ingress.
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.ingress.apiVersion" -}}
|
||||||
|
{{- if and (.Capabilities.APIVersions.Has "networking.k8s.io/v1") -}}
|
||||||
|
{{- print "networking.k8s.io/v1" -}}
|
||||||
|
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
|
||||||
|
{{- print "networking.k8s.io/v1beta1" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- print "extensions/v1beta1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return if ingress is stable.
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.ingress.isStable" -}}
|
||||||
|
{{- eq (include "victoria-metrics.ingress.apiVersion" .) "networking.k8s.io/v1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return if ingress supports ingressClassName.
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.ingress.supportsIngressClassName" -}}
|
||||||
|
{{- or (eq (include "victoria-metrics.ingress.isStable" .) "true") (and (eq (include "victoria-metrics.ingress.apiVersion" .) "networking.k8s.io/v1beta1")) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return if ingress supports pathType.
|
||||||
|
*/}}
|
||||||
|
{{- define "victoria-metrics.ingress.supportsPathType" -}}
|
||||||
|
{{- or (eq (include "victoria-metrics.ingress.isStable" .) "true") (and (eq (include "victoria-metrics.ingress.apiVersion" .) "networking.k8s.io/v1beta1")) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "victoria-metrics.hasInitContainer" -}}
|
||||||
|
{{- or (gt (len .Values.server.initContainers) 0) .Values.server.vmbackupmanager.restore.onStart.enabled -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "victoria-metrics.initContiners" -}}
|
||||||
|
{{- if eq (include "victoria-metrics.hasInitContainer" . ) "true" -}}
|
||||||
|
{{- with .Values.server.initContainers -}}
|
||||||
|
{{ toYaml . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.server.vmbackupmanager.restore.onStart.enabled }}
|
||||||
|
- name: {{ template "victoria-metrics.name" . }}-vmbackupmanager-restore
|
||||||
|
image: "{{ .Values.server.vmbackupmanager.image.repository }}:{{ .Values.server.vmbackupmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- restore
|
||||||
|
- {{ printf "%s=%t" "--eula" .Values.server.vmbackupmanager.eula | quote}}
|
||||||
|
- {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}}
|
||||||
|
{{- range $key, $value := .Values.server.vmbackupmanager.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.resources }}
|
||||||
|
resources: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.env }}
|
||||||
|
env: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: manager-http
|
||||||
|
containerPort: 8300
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: {{ .Values.server.persistentVolume.subPath }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.extraVolumeMounts }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
[]
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
{{- if and .Values.rbac.create (not .Values.rbac.namespaced) }}
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}-clusterrole
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.rbac.extraLabels }}
|
||||||
|
{{ toYaml .Values.rbac.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.rbac.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if or .Values.rbac.pspEnabled .Values.server.scrape.enabled }}
|
||||||
|
rules:
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs: ["get", "list", "watch"]
|
||||||
|
- apiGroups: [ "" ]
|
||||||
|
resources:
|
||||||
|
- nodes
|
||||||
|
- nodes/proxy
|
||||||
|
- nodes/metrics
|
||||||
|
- services
|
||||||
|
- endpoints
|
||||||
|
- pods
|
||||||
|
verbs: [ "get", "list", "watch" ]
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingresses
|
||||||
|
verbs: [ "get", "list", "watch" ]
|
||||||
|
- nonResourceURLs: [ "/metrics" ]
|
||||||
|
verbs: [ "get" ]
|
||||||
|
{{- end }}
|
||||||
|
{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1") }}
|
||||||
|
- apiGroups: ['extensions']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames: [{{ template "victoria-metrics.fullname" . }}]
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
rules: []
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
{{- if and .Values.rbac.create (not .Values.rbac.namespaced) }}
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}-clusterrolebinding
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.rbac.extraLabels }}
|
||||||
|
{{ toYaml .Values.rbac.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.rbac.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "victoria-metrics.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}-clusterrole
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
{{- end -}}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
{{- if .Values.podDisruptionBudget.enabled }}
|
||||||
|
{{- if .Capabilities.APIVersions.Has "policy/v1beta1" }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
{{- else -}}
|
||||||
|
apiVersion: policy/v1
|
||||||
|
{{- end }}
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.podDisruptionBudget.extraLabels }}
|
||||||
|
{{ toYaml .Values.podDisruptionBudget.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "victoria-metrics.server.matchLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1") }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.rbac.extraLabels }}
|
||||||
|
{{ toYaml .Values.rbac.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'
|
||||||
|
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
||||||
|
{{- if .Values.rbac.annotations }}
|
||||||
|
{{ toYaml .Values.rbac.annotations | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
# Default set from Docker, with DAC_OVERRIDE and CHOWN
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- 'configMap'
|
||||||
|
- 'emptyDir'
|
||||||
|
- 'projected'
|
||||||
|
- 'secret'
|
||||||
|
- 'downwardAPI'
|
||||||
|
- 'persistentVolumeClaim'
|
||||||
|
hostNetwork: false
|
||||||
|
hostIPC: false
|
||||||
|
hostPID: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
fsGroup:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
{{- if .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.rbac.extraLabels }}
|
||||||
|
{{ toYaml .Values.rbac.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.rbac.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1") }}
|
||||||
|
- apiGroups: ['extensions']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames: [{{ template "victoria-metrics.fullname" . }}]
|
||||||
|
{{- else }}
|
||||||
|
rules: []
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
{{- if .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.rbac.extraLabels }}
|
||||||
|
{{ toYaml .Values.rbac.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.rbac.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: {{ template "victoria-metrics.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "victoria-metrics.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- end -}}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
{{- if and .Values.server.scrape.enabled (eq .Values.server.scrape.configMap "") }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}-scrapeconfig
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels: {{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
scrape.yml: |
|
||||||
|
{{- range $k, $v := .Values.server.scrape.config }}
|
||||||
|
{{- if and (eq $k "scrape_configs") ($.Values.server.scrape.extraScrapeConfigs) }}
|
||||||
|
{{ dict $k (concat $v $.Values.server.scrape.extraScrapeConfigs) | toYaml | nindent 4 }}
|
||||||
|
{{- else }}
|
||||||
|
{{ dict $k $v | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,235 @@
|
|||||||
|
{{- if and .Values.server.enabled (not .Values.server.statefulSet.enabled) -}}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.server.extraLabels }}
|
||||||
|
{{ toYaml .}}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "victoria-metrics.server.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: 1
|
||||||
|
{{- if .Values.server.persistentVolume.enabled }}
|
||||||
|
strategy:
|
||||||
|
# Must be "Recreate" when we have a persistent volume
|
||||||
|
type: Recreate
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 8 }}
|
||||||
|
{{- range $key, $value := .Values.server.podLabels }}
|
||||||
|
{{ $key }}: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.server.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.server.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.server.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
automountServiceAccountToken: {{ .Values.serviceAccount.automountToken }}
|
||||||
|
{{- if eq (include "victoria-metrics.hasInitContainer" . ) "true" -}}
|
||||||
|
initContainers:
|
||||||
|
{{- include "victoria-metrics.initContiners" . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ template "victoria-metrics.name" . }}-{{ .Values.server.name }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.server.podSecurityContext | nindent 12 }}
|
||||||
|
image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
{{- if .Values.server.containerWorkingDir }}
|
||||||
|
workingDir: {{ .Values.server.containerWorkingDir }}
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
- {{ printf "%s=%s" "--retentionPeriod" (toString .Values.server.retentionPeriod) | quote}}
|
||||||
|
- {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}}
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- -promscrape.config=/scrapeconfig/scrape.yml
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := .Values.server.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.env }}
|
||||||
|
env: {{ toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8428
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-tcp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-udp
|
||||||
|
protocol: UDP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-tcp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-udp
|
||||||
|
protocol: UDP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
- name: opentsdbhttp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-tcp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-udp
|
||||||
|
protocol: UDP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.livenessProbe }}
|
||||||
|
livenessProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.readinessProbe }}
|
||||||
|
readinessProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.startupProbe }}
|
||||||
|
startupProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.server.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: {{ .Values.server.persistentVolume.subPath }}
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- name: scrapeconfig
|
||||||
|
mountPath: /scrapeconfig
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.server.name }}-{{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.extraVolumeMounts }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.vmbackupmanager.enable }}
|
||||||
|
- name: {{ template "victoria-metrics.name" . }}-vmbackupmanager
|
||||||
|
image: "{{ .Values.server.vmbackupmanager.image.repository }}:{{ .Values.server.vmbackupmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- {{ printf "%s=%t" "--eula" .Values.server.vmbackupmanager.eula | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableHourly" .Values.server.vmbackupmanager.disableHourly | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableDaily" .Values.server.vmbackupmanager.disableDaily | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableWeekly" .Values.server.vmbackupmanager.disableWeekly | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableMonthly" .Values.server.vmbackupmanager.disableMonthly | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastHourly" (int .Values.server.vmbackupmanager.retention.keepLastHourly) | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastDaily" (int .Values.server.vmbackupmanager.retention.keepLastDaily) | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastWeekly" (int .Values.server.vmbackupmanager.retention.keepLastWeekly) | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastMonthly" (int .Values.server.vmbackupmanager.retention.keepLastMonthly) | quote}}
|
||||||
|
- {{ printf "%s=%s" "--dst" (printf "%s/%s" .Values.server.vmbackupmanager.destination (include "victoria-metrics.name" .) ) | quote}}
|
||||||
|
- {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}}
|
||||||
|
- "--snapshot.createURL=http://localhost:8428/snapshot/create"
|
||||||
|
- "--snapshot.deleteURL=http://localhost:8428/snapshot/delete"
|
||||||
|
{{- range $key, $value := .Values.server.vmbackupmanager.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.resources }}
|
||||||
|
resources: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.vmbackupmanager.livenessProbe }}
|
||||||
|
livenessProbe: {{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.vmbackupmanager.readinessProbe }}
|
||||||
|
readinessProbe: {{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.env }}
|
||||||
|
env: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: manager-http
|
||||||
|
containerPort: 8300
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: {{ .Values.server.persistentVolume.subPath }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.extraVolumeMounts }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.extraContainers }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.server.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.server.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ template "victoria-metrics.serviceAccountName" . }}
|
||||||
|
{{- if .Values.server.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.server.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.affinity }}
|
||||||
|
affinity: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }}
|
||||||
|
volumes:
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- name: scrapeconfig
|
||||||
|
configMap:
|
||||||
|
name: {{ include "victoria-metrics.server.scrape.configname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.extraVolumes }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
- name: server-volume
|
||||||
|
{{- if .Values.server.persistentVolume.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ if .Values.server.persistentVolume.existingClaim }}{{ .Values.server.persistentVolume.existingClaim }}{{- else }}{{ template "victoria-metrics.server.fullname" . }}{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
{{- if and .Values.server.enabled .Values.server.ingress.enabled }}
|
||||||
|
{{- $ingressApiIsStable := eq (include "victoria-metrics.ingress.isStable" .) "true" -}}
|
||||||
|
{{- $ingressSupportsIngressClassName := eq (include "victoria-metrics.ingress.supportsIngressClassName" .) "true" -}}
|
||||||
|
{{- $ingressSupportsPathType := eq (include "victoria-metrics.ingress.supportsPathType" .) "true" -}}
|
||||||
|
{{- $servicePort := .Values.server.service.servicePort -}}
|
||||||
|
{{- $ingressPathType := .Values.server.ingress.pathType -}}
|
||||||
|
apiVersion: {{ include "victoria-metrics.ingress.apiVersion" . }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.ingress.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
{{ if .Values.server.ingress.extraLabels }}
|
||||||
|
{{ toYaml .Values.server.ingress.extraLabels | indent 4 }}
|
||||||
|
{{ end }}
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
{{- if and $ingressSupportsIngressClassName .Values.server.ingress.ingressClassName }}
|
||||||
|
ingressClassName: {{ .Values.server.ingress.ingressClassName }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- $serviceName := include "victoria-metrics.server.fullname" . }}
|
||||||
|
{{- range .Values.server.ingress.hosts }}
|
||||||
|
- host: {{ .name }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ .path }}
|
||||||
|
{{- if $ingressSupportsPathType }}
|
||||||
|
pathType: {{ $ingressPathType }}
|
||||||
|
{{- end }}
|
||||||
|
backend:
|
||||||
|
{{- if $ingressApiIsStable }}
|
||||||
|
service:
|
||||||
|
name: {{ $serviceName }}
|
||||||
|
port:
|
||||||
|
number: {{ $servicePort }}
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: {{ .port | default "http"}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.server.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{ toYaml .Values.server.ingress.tls | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
{{- if .Values.server.persistentVolume.enabled -}}
|
||||||
|
{{- if not .Values.server.statefulSet.enabled -}}
|
||||||
|
{{- if not .Values.server.persistentVolume.existingClaim -}}
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- with .Values.server.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.server.persistentVolume.accessModes }}
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.server.persistentVolume.size | quote }}
|
||||||
|
{{- if .Values.server.persistentVolume.storageClass }}
|
||||||
|
storageClassName: {{ .Values.server.persistentVolume.storageClass | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.persistentVolume.matchLabels }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
{{- if and .Values.server.enabled .Values.server.statefulSet.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.server.statefulSet.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.statefulSet.service.annotations | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.statefulSet.service.labels }}
|
||||||
|
{{ toYaml .Values.server.statefulSet.service.labels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
{{- with .Values.server.statefulSet.service.healthCheckNodePort }}
|
||||||
|
healthCheckNodePort: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.statefulSet.service.externalTrafficPolicy }}
|
||||||
|
externalTrafficPolicy: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.server.statefulSet.service.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: http
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-tcp
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
targetPort: graphite-tcp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
targetPort: graphite-udp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-tcp
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
targetPort: influx-tcp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
targetPort: influx-udp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
- name: opentsdbhttp
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
targetPort: opentsdbhttp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
targetPort: opentsdb-udp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-tcp
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
targetPort: opentsdb-tcp
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "victoria-metrics.server.matchLabels" . | nindent 4 }}
|
||||||
|
{{- end -}}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
{{- if and .Values.server.enabled .Values.server.serviceMonitor.enabled -}}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.serviceMonitor.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.serviceMonitor.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.serviceMonitor.extraLabels }}
|
||||||
|
{{ toYaml .Values.server.serviceMonitor.extraLabels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
{{- if .Values.server.serviceMonitor.namespace }}
|
||||||
|
namespace: {{ .Values.server.serviceMonitor.namespace }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
namespaceSelector:
|
||||||
|
matchNames:
|
||||||
|
- {{ .Release.Namespace }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "victoria-metrics.server.matchLabels" . | nindent 6 }}
|
||||||
|
endpoints:
|
||||||
|
- port: http
|
||||||
|
{{- if .Values.server.serviceMonitor.scheme }}
|
||||||
|
scheme: {{ .Values.server.serviceMonitor.scheme }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.serviceMonitor.interval }}
|
||||||
|
interval: {{ .Values.server.serviceMonitor.interval }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.serviceMonitor.scrapeTimeout }}
|
||||||
|
scrapeTimeout: {{ .Values.server.serviceMonitor.scrapeTimeout }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.serviceMonitor.tlsConfig }}
|
||||||
|
tlsConfig:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.serviceMonitor.relabelings }}
|
||||||
|
relabelings:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,91 @@
|
|||||||
|
{{- if and .Values.server.enabled (not .Values.server.statefulSet.enabled) -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.server.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.service.annotations | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.service.labels }}
|
||||||
|
{{ toYaml .Values.server.service.labels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.server.service.clusterIP }}
|
||||||
|
clusterIP: {{ .Values.server.service.clusterIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{ toYaml .Values.server.service.externalIPs | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ .Values.server.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- range $cidr := .Values.server.service.loadBalancerSourceRanges }}
|
||||||
|
- {{ $cidr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.server.service.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: http
|
||||||
|
{{- with .Values.server.service.nodePort }}
|
||||||
|
nodePort: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-tcp
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
targetPort: graphite-tcp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
targetPort: graphite-udp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-tcp
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
targetPort: influx-tcp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
targetPort: influx-udp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
- name: opentsdbhttp
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
targetPort: opentsdbhttp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
targetPort: opentsdb-udp
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-tcp
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
targetPort: opentsdb-tcp
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "victoria-metrics.server.matchLabels" . | nindent 4 }}
|
||||||
|
type: "{{ .Values.server.service.type }}"
|
||||||
|
{{- with .Values.server.service.healthCheckNodePort }}
|
||||||
|
healthCheckNodePort: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.service.externalTrafficPolicy }}
|
||||||
|
externalTrafficPolicy: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,263 @@
|
|||||||
|
{{- if and .Values.server.enabled .Values.server.statefulSet.enabled -}}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.server.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.server.extraLabels }}
|
||||||
|
{{ toYaml .}}
|
||||||
|
{{- end}}
|
||||||
|
name: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
serviceName: {{ template "victoria-metrics.server.fullname" . }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "victoria-metrics.server.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: 1
|
||||||
|
podManagementPolicy: {{ .Values.server.podManagementPolicy }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.server.labels" . | nindent 8 }}
|
||||||
|
{{- range $key, $value := .Values.server.podLabels }}
|
||||||
|
{{ $key }}: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.server.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.server.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.server.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
automountServiceAccountToken: {{ .Values.serviceAccount.automountToken }}
|
||||||
|
{{- if eq (include "victoria-metrics.hasInitContainer" . ) "true" }}
|
||||||
|
initContainers:
|
||||||
|
{{- include "victoria-metrics.initContiners" . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ template "victoria-metrics.name" . }}-{{ .Values.server.name }}
|
||||||
|
{{- with .Values.server.podSecurityContext }}
|
||||||
|
securityContext: {{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
{{- if .Values.server.containerWorkingDir }}
|
||||||
|
workingDir: {{ .Values.server.containerWorkingDir }}
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
- {{ printf "%s=%s" "--retentionPeriod" (toString .Values.server.retentionPeriod) | quote}}
|
||||||
|
- {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}}
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- -promscrape.config=/scrapeconfig/scrape.yml
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := .Values.server.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.env }}
|
||||||
|
env: {{ toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8428
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-tcp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
- name: graphite-udp
|
||||||
|
protocol: UDP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-tcp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
- name: influx-udp
|
||||||
|
protocol: UDP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
- name: opentsdbhttp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-tcp
|
||||||
|
protocol: TCP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
- name: opentsdb-udp
|
||||||
|
protocol: UDP
|
||||||
|
containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.livenessProbe }}
|
||||||
|
livenessProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.readinessProbe }}
|
||||||
|
readinessProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.startupProbe }}
|
||||||
|
startupProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.server.resources | nindent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: {{ .Values.server.persistentVolume.subPath }}
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- name: scrapeconfig
|
||||||
|
mountPath: /scrapeconfig
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.server.name }}-{{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.extraVolumeMounts }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.vmbackupmanager.enable }}
|
||||||
|
- name: {{ template "victoria-metrics.name" . }}-vmbackupmanager
|
||||||
|
image: "{{ .Values.server.vmbackupmanager.image.repository }}:{{ .Values.server.vmbackupmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- {{ printf "%s=%t" "--eula" .Values.server.vmbackupmanager.eula | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableHourly" .Values.server.vmbackupmanager.disableHourly | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableDaily" .Values.server.vmbackupmanager.disableDaily | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableWeekly" .Values.server.vmbackupmanager.disableWeekly | quote}}
|
||||||
|
- {{ printf "%s=%t" "--disableMonthly" .Values.server.vmbackupmanager.disableMonthly | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastHourly" (int .Values.server.vmbackupmanager.retention.keepLastHourly) | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastDaily" (int .Values.server.vmbackupmanager.retention.keepLastDaily) | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastWeekly" (int .Values.server.vmbackupmanager.retention.keepLastWeekly) | quote}}
|
||||||
|
- {{ printf "%s=%d" "--keepLastMonthly" (int .Values.server.vmbackupmanager.retention.keepLastMonthly) | quote}}
|
||||||
|
- {{ printf "%s=%s" "--dst" (printf "%s/%s" .Values.server.vmbackupmanager.destination (include "victoria-metrics.name" .) ) | quote}}
|
||||||
|
- {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}}
|
||||||
|
- "--snapshot.createURL=http://localhost:8428/snapshot/create"
|
||||||
|
- "--snapshot.deleteURL=http://localhost:8428/snapshot/delete"
|
||||||
|
{{- range $key, $value := .Values.server.vmbackupmanager.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.resources }}
|
||||||
|
resources: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.vmbackupmanager.livenessProbe }}
|
||||||
|
livenessProbe: {{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.server.vmbackupmanager.readinessProbe }}
|
||||||
|
readinessProbe: {{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.env }}
|
||||||
|
env: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: manager-http
|
||||||
|
containerPort: 8300
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: {{ .Values.server.persistentVolume.subPath }}
|
||||||
|
{{- with .Values.server.vmbackupmanager.extraVolumeMounts }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.extraContainers }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.server.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.server.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ template "victoria-metrics.serviceAccountName" . }}
|
||||||
|
{{- if .Values.server.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.server.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.affinity }}
|
||||||
|
affinity: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }}
|
||||||
|
volumes:
|
||||||
|
{{- if .Values.server.scrape.enabled }}
|
||||||
|
- name: scrapeconfig
|
||||||
|
configMap:
|
||||||
|
name: {{ include "victoria-metrics.server.scrape.configname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.server.persistentVolume.enabled }}
|
||||||
|
- name: server-volume
|
||||||
|
emptyDir: {}
|
||||||
|
{{- else }}
|
||||||
|
{{- if .Values.server.persistentVolume.existingClaim }}
|
||||||
|
- name: server-volume
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ .Values.server.persistentVolume.existingClaim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.extraVolumes }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if and .Values.server.persistentVolume.enabled (not .Values.server.persistentVolume.existingClaim) }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: server-volume
|
||||||
|
{{- if .Values.server.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.persistentVolume.annotations | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml .Values.server.persistentVolume.accessModes | indent 10 }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .Values.server.persistentVolume.size }}"
|
||||||
|
{{- if .Values.server.persistentVolume.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.server.persistentVolume.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.server.persistentVolume.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.server.persistentVolume.matchLabels }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "victoria-metrics.common.metaLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.serviceAccount.extraLabels }}
|
||||||
|
{{ toYaml .Values.serviceAccount.extraLabels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "victoria-metrics.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- end }}
|
||||||
669
charts/caretta/charts/victoria-metrics-single/values.yaml
Normal file
669
charts/caretta/charts/victoria-metrics-single/values.yaml
Normal file
@ -0,0 +1,669 @@
|
|||||||
|
# Default values for victoria-metrics.
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
|
||||||
|
rbac:
|
||||||
|
create: true
|
||||||
|
# Note: The PSP will only be deployed, if Kubernetes (<1.25) supports the resource.
|
||||||
|
pspEnabled: true
|
||||||
|
namespaced: false
|
||||||
|
extraLabels: {}
|
||||||
|
# annotations: {}
|
||||||
|
|
||||||
|
# -- Print chart notes
|
||||||
|
printNotes: true
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
# -- Create service account.
|
||||||
|
create: true
|
||||||
|
# name:
|
||||||
|
extraLabels: {}
|
||||||
|
# annotations: {}
|
||||||
|
# -- Mount API token to pod directly
|
||||||
|
automountToken: true
|
||||||
|
|
||||||
|
automountServiceAccountToken: true
|
||||||
|
|
||||||
|
podDisruptionBudget:
|
||||||
|
# -- See `kubectl explain poddisruptionbudget.spec` for more. Ref: [https://kubernetes.io/docs/tasks/run-application/configure-pdb/](https://kubernetes.io/docs/tasks/run-application/configure-pdb/)
|
||||||
|
enabled: false
|
||||||
|
# minAvailable: 1
|
||||||
|
# maxUnavailable: 1
|
||||||
|
extraLabels: {}
|
||||||
|
|
||||||
|
server:
|
||||||
|
# -- Enable deployment of server component. Deployed as StatefulSet
|
||||||
|
enabled: true
|
||||||
|
# -- Server container name
|
||||||
|
name: server
|
||||||
|
image:
|
||||||
|
# -- Image repository
|
||||||
|
repository: victoriametrics/victoria-metrics
|
||||||
|
# -- Image tag
|
||||||
|
tag: v1.85.3
|
||||||
|
# -- Image pull policy
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# -- Name of Priority Class
|
||||||
|
priorityClassName: ""
|
||||||
|
# -- Overrides the full name of server component
|
||||||
|
fullnameOverride:
|
||||||
|
# -- Data retention period in month
|
||||||
|
retentionPeriod: 1
|
||||||
|
# Extra command line arguments for container of component
|
||||||
|
extraArgs:
|
||||||
|
envflag.enable: "true"
|
||||||
|
envflag.prefix: VM_
|
||||||
|
loggerFormat: json
|
||||||
|
|
||||||
|
# Additional hostPath mounts
|
||||||
|
extraHostPathMounts:
|
||||||
|
[]
|
||||||
|
#- name: certs-dir
|
||||||
|
# mountPath: /etc/kubernetes/certs
|
||||||
|
# subPath: ""
|
||||||
|
# hostPath: /etc/kubernetes/certs
|
||||||
|
# readOnly: true
|
||||||
|
|
||||||
|
# Extra Volumes for the pod
|
||||||
|
extraVolumes:
|
||||||
|
[]
|
||||||
|
#- name: example
|
||||||
|
# configMap:
|
||||||
|
# name: example
|
||||||
|
|
||||||
|
# Extra Volume Mounts for the container
|
||||||
|
extraVolumeMounts:
|
||||||
|
[]
|
||||||
|
# - name: example
|
||||||
|
# mountPath: /example
|
||||||
|
|
||||||
|
extraContainers:
|
||||||
|
[]
|
||||||
|
#- name: config-reloader
|
||||||
|
# image: reloader-image
|
||||||
|
|
||||||
|
initContainers:
|
||||||
|
[]
|
||||||
|
# - name: vmrestore
|
||||||
|
# image: victoriametrics/vmrestore:latest
|
||||||
|
# volumeMounts:
|
||||||
|
# - mountPath: /storage
|
||||||
|
# name: vmstorage-volume
|
||||||
|
# - mountPath: /etc/vm/creds
|
||||||
|
# name: secret-remote-storage-keys
|
||||||
|
# readOnly: true
|
||||||
|
# args:
|
||||||
|
# - -storageDataPath=/storage
|
||||||
|
# - -src=s3://your_bucket/folder/latest
|
||||||
|
# - -credsFilePath=/etc/vm/creds/credentials
|
||||||
|
|
||||||
|
# -- Node tolerations for server scheduling to nodes with taints. Ref: [https://kubernetes.io/docs/concepts/configuration/assign-pod-node/](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)
|
||||||
|
tolerations:
|
||||||
|
[]
|
||||||
|
# - key: "key"
|
||||||
|
# operator: "Equal|Exists"
|
||||||
|
# value: "value"
|
||||||
|
# effect: "NoSchedule|PreferNoSchedule"
|
||||||
|
|
||||||
|
# -- Pod's node selector. Ref: [https://kubernetes.io/docs/user-guide/node-selection/](https://kubernetes.io/docs/user-guide/node-selection/)
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
# -- Pod affinity
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
# -- Env variables
|
||||||
|
# -- Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables
|
||||||
|
env: []
|
||||||
|
# -- Container workdir
|
||||||
|
containerWorkingDir: ""
|
||||||
|
|
||||||
|
## Use an alternate scheduler, e.g. "stork".
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
|
||||||
|
##
|
||||||
|
# schedulerName:
|
||||||
|
|
||||||
|
persistentVolume:
|
||||||
|
# -- Create/use Persistent Volume Claim for server component. Empty dir if false
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# -- Array of access modes. Must match those of existing PV or dynamic provisioner. Ref: [http://kubernetes.io/docs/user-guide/persistent-volumes/](http://kubernetes.io/docs/user-guide/persistent-volumes/)
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
# -- Persistant volume annotations
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
# -- StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically
|
||||||
|
storageClass: ""
|
||||||
|
|
||||||
|
# -- Existing Claim name. If defined, PVC must be created manually before volume will be bound
|
||||||
|
existingClaim: ""
|
||||||
|
|
||||||
|
# -- Bind Persistent Volume by labels. Must match all labels of targeted PV.
|
||||||
|
matchLabels: {}
|
||||||
|
|
||||||
|
# -- Mount path. Server data Persistent Volume mount root path.
|
||||||
|
mountPath: /storage
|
||||||
|
# -- Mount subpath
|
||||||
|
subPath: ""
|
||||||
|
# -- Size of the volume. Should be calculated based on the metrics you send and retention policy you set.
|
||||||
|
size: 16Gi
|
||||||
|
|
||||||
|
# -- Sts/Deploy additional labels
|
||||||
|
extraLabels: {}
|
||||||
|
# -- Pod's additional labels
|
||||||
|
podLabels: {}
|
||||||
|
# -- Pod's annotations
|
||||||
|
podAnnotations: {}
|
||||||
|
# -- Pod's management policy
|
||||||
|
podManagementPolicy: OrderedReady
|
||||||
|
|
||||||
|
# -- Resource object. Ref: [http://kubernetes.io/docs/user-guide/compute-resources/](http://kubernetes.io/docs/user-guide/compute-resources/
|
||||||
|
resources:
|
||||||
|
{}
|
||||||
|
# limits:
|
||||||
|
# cpu: 500m
|
||||||
|
# memory: 512Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 500m
|
||||||
|
# memory: 512Mi
|
||||||
|
|
||||||
|
# Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod's IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success.
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 15
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
|
||||||
|
# Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success.
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
scheme: HTTP
|
||||||
|
path: /health
|
||||||
|
port: 8428
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 30
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 10
|
||||||
|
|
||||||
|
# Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over.
|
||||||
|
startupProbe: {}
|
||||||
|
#tcpSocket:
|
||||||
|
# port: http
|
||||||
|
#failureThreshold: 30
|
||||||
|
#periodSeconds: 15
|
||||||
|
#successThreshold: 1
|
||||||
|
#timeoutSeconds: 5
|
||||||
|
|
||||||
|
# -- Security context to be added to server pods
|
||||||
|
securityContext: {}
|
||||||
|
# -- Pod's security context. Ref: [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
|
||||||
|
podSecurityContext: {}
|
||||||
|
ingress:
|
||||||
|
# -- Enable deployment of ingress for server component
|
||||||
|
enabled: false
|
||||||
|
# -- Ingress annotations
|
||||||
|
annotations: {}
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# kubernetes.io/tls-acme: 'true'
|
||||||
|
|
||||||
|
# -- Ingress extra labels
|
||||||
|
extraLabels: {}
|
||||||
|
# -- Array of host objects
|
||||||
|
hosts: []
|
||||||
|
# - name: vmselect.local
|
||||||
|
# path: /select
|
||||||
|
# port: http
|
||||||
|
|
||||||
|
# -- Array of TLS objects
|
||||||
|
tls: []
|
||||||
|
# - secretName: vmselect-ingress-tls
|
||||||
|
# hosts:
|
||||||
|
# - vmselect.local
|
||||||
|
# For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
|
||||||
|
# See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
|
||||||
|
# ingressClassName: nginx
|
||||||
|
# -- pathType is only for k8s >= 1.1=
|
||||||
|
pathType: Prefix
|
||||||
|
|
||||||
|
vmbackupmanager:
|
||||||
|
# -- enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages
|
||||||
|
enable: false
|
||||||
|
# -- should be true and means that you have the legal right to run a backup manager
|
||||||
|
# that can either be a signed contract or an email with confirmation to run the service in a trial period
|
||||||
|
# # https://victoriametrics.com/legal/eula/
|
||||||
|
eula: false
|
||||||
|
image:
|
||||||
|
# -- vmbackupmanager image repository
|
||||||
|
repository: victoriametrics/vmbackupmanager
|
||||||
|
# -- vmbackupmanager image tag
|
||||||
|
tag: v1.85.3-enterprise
|
||||||
|
# -- disable hourly backups
|
||||||
|
disableHourly: false
|
||||||
|
# -- disable daily backups
|
||||||
|
disableDaily: false
|
||||||
|
# -- disable weekly backups
|
||||||
|
disableWeekly: false
|
||||||
|
# -- disable monthly backups
|
||||||
|
disableMonthly: false
|
||||||
|
# -- backup destination at S3, GCS or local filesystem. Release name will be included to path!
|
||||||
|
destination: ""
|
||||||
|
# -- backups' retention settings
|
||||||
|
retention:
|
||||||
|
# -- keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off
|
||||||
|
keepLastHourly: 2
|
||||||
|
# -- keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off
|
||||||
|
keepLastDaily: 2
|
||||||
|
# -- keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off
|
||||||
|
keepLastWeekly: 2
|
||||||
|
# -- keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off
|
||||||
|
keepLastMonthly: 2
|
||||||
|
extraArgs:
|
||||||
|
envflag.enable: "true"
|
||||||
|
envflag.prefix: VM_
|
||||||
|
loggerFormat: json
|
||||||
|
# Extra Volume Mounts for the container
|
||||||
|
extraVolumeMounts:
|
||||||
|
[]
|
||||||
|
# - name: example
|
||||||
|
# mountPath: /example
|
||||||
|
# -- Allows to enable restore options for pod.
|
||||||
|
# Read more: https://docs.victoriametrics.com/vmbackupmanager.html#restore-commands
|
||||||
|
restore:
|
||||||
|
onStart:
|
||||||
|
enabled: false
|
||||||
|
resources: {}
|
||||||
|
# -- Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables
|
||||||
|
env: []
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: manager-http
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 15
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: manager-http
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 30
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 10
|
||||||
|
service:
|
||||||
|
# -- Service annotations
|
||||||
|
annotations: {}
|
||||||
|
# -- Service labels
|
||||||
|
labels: {}
|
||||||
|
# -- Service ClusterIP
|
||||||
|
clusterIP: ""
|
||||||
|
# -- Service External IPs. Ref: [https://kubernetes.io/docs/user-guide/services/#external-ips]( https://kubernetes.io/docs/user-guide/services/#external-ips)
|
||||||
|
externalIPs: []
|
||||||
|
# -- Service load balacner IP
|
||||||
|
loadBalancerIP: ""
|
||||||
|
# -- Load balancer source range
|
||||||
|
loadBalancerSourceRanges: []
|
||||||
|
# -- Service port
|
||||||
|
servicePort: 8428
|
||||||
|
# -- Node port
|
||||||
|
# nodePort: 30000
|
||||||
|
# -- Service type
|
||||||
|
type: ClusterIP
|
||||||
|
# Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
|
||||||
|
# externalTrafficPolicy: "local"
|
||||||
|
# healthCheckNodePort: 0
|
||||||
|
|
||||||
|
statefulSet:
|
||||||
|
# -- Creates statefulset instead of deployment, useful when you want to keep the cache
|
||||||
|
enabled: true
|
||||||
|
# -- Deploy order policy for StatefulSet pods
|
||||||
|
podManagementPolicy: OrderedReady
|
||||||
|
# Headless service for statefulset
|
||||||
|
service:
|
||||||
|
# -- Headless service annotations
|
||||||
|
annotations: {}
|
||||||
|
# -- Headless service labels
|
||||||
|
labels: {}
|
||||||
|
# -- Headless service port
|
||||||
|
servicePort: 8428
|
||||||
|
# Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
|
||||||
|
# externalTrafficPolicy: "local"
|
||||||
|
# healthCheckNodePort: 0
|
||||||
|
# -- Pod's termination grace period in seconds
|
||||||
|
terminationGracePeriodSeconds: 60
|
||||||
|
serviceMonitor:
|
||||||
|
# -- Enable deployment of Service Monitor for server component. This is Prometheus operator object
|
||||||
|
enabled: false
|
||||||
|
# -- Service Monitor labels
|
||||||
|
extraLabels: {}
|
||||||
|
# -- Service Monitor annotations
|
||||||
|
annotations: {}
|
||||||
|
# -- Commented. Prometheus scrape interval for server component
|
||||||
|
# interval: 15s
|
||||||
|
# -- Commented. Prometheus pre-scrape timeout for server component
|
||||||
|
# scrapeTimeout: 5s
|
||||||
|
# -- Commented. HTTP scheme to use for scraping.
|
||||||
|
# scheme: https
|
||||||
|
# -- Commented. TLS configuration to use when scraping the endpoint
|
||||||
|
# tlsConfig:
|
||||||
|
# insecureSkipVerify: true
|
||||||
|
# -- Service Monitor relabelings
|
||||||
|
relabelings: []
|
||||||
|
|
||||||
|
# -- Scrape configuration for victoriametrics
|
||||||
|
scrape:
|
||||||
|
# -- If true scrapes targets, creates config map or use specified one with scrape targets
|
||||||
|
enabled: false
|
||||||
|
# -- Use existing configmap if specified
|
||||||
|
# otherwise .config values will be used
|
||||||
|
configMap: ""
|
||||||
|
# -- Scrape config
|
||||||
|
config:
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
|
||||||
|
# -- Scrape targets
|
||||||
|
scrape_configs:
|
||||||
|
# -- Scrape rule for scrape victoriametrics
|
||||||
|
- job_name: victoriametrics
|
||||||
|
static_configs:
|
||||||
|
- targets: [ "localhost:8428" ]
|
||||||
|
|
||||||
|
## COPY from Prometheus helm chart https://github.com/helm/charts/blob/master/stable/prometheus/values.yaml
|
||||||
|
|
||||||
|
# -- Scrape config for API servers.
|
||||||
|
#
|
||||||
|
# Kubernetes exposes API servers as endpoints to the default/kubernetes
|
||||||
|
# service so this uses `endpoints` role and uses relabelling to only keep
|
||||||
|
# the endpoints associated with the default/kubernetes service using the
|
||||||
|
# default named port `https`. This works for single API server deployments as
|
||||||
|
# well as HA API server deployments.
|
||||||
|
- job_name: "kubernetes-apiservers"
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: endpoints
|
||||||
|
# Default to scraping over https. If required, just disable this or change to
|
||||||
|
# `http`.
|
||||||
|
scheme: https
|
||||||
|
# This TLS & bearer token file config is used to connect to the actual scrape
|
||||||
|
# endpoints for cluster components. This is separate to discovery auth
|
||||||
|
# configuration because discovery & scraping are two separate concerns in
|
||||||
|
# Prometheus. The discovery auth config is automatic if Prometheus runs inside
|
||||||
|
# the cluster. Otherwise, more config options have to be provided within the
|
||||||
|
# <kubernetes_sd_config>.
|
||||||
|
tls_config:
|
||||||
|
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
|
# If your node certificates are self-signed or use a different CA to the
|
||||||
|
# master CA, then disable certificate verification below. Note that
|
||||||
|
# certificate verification is an integral part of a secure infrastructure
|
||||||
|
# so this should only be disabled in a controlled environment. You can
|
||||||
|
# disable certificate verification by uncommenting the line below.
|
||||||
|
#
|
||||||
|
insecure_skip_verify: true
|
||||||
|
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
# Keep only the default/kubernetes service endpoints for the https port. This
|
||||||
|
# will add targets for each API server which Kubernetes adds an endpoint to
|
||||||
|
# the default/kubernetes service.
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels:
|
||||||
|
[
|
||||||
|
__meta_kubernetes_namespace,
|
||||||
|
__meta_kubernetes_service_name,
|
||||||
|
__meta_kubernetes_endpoint_port_name,
|
||||||
|
]
|
||||||
|
action: keep
|
||||||
|
regex: default;kubernetes;https
|
||||||
|
# -- Scrape rule using kubernetes service discovery for nodes
|
||||||
|
- job_name: "kubernetes-nodes"
|
||||||
|
# Default to scraping over https. If required, just disable this or change to
|
||||||
|
# `http`.
|
||||||
|
scheme: https
|
||||||
|
# This TLS & bearer token file config is used to connect to the actual scrape
|
||||||
|
# endpoints for cluster components. This is separate to discovery auth
|
||||||
|
# configuration because discovery & scraping are two separate concerns in
|
||||||
|
# Prometheus. The discovery auth config is automatic if Prometheus runs inside
|
||||||
|
# the cluster. Otherwise, more config options have to be provided within the
|
||||||
|
# <kubernetes_sd_config>.
|
||||||
|
tls_config:
|
||||||
|
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
|
# If your node certificates are self-signed or use a different CA to the
|
||||||
|
# master CA, then disable certificate verification below. Note that
|
||||||
|
# certificate verification is an integral part of a secure infrastructure
|
||||||
|
# so this should only be disabled in a controlled environment. You can
|
||||||
|
# disable certificate verification by uncommenting the line below.
|
||||||
|
#
|
||||||
|
insecure_skip_verify: true
|
||||||
|
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: node
|
||||||
|
relabel_configs:
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubernetes_node_label_(.+)
|
||||||
|
- target_label: __address__
|
||||||
|
replacement: kubernetes.default.svc:443
|
||||||
|
- source_labels: [ __meta_kubernetes_node_name ]
|
||||||
|
regex: (.+)
|
||||||
|
target_label: __metrics_path__
|
||||||
|
replacement: /api/v1/nodes/$1/proxy/metrics
|
||||||
|
# -- Scrape rule using kubernetes service discovery for cadvisor
|
||||||
|
- job_name: "kubernetes-nodes-cadvisor"
|
||||||
|
# Default to scraping over https. If required, just disable this or change to
|
||||||
|
# `http`.
|
||||||
|
scheme: https
|
||||||
|
# This TLS & bearer token file config is used to connect to the actual scrape
|
||||||
|
# endpoints for cluster components. This is separate to discovery auth
|
||||||
|
# configuration because discovery & scraping are two separate concerns in
|
||||||
|
# Prometheus. The discovery auth config is automatic if Prometheus runs inside
|
||||||
|
# the cluster. Otherwise, more config options have to be provided within the
|
||||||
|
# <kubernetes_sd_config>.
|
||||||
|
tls_config:
|
||||||
|
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
|
# If your node certificates are self-signed or use a different CA to the
|
||||||
|
# master CA, then disable certificate verification below. Note that
|
||||||
|
# certificate verification is an integral part of a secure infrastructure
|
||||||
|
# so this should only be disabled in a controlled environment. You can
|
||||||
|
# disable certificate verification by uncommenting the line below.
|
||||||
|
#
|
||||||
|
insecure_skip_verify: true
|
||||||
|
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: node
|
||||||
|
# This configuration will work only on kubelet 1.7.3+
|
||||||
|
# As the scrape endpoints for cAdvisor have changed
|
||||||
|
# if you are using older version you need to change the replacement to
|
||||||
|
# replacement: /api/v1/nodes/$1:4194/proxy/metrics
|
||||||
|
# more info here https://github.com/coreos/prometheus-operator/issues/633
|
||||||
|
relabel_configs:
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubernetes_node_label_(.+)
|
||||||
|
- target_label: __address__
|
||||||
|
replacement: kubernetes.default.svc:443
|
||||||
|
- source_labels: [ __meta_kubernetes_node_name ]
|
||||||
|
regex: (.+)
|
||||||
|
target_label: __metrics_path__
|
||||||
|
replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
|
||||||
|
|
||||||
|
# -- Scrape config for service endpoints.
|
||||||
|
#
|
||||||
|
# The relabeling allows the actual service scrape endpoint to be configured
|
||||||
|
# via the following annotations:
|
||||||
|
#
|
||||||
|
# * `prometheus.io/scrape`: Only scrape services that have a value of `true`
|
||||||
|
# * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need
|
||||||
|
# to set this to `https` & most likely set the `tls_config` of the scrape config.
|
||||||
|
# * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
|
||||||
|
# * `prometheus.io/port`: If the metrics are exposed on a different port to the
|
||||||
|
# service then set this appropriately.
|
||||||
|
# -- Scrape rule using kubernetes service discovery for endpoints
|
||||||
|
- job_name: "kubernetes-service-endpoints"
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: endpoints
|
||||||
|
relabel_configs:
|
||||||
|
- action: drop
|
||||||
|
source_labels: [ __meta_kubernetes_pod_container_init ]
|
||||||
|
regex: true
|
||||||
|
- action: keep_if_equal
|
||||||
|
source_labels: [ __meta_kubernetes_service_annotation_prometheus_io_port, __meta_kubernetes_pod_container_port_number ]
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_scrape ]
|
||||||
|
action: keep
|
||||||
|
regex: true
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_scheme ]
|
||||||
|
action: replace
|
||||||
|
target_label: __scheme__
|
||||||
|
regex: (https?)
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_path ]
|
||||||
|
action: replace
|
||||||
|
target_label: __metrics_path__
|
||||||
|
regex: (.+)
|
||||||
|
- source_labels:
|
||||||
|
[
|
||||||
|
__address__,
|
||||||
|
__meta_kubernetes_service_annotation_prometheus_io_port,
|
||||||
|
]
|
||||||
|
action: replace
|
||||||
|
target_label: __address__
|
||||||
|
regex: ([^:]+)(?::\d+)?;(\d+)
|
||||||
|
replacement: $1:$2
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubernetes_service_label_(.+)
|
||||||
|
- source_labels: [ __meta_kubernetes_namespace ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_namespace
|
||||||
|
- source_labels: [ __meta_kubernetes_service_name ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_name
|
||||||
|
- source_labels: [ __meta_kubernetes_pod_node_name ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_node
|
||||||
|
# -- Scrape config for slow service endpoints; same as above, but with a larger
|
||||||
|
# timeout and a larger interval
|
||||||
|
#
|
||||||
|
# The relabeling allows the actual service scrape endpoint to be configured
|
||||||
|
# via the following annotations:
|
||||||
|
#
|
||||||
|
# * `prometheus.io/scrape-slow`: Only scrape services that have a value of `true`
|
||||||
|
# * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need
|
||||||
|
# to set this to `https` & most likely set the `tls_config` of the scrape config.
|
||||||
|
# * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
|
||||||
|
# * `prometheus.io/port`: If the metrics are exposed on a different port to the
|
||||||
|
# service then set this appropriately.
|
||||||
|
- job_name: "kubernetes-service-endpoints-slow"
|
||||||
|
scrape_interval: 5m
|
||||||
|
scrape_timeout: 30s
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: endpoints
|
||||||
|
relabel_configs:
|
||||||
|
- action: drop
|
||||||
|
source_labels: [ __meta_kubernetes_pod_container_init ]
|
||||||
|
regex: true
|
||||||
|
- action: keep_if_equal
|
||||||
|
source_labels: [ __meta_kubernetes_service_annotation_prometheus_io_port, __meta_kubernetes_pod_container_port_number ]
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_scrape_slow ]
|
||||||
|
action: keep
|
||||||
|
regex: true
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_scheme ]
|
||||||
|
action: replace
|
||||||
|
target_label: __scheme__
|
||||||
|
regex: (https?)
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_path ]
|
||||||
|
action: replace
|
||||||
|
target_label: __metrics_path__
|
||||||
|
regex: (.+)
|
||||||
|
- source_labels:
|
||||||
|
[
|
||||||
|
__address__,
|
||||||
|
__meta_kubernetes_service_annotation_prometheus_io_port,
|
||||||
|
]
|
||||||
|
action: replace
|
||||||
|
target_label: __address__
|
||||||
|
regex: ([^:]+)(?::\d+)?;(\d+)
|
||||||
|
replacement: $1:$2
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubernetes_service_label_(.+)
|
||||||
|
- source_labels: [ __meta_kubernetes_namespace ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_namespace
|
||||||
|
- source_labels: [ __meta_kubernetes_service_name ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_name
|
||||||
|
- source_labels: [ __meta_kubernetes_pod_node_name ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_node
|
||||||
|
# -- Example scrape config for probing services via the Blackbox Exporter.
|
||||||
|
#
|
||||||
|
# The relabeling allows the actual service scrape endpoint to be configured
|
||||||
|
# via the following annotations:
|
||||||
|
#
|
||||||
|
# * `prometheus.io/probe`: Only probe services that have a value of `true`
|
||||||
|
- job_name: "kubernetes-services"
|
||||||
|
metrics_path: /probe
|
||||||
|
params:
|
||||||
|
module: [ http_2xx ]
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: service
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels:
|
||||||
|
[ __meta_kubernetes_service_annotation_prometheus_io_probe ]
|
||||||
|
action: keep
|
||||||
|
regex: true
|
||||||
|
- source_labels: [ __address__ ]
|
||||||
|
target_label: __param_target
|
||||||
|
- target_label: __address__
|
||||||
|
replacement: blackbox
|
||||||
|
- source_labels: [ __param_target ]
|
||||||
|
target_label: instance
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubernetes_service_label_(.+)
|
||||||
|
- source_labels: [ __meta_kubernetes_namespace ]
|
||||||
|
target_label: kubernetes_namespace
|
||||||
|
- source_labels: [ __meta_kubernetes_service_name ]
|
||||||
|
target_label: kubernetes_name
|
||||||
|
# -- Example scrape config for pods
|
||||||
|
#
|
||||||
|
# The relabeling allows the actual pod scrape endpoint to be configured via the
|
||||||
|
# following annotations:
|
||||||
|
#
|
||||||
|
# * `prometheus.io/scrape`: Only scrape pods that have a value of `true`
|
||||||
|
# * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
|
||||||
|
# * `prometheus.io/port`: Scrape the pod on the indicated port instead of the default of `9102`.
|
||||||
|
- job_name: "kubernetes-pods"
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: pod
|
||||||
|
relabel_configs:
|
||||||
|
- action: drop
|
||||||
|
source_labels: [ __meta_kubernetes_pod_container_init ]
|
||||||
|
regex: true
|
||||||
|
- action: keep_if_equal
|
||||||
|
source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_container_port_number ]
|
||||||
|
- source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_scrape ]
|
||||||
|
action: keep
|
||||||
|
regex: true
|
||||||
|
- source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_path ]
|
||||||
|
action: replace
|
||||||
|
target_label: __metrics_path__
|
||||||
|
regex: (.+)
|
||||||
|
- source_labels:
|
||||||
|
[ __address__, __meta_kubernetes_pod_annotation_prometheus_io_port ]
|
||||||
|
action: replace
|
||||||
|
regex: ([^:]+)(?::\d+)?;(\d+)
|
||||||
|
replacement: $1:$2
|
||||||
|
target_label: __address__
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubernetes_pod_label_(.+)
|
||||||
|
- source_labels: [ __meta_kubernetes_namespace ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_namespace
|
||||||
|
- source_labels: [ __meta_kubernetes_pod_name ]
|
||||||
|
action: replace
|
||||||
|
target_label: kubernetes_pod_name
|
||||||
|
## End of COPY
|
||||||
|
|
||||||
|
# -- Extra scrape configs that will be appended to `server.scrape.config`
|
||||||
|
extraScrapeConfigs: []
|
||||||
465
charts/caretta/dashboard.json
Normal file
465
charts/caretta/dashboard.json
Normal file
@ -0,0 +1,465 @@
|
|||||||
|
{
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"target": {
|
||||||
|
"limit": 100,
|
||||||
|
"matchAny": false,
|
||||||
|
"tags": [],
|
||||||
|
"type": "dashboard"
|
||||||
|
},
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": 2,
|
||||||
|
"links": [],
|
||||||
|
"liveNow": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 24,
|
||||||
|
"w": 17,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
|
"interval": "15s",
|
||||||
|
"options": {
|
||||||
|
"nodes": {
|
||||||
|
"arcs": [
|
||||||
|
{
|
||||||
|
"color": "#5794F2",
|
||||||
|
"field": "arc__color"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"exemplar": false,
|
||||||
|
"expr": "increase((sum by (id, title, subTitle, detail__kind, arc__color) (label_replace((label_replace(label_replace(label_replace(label_replace((caretta_links_observed{client_namespace=~\"$namespace\", client_kind=~\"$kind\", client_name=~\"$workload\", server_port=~\"$port\"} or caretta_links_observed{server_namespace=~\"$namespace\", server_kind=~\"$kind\", server_name=~\"$workload\", server_port=~\"$port\"}), \"detail__kind\", \"$1\", \"server_kind\", \"(.*)\"), \"subTitle\", \"$1\", \"server_namespace\", \"(.*)\"), \"title\", \"$1\", \"server_name\", \"(.*)\"), \"id\", \"$1\", \"server_id\", \"(.*)\") or label_replace(label_replace(label_replace(label_replace((caretta_links_observed{client_namespace=~\"$namespace\", client_kind=~\"$kind\", client_name=~\"$workload\", server_port=~\"$port\"} or caretta_links_observed{server_namespace=~\"$namespace\", server_kind=~\"$kind\", server_name=~\"$workload\", server_port=~\"$port\"}), \"detail__kind\", \"$1\", \"client_kind\", \"(.*)\"), \"subTitle\", \"$1\", \"client_namespace\", \"(.*)\"), \"title\", \"$1\", \"client_name\", \"(.*)\"), \"id\", \"$1\", \"client_id\", \"(.*)\") ), \"arc__color\", \"1\", \"link_id\", \"(.*)\")) )[$__range:$__interval]) > 0",
|
||||||
|
"format": "table",
|
||||||
|
"instant": true,
|
||||||
|
"legendFormat": "__auto",
|
||||||
|
"range": false,
|
||||||
|
"refId": "nodes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"exemplar": false,
|
||||||
|
"expr": "increase((sum by (id, source, target, mainStat) ((label_replace(label_replace(label_replace(label_replace((caretta_links_observed{client_namespace=~\"$namespace\", client_kind=~\"$kind\", client_name=~\"$workload\", server_port=~\"$port\"} or caretta_links_observed{server_namespace=~\"$namespace\", server_kind=~\"$kind\", server_name=~\"$workload\", server_port=~\"$port\"}), \"id\", \"$1\", \"link_id\", \"(.*)\"), \"source\", \"$1\", \"client_id\", \"(.*)\"), \"target\", \"$1\", \"server_id\", \"(.*)\"), \"mainStat\", \"$1\", \"server_port\", \"(.*)\"))) )[$__range:$__interval]) > 0",
|
||||||
|
"format": "table",
|
||||||
|
"hide": false,
|
||||||
|
"instant": true,
|
||||||
|
"legendFormat": "__auto",
|
||||||
|
"range": false,
|
||||||
|
"refId": "edges"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Service Map ☸️",
|
||||||
|
"type": "nodeGraph"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"fixedColor": "blue",
|
||||||
|
"mode": "fixed"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [],
|
||||||
|
"mappings": []
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 4,
|
||||||
|
"x": 17,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
|
"options": {
|
||||||
|
"displayLabels": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"legend": {
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "right",
|
||||||
|
"showLegend": false
|
||||||
|
},
|
||||||
|
"pieType": "donut",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "sum by (server_port) (increase((caretta_links_observed{client_namespace=~\"$namespace\", client_kind=~\"$kind\", client_name=~\"$workload\", server_port=~\"$port\"} or caretta_links_observed{server_namespace=~\"$namespace\", server_kind=~\"$kind\", server_name=~\"$workload\", server_port=~\"$port\"})[$__range:$__interval])) > 0",
|
||||||
|
"legendFormat": "__auto",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Active Ports",
|
||||||
|
"type": "piechart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "datasource",
|
||||||
|
"uid": "grafana"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 3,
|
||||||
|
"x": 21,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 10,
|
||||||
|
"options": {
|
||||||
|
"code": {
|
||||||
|
"language": "plaintext",
|
||||||
|
"showLineNumbers": false,
|
||||||
|
"showMiniMap": false
|
||||||
|
},
|
||||||
|
"content": "<table style=\"width:100%; height:100%;border:0px solid black;\">\n <td style=\"text-align: center;vertical-align: middle;border:0px solid black; \">\n<div style=\"text-align: center\">\n<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/groundcover-com/caretta/main/images/logo.svg\" width=\"75%\" alt=\"caretta\" title=\"caretta\" />\n <h4>by <a href=\"https://www.groundcover.com\">groundcover</h4>\n\n \n [](http://www.groundcover.com/join-slack)\n \n</div>\n</p>\n</div>\n</td>\n</table>\n",
|
||||||
|
"mode": "markdown"
|
||||||
|
},
|
||||||
|
"pluginVersion": "9.3.1",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"fixedColor": "purple",
|
||||||
|
"mode": "continuous-blues"
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "Bps"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 7,
|
||||||
|
"x": 17,
|
||||||
|
"y": 7
|
||||||
|
},
|
||||||
|
"id": 8,
|
||||||
|
"options": {
|
||||||
|
"displayMode": "gradient",
|
||||||
|
"minVizHeight": 10,
|
||||||
|
"minVizWidth": 0,
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"showUnfilled": true
|
||||||
|
},
|
||||||
|
"pluginVersion": "9.3.1",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"exemplar": false,
|
||||||
|
"expr": "topk(8, sum by (client_name) ((rate(caretta_links_observed{client_namespace=~\"$namespace\", client_kind=~\"$kind\", client_name=~\"$workload\", server_port=~\"$port\"}[$__range:$__interval]))))",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": true,
|
||||||
|
"legendFormat": "__auto",
|
||||||
|
"range": false,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Top Throughput Workloads",
|
||||||
|
"type": "bargauge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"description": "",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "continuous-blues"
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "Bps"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 9,
|
||||||
|
"w": 7,
|
||||||
|
"x": 17,
|
||||||
|
"y": 15
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"options": {
|
||||||
|
"colorMode": "background",
|
||||||
|
"graphMode": "area",
|
||||||
|
"justifyMode": "center",
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"text": {},
|
||||||
|
"textMode": "auto"
|
||||||
|
},
|
||||||
|
"pluginVersion": "9.3.1",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"exemplar": false,
|
||||||
|
"expr": "topk(7, sum by (client_name, server_name) ( rate( (caretta_links_observed{client_namespace=~\"$namespace\", client_kind=~\"$kind\", client_name=~\"$workload\", server_port=~\"$port\", client_kind!~\"(node|external)\",} or caretta_links_observed{server_namespace=~\"$namespace\", server_kind=~\"$kind\", server_name=~\"$workload\", server_port=~\"$port\", server_kind!~\"(node|external)\"})[$__range:$__interval]) ) )",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": true,
|
||||||
|
"legendFormat": "{{client_name}} ⮂ {{server_name}}",
|
||||||
|
"range": false,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Top Throughput Connections",
|
||||||
|
"type": "stat"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"schemaVersion": 37,
|
||||||
|
"style": "dark",
|
||||||
|
"tags": [],
|
||||||
|
"templating": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"allValue": "(.*)",
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": [
|
||||||
|
"All"
|
||||||
|
],
|
||||||
|
"value": [
|
||||||
|
"$__all"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"definition": "query_result(caretta_links_observed)",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"multi": true,
|
||||||
|
"name": "namespace",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"query": "query_result(caretta_links_observed)",
|
||||||
|
"refId": "StandardVariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "/.*_namespace=\"([^\"]*).*/",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"sort": 1,
|
||||||
|
"type": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": "(.*)",
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": [
|
||||||
|
"All"
|
||||||
|
],
|
||||||
|
"value": [
|
||||||
|
"$__all"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"definition": "query_result(caretta_links_observed)",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"multi": true,
|
||||||
|
"name": "kind",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"query": "query_result(caretta_links_observed)",
|
||||||
|
"refId": "StandardVariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "/.*_kind=\"([^\"]*).*/",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"sort": 0,
|
||||||
|
"type": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": "(.*)",
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": [
|
||||||
|
"All"
|
||||||
|
],
|
||||||
|
"value": [
|
||||||
|
"$__all"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"definition": "query_result(caretta_links_observed)",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"label": "workload",
|
||||||
|
"multi": true,
|
||||||
|
"name": "workload",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"query": "query_result(caretta_links_observed)",
|
||||||
|
"refId": "StandardVariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 2,
|
||||||
|
"regex": "/.*_name=\"([^\"]*).*/",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"sort": 1,
|
||||||
|
"type": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": "(.*)",
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": [
|
||||||
|
"All"
|
||||||
|
],
|
||||||
|
"value": [
|
||||||
|
"$__all"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"definition": "label_values(server_port)",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"label": "server port",
|
||||||
|
"multi": true,
|
||||||
|
"name": "port",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"query": "label_values(server_port)",
|
||||||
|
"refId": "StandardVariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"sort": 0,
|
||||||
|
"type": "query"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-5m",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "",
|
||||||
|
"title": "Caretta Dashboard",
|
||||||
|
"uid": "k0Om62pVf",
|
||||||
|
"version": 1,
|
||||||
|
"weekStart": ""
|
||||||
|
}
|
||||||
62
charts/caretta/templates/_helpers.tpl
Normal file
62
charts/caretta/templates/_helpers.tpl
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "caretta.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 "caretta.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 "caretta.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "caretta.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "caretta.chart" . }}
|
||||||
|
{{ include "caretta.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "caretta.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "caretta.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "caretta.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "caretta.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
77
charts/caretta/templates/daemonset.yaml
Normal file
77
charts/caretta/templates/daemonset.yaml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: {{ include "caretta.name" . }}
|
||||||
|
labels:
|
||||||
|
app: caretta
|
||||||
|
{{- include "caretta.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: caretta
|
||||||
|
{{- include "caretta.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
app: caretta
|
||||||
|
{{- include "caretta.selectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "caretta.name" . }}
|
||||||
|
{{- if .Values.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.priorityClassName }}
|
||||||
|
{{- end }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /proc
|
||||||
|
name: proc
|
||||||
|
- mountPath: /sys/kernel/debug
|
||||||
|
name: debug
|
||||||
|
ports:
|
||||||
|
- name: prom-metrics
|
||||||
|
containerPort: {{ .Values.prometheusPort }}
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: "RESOLVE_DNS"
|
||||||
|
value: "{{ .Values.enableDnsResolving }}"
|
||||||
|
- name: "PROMETHEUS_PORT"
|
||||||
|
value: "{{ .Values.prometheusPort }}"
|
||||||
|
- name: "PROMETHEUS_ENDPOINT"
|
||||||
|
value: "{{ .Values.prometheusEndpoint }}"
|
||||||
|
- name: "POLL_INTERVAL"
|
||||||
|
value: "{{ .Values.pollIntervalSeconds }}"
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 12 }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: proc
|
||||||
|
hostPath:
|
||||||
|
path: /proc
|
||||||
|
- name: debug
|
||||||
|
hostPath:
|
||||||
|
path: /sys/kernel/debug
|
||||||
8
charts/caretta/templates/grafana/dashboards.yaml
Normal file
8
charts/caretta/templates/grafana/dashboards.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: caretta-grafana-dashboards
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
data:
|
||||||
|
dashboard.json: |-
|
||||||
|
{{ .Files.Get "dashboard.json" | indent 4}}
|
||||||
29
charts/caretta/templates/rbac/psp.yaml
Normal file
29
charts/caretta/templates/rbac/psp.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1") }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
|
||||||
|
name: {{ template "caretta.fullname" . }}
|
||||||
|
spec:
|
||||||
|
allowPrivilegeEscalation: true
|
||||||
|
allowedCapabilities:
|
||||||
|
- '*'
|
||||||
|
fsGroup:
|
||||||
|
rule: RunAsAny
|
||||||
|
hostIPC: true
|
||||||
|
hostNetwork: false
|
||||||
|
hostPID: true
|
||||||
|
hostPorts:
|
||||||
|
- max: 65535
|
||||||
|
min: 0
|
||||||
|
privileged: true
|
||||||
|
runAsUser:
|
||||||
|
rule: RunAsAny
|
||||||
|
seLinux:
|
||||||
|
rule: RunAsAny
|
||||||
|
supplementalGroups:
|
||||||
|
rule: RunAsAny
|
||||||
|
volumes:
|
||||||
|
- '*'
|
||||||
|
{{ end -}}
|
||||||
164
charts/caretta/templates/rbac/role.yaml
Normal file
164
charts/caretta/templates/rbac/role.yaml
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: {{ include "caretta.fullname" . }}
|
||||||
|
rules:
|
||||||
|
{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1") }}
|
||||||
|
- apiGroups:
|
||||||
|
- policy
|
||||||
|
- extensions
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "caretta.fullname" . }}
|
||||||
|
resources:
|
||||||
|
- podsecuritypolicies
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
{{- end }}
|
||||||
|
{{- if and .Values.rbac.sccEnabled (.Capabilities.APIVersions.Has "security.openshift.io/v1")}}
|
||||||
|
- apiGroups:
|
||||||
|
- security.openshift.io
|
||||||
|
resources:
|
||||||
|
- securitycontextconstraints
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
resourceNames:
|
||||||
|
- privileged
|
||||||
|
{{- end }}
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- ''
|
||||||
|
resources:
|
||||||
|
- configmaps
|
||||||
|
- endpoints
|
||||||
|
- persistentvolumeclaims
|
||||||
|
- persistentvolumeclaims/status
|
||||||
|
- pods
|
||||||
|
- replicationcontrollers
|
||||||
|
- replicationcontrollers/scale
|
||||||
|
- serviceaccounts
|
||||||
|
- services
|
||||||
|
- services/status
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- ''
|
||||||
|
resources:
|
||||||
|
- bindings
|
||||||
|
- events
|
||||||
|
- limitranges
|
||||||
|
- namespaces/status
|
||||||
|
- pods/log
|
||||||
|
- pods/status
|
||||||
|
- nodes
|
||||||
|
- replicationcontrollers/status
|
||||||
|
- resourcequotas
|
||||||
|
- resourcequotas/status
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- ''
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- apps
|
||||||
|
resources:
|
||||||
|
- controllerrevisions
|
||||||
|
- daemonsets
|
||||||
|
- daemonsets/status
|
||||||
|
- deployments
|
||||||
|
- deployments/scale
|
||||||
|
- deployments/status
|
||||||
|
- replicasets
|
||||||
|
- replicasets/scale
|
||||||
|
- replicasets/status
|
||||||
|
- statefulsets
|
||||||
|
- statefulsets/scale
|
||||||
|
- statefulsets/status
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- batch
|
||||||
|
resources:
|
||||||
|
- cronjobs
|
||||||
|
- cronjobs/status
|
||||||
|
- jobs
|
||||||
|
- jobs/status
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- extensions
|
||||||
|
resources:
|
||||||
|
- daemonsets
|
||||||
|
- daemonsets/status
|
||||||
|
- deployments
|
||||||
|
- deployments/scale
|
||||||
|
- deployments/status
|
||||||
|
- ingresses
|
||||||
|
- ingresses/status
|
||||||
|
- networkpolicies
|
||||||
|
- replicasets
|
||||||
|
- replicasets/scale
|
||||||
|
- replicasets/status
|
||||||
|
- replicationcontrollers/scale
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- policy
|
||||||
|
resources:
|
||||||
|
- poddisruptionbudgets
|
||||||
|
- poddisruptionbudgets/status
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingresses
|
||||||
|
- ingresses/status
|
||||||
|
- networkpolicies
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
- verbs:
|
||||||
|
- list
|
||||||
|
apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
- verbs:
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
- verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
apiGroups:
|
||||||
|
- metrics.k8s.io
|
||||||
|
resources:
|
||||||
|
- pods
|
||||||
|
- nodes
|
||||||
|
|
||||||
12
charts/caretta/templates/rbac/rolebinding.yaml
Normal file
12
charts/caretta/templates/rbac/rolebinding.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ include "caretta.fullname" . }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ include "caretta.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ include "caretta.name" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
5
charts/caretta/templates/rbac/serviceaccount.yaml
Normal file
5
charts/caretta/templates/rbac/serviceaccount.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ include "caretta.name" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
151
charts/caretta/values.yaml
Normal file
151
charts/caretta/values.yaml
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
enableDnsResolving: true
|
||||||
|
prometheusPort: 7117
|
||||||
|
prometheusEndpoint: "/metrics"
|
||||||
|
pollIntervalSeconds: 5
|
||||||
|
|
||||||
|
rbac:
|
||||||
|
pspEnabled: true
|
||||||
|
sccEnabled: true
|
||||||
|
image:
|
||||||
|
repository: quay.io/groundcover/caretta
|
||||||
|
pullPolicy: Always
|
||||||
|
tag: ""
|
||||||
|
|
||||||
|
imagePullSecrets: []
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 150m
|
||||||
|
memory: 300Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 50Mi
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
# Specifies whether a service account should be created
|
||||||
|
create: true
|
||||||
|
# Annotations to add to the service account
|
||||||
|
annotations: {}
|
||||||
|
# The name of the service account to use.
|
||||||
|
# If not set and create is true, a name is generated using the fullname template
|
||||||
|
name: ""
|
||||||
|
|
||||||
|
podAnnotations: {}
|
||||||
|
|
||||||
|
podSecurityContext: {}
|
||||||
|
# fsGroup: 2000
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
# capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# runAsUser: 1000
|
||||||
|
|
||||||
|
tolerations:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
operator: Exists
|
||||||
|
effect: NoSchedule
|
||||||
|
- key: node-role.kubernetes.io/master
|
||||||
|
operator: Exists
|
||||||
|
effect: NoSchedule
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
affinity: {}
|
||||||
|
priorityClassName:
|
||||||
|
|
||||||
|
victoria-metrics-single:
|
||||||
|
server:
|
||||||
|
image:
|
||||||
|
repository: quay.io/groundcover/victoria-metrics
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 300m
|
||||||
|
memory: 350Mi
|
||||||
|
requests:
|
||||||
|
cpu: 5m
|
||||||
|
memory: 50Mi
|
||||||
|
fullnameOverride: caretta-vm
|
||||||
|
persistentVolume:
|
||||||
|
enabled: false
|
||||||
|
size: 16Gi # change enabled to true if you pv is required
|
||||||
|
|
||||||
|
scrape:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
config:
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'caretta'
|
||||||
|
metrics_path: /metrics
|
||||||
|
scrape_interval: 5s
|
||||||
|
kubernetes_sd_configs:
|
||||||
|
- role: pod
|
||||||
|
namespaces:
|
||||||
|
own_namespace: true
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__meta_kubernetes_pod_label_app]
|
||||||
|
separator: ;
|
||||||
|
regex: caretta
|
||||||
|
replacement: $1
|
||||||
|
action: keep
|
||||||
|
- action: labelmap
|
||||||
|
regex: __meta_kubrnetes_pod_label_(.+)
|
||||||
|
- source_labels: [__meta_kubernetes_pod_name]
|
||||||
|
action: replace
|
||||||
|
target_label: caretta_pod
|
||||||
|
- source_labels: [__meta_kubernetes_pod_node_name]
|
||||||
|
action: replace
|
||||||
|
target_label: caretta_node
|
||||||
|
|
||||||
|
grafana:
|
||||||
|
image:
|
||||||
|
repository: quay.io/groundcover/grafana
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 300Mi
|
||||||
|
cpu: 300m
|
||||||
|
requests:
|
||||||
|
memory: 50Mi
|
||||||
|
cpu: 5m
|
||||||
|
datasources:
|
||||||
|
datasources.yaml:
|
||||||
|
apiVersion: 1
|
||||||
|
datasources:
|
||||||
|
- name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
access: proxy
|
||||||
|
url: "http://caretta-vm:8428"
|
||||||
|
editable: "true"
|
||||||
|
|
||||||
|
dashboardProviders:
|
||||||
|
dashboardproviders.yaml:
|
||||||
|
apiVersion: 1
|
||||||
|
providers:
|
||||||
|
- name: 'default'
|
||||||
|
orgId: 1
|
||||||
|
folder: ''
|
||||||
|
type: file
|
||||||
|
disableDeletion: false
|
||||||
|
editable: true
|
||||||
|
options:
|
||||||
|
path: /var/lib/grafana/dashboards
|
||||||
|
foldersFromFilesStructure: true
|
||||||
|
|
||||||
|
dashboardsConfigMaps:
|
||||||
|
default: "caretta-grafana-dashboards"
|
||||||
|
|
||||||
|
grafana.ini:
|
||||||
|
auth.anonymous:
|
||||||
|
enabled: true
|
||||||
|
dashboards:
|
||||||
|
default_home_dashboard_path: /var/lib/grafana/dashboards/default/dashboard.json
|
||||||
|
adminUser: "admin"
|
||||||
|
adminPassword: "caretta"
|
||||||
15
manifests/caretta/values.yaml
Normal file
15
manifests/caretta/values.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
tolerations:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
operator: Exists
|
||||||
|
effect: NoSchedule
|
||||||
|
- key: node-role.kubernetes.io/master
|
||||||
|
operator: Exists
|
||||||
|
effect: NoSchedule
|
||||||
|
|
||||||
|
pollIntervalSeconds: 5
|
||||||
|
traverseUpHierarchy: true
|
||||||
|
|
||||||
|
victoria-metrics-single:
|
||||||
|
server:
|
||||||
|
persistentVolume:
|
||||||
|
enabled: false
|
||||||
Loading…
x
Reference in New Issue
Block a user