https://github.com/metrico/qryn-cloud-helm
https://github.com/metrico/qryn-cloud-helm
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/metrico/qryn-cloud-helm
- Owner: metrico
- License: agpl-3.0
- Created: 2024-05-07T13:05:10.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-24T09:07:38.000Z (over 1 year ago)
- Last Synced: 2024-12-28T15:33:48.853Z (10 months ago)
- Language: Smarty
- Size: 87.9 KB
- Stars: 0
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Overview
This Helm chart provides Kubernetes deployment configurations for [qryn-cloud](https://github.com/metrico) a polyglot, lighweight, multi-standard observability framework for Logs, Metrics and Traces, designed to be drop-in compatible with Loki, Prometheus, Tempo and Opentelemetry.
## Prerequisites
- Kubernetes 1.19+
- Helm 3.7+
## Get Repository Info
```bash
helm repo add qryn-cloud-helm https://metrico.github.io/qryn-cloud-helm/
helm repo update
```
# Installation
1. Create namespace in the kubernetes cluster you want to use: `kubectl create namespace qryn`
2. Create docker registry secret yaml to pull docker images
```
cat <docker-registry-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: qryn-dckr
namespace: qryn
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: $(base64 -w 0 <<< $(cat <<'EOF'
{
"auths": {
"your-registry.com": {
"username": "",
"password": ""
}
}
}
EOF
))
EOR
```
3. Make the kubectl secret in the qryn namespace to reach the private docker registry as
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
```
kubectl apply -f docker-registry-secret.yaml
```
4. Create `values.yaml` to override the needed parameters.
Please take a look to the [configuration](#configuration-options). Some of the parameters are required to override.
5. Install helmchart
```
helm install qryn . -f values.base.yaml -f values.yaml --namespace qryn --create-namespace
```
# First database setup
Before using Qryn the database should be set up.
In order to set up the database you need to create an API call to qryn-ctrl.
1. Forward the qryn-ctrl port
`kubectl port forward 8080:8080 -n qryn `
2. Do the API http call to qryn-ctrl:
```bash
cat <",
"node": "clickhouse1",
"pass": "",
"name": "",
"host": "",
"port": ,
"primary": true,
"debug": true,
"secure": ,
"cloud": ,
"cluster_name": "",
"distributed": ,
"ttl_days": ,
}
]
}
EOF
```
# Data deletion
The data deletion functionality is optional and can be configured using the helmchart. It consists of the modules:
- qryn-reader properly configured
- qryn-worker cronjob
- redis-compatible storage of the deletion tasks and deletion status
## Redis-compatible storage
Any redis-compatible instance can be used to store the tasks and synchronize the workers.
The storage should be persistent. Non-persistent storage may lose planned tasks and status synchronization.
The helmchart contains an optional configurable keydb storage with the following values.yaml configuration:
```yaml
keydb:
# enable or disable a keydb instance
enabled: false
# enable or disable a persistent volume
persistence: true
# liveness / readiness / initContainers specification default for any deloyment
livenessProbe: { }
readinessProbe: { }
initContainers:
enabled: false
# keydb password is mandatory for the helmchart
env:
KEYDB_PASS: XXXXXXX
```
These configurations can be overriden with the user values.yaml file.
## Qryn-worker cronjob:
The qryn delete worker cronjob is present in the helmchart with the following values.yaml
```yaml
deleteWorker:
# enable / disable the cronjob
enabled: false
podAnnotations: []
image:
repository: qxip/qryn-deleter
tag: 1.2.91-beta.65
imagePullPolicy: IfNotPresent
# schedule for the cronjob
schedule: "* * * * *"
nodeSelector: { }
tolerations: [ ]
affinity: { }
resources:
requests:
memory: 100Mi
cpu: 100m
limits:
memory: 100Mi
cpu: 100m
```
The schedule configuration can be changed to run the deletion worker less frequently.
## The qryn-go configuration
The following variables were added to the configuration configmap:
```yaml
# Delete configuration
QRYN_WORKER_TYPE: "redis"
QRYN_WORKER_SYNC_URL: "redis://XXXX@qryn-keydb:6379"
```
The worker type should be "redis".
The sync url should be a valid redis URI.
# Ingress setup
In order to reach Qryn from outside, the http ingress rules should be configured.
Current helm has a default ingress definition. It can be enabled for writer and reader separately by configuring
`reader.ingress` and `writer.ingress` configuration. Please look at the [configuration](#configuration-options).
The http routes should be configured for Qryn reader and writer services are as follows.
For qryn-writer service (regexp notation):
- /loki/api/v1/push
- (/api)?(/v1)?/prom/remote/write
- /tempo/spans
- /tempo/api/push
- /influx/api/v2/write
- /v1/traces
- /[^/]+/_doc(/[^/]+)?
- /[^/]+/_create/[^/]+
- (/[^/]+)?/_bulk
- /api/v2/spans
- /api/v2/logs
- /api/v2/series
- /cf/v1/insert
For qryn-reader service (regexp notation):
- /ready
- /metrics
- /config
- /api/v1/metadata
- /api/v1/status/buildinfo
- /api/v1/labels
- /api/v1/labels
- /api/v1/label/[^/]+/values
- /api/v1/metadata
- /api/v1/query_exemplars
- /api/v1/rules
- /api/v1/series
- /api/v1/series
- /api/v1/status/tsdb
- /loki/api/v1/query_range
- /loki/api/v1/query
- /loki/api/v1/delete
- /loki/api/v1/label
- /loki/api/v1/label
- /loki/api/v1/labels
- /loki/api/v1/labels
- /loki/api/v1/label/[^/]+/values
- /loki/api/v1/label/[^/]+/values
- /loki/api/v1/series
- /loki/api/v1/series
- /tempo/api/traces/[^/]+
- /api/traces/[^/]+
- /api/traces/[^/]+/json
- /tempo/api/echo
- /api/echo
- /tempo/api/search/tags
- /api/search/tags
- /tempo/api/search/tag/[^/]+/values
- /api/search/tag/[^/]+/values
- /api/v2/search/tag/[^/]+/values
- /tempo/api/search
- /api/search
Websocket connection for qryn-reader service:
- /loki/api/v1/tail
# Configuration options
The required options are marked **bold**
| Configuration | Description | Default Value |
|------------------------------------------------------|--------------------------------------------------------------------|-----------------------------|
| kubernetesClusterDomain | The domain to use for Kubernetes cluster. | cluster.local |
| nameOverride | A string to partially replace the name of the qryn deployment. | qryn |
| qryn.annotations | Additional annotations for the configmap. | [] |
| qryn.data.QRYN_LOG_SETTINGS_LEVEL | The log level for qryn. | debug |
| qryn.data.QRYN_LOG_SETTINGS_STDOUT | Whether to log to stdout. | true |
| qryn.data.QRYN_LOG_SETTINGS_SYSLOG | Whether to log to syslog. | true |
| qryn.data.QRYN_MULTITENANCE_SETTINGS_ENABLED | Whether to enable multi-tenancy. | true |
| qryn.data.QRYN_SYSTEM_SETTINGS_DB_TIMER | The timeout between two subsequent inserts into the database (sec) | 1 |
| qryn.data.QRYN_SYSTEM_SETTINGS_DYNAMIC_DATABASES | Whether to enable X-CH-DSN header controlled databases. | false |
| qryn.data.QRYN_SYSTEM_SETTINGS_NO_FORCE_ROTATION | Whether to disable forced rotation (not used). | true |
| qryn.data.QRYN_SYSTEM_SETTINGS_QUERY_STATS | Whether to enable query statistics. | true |
| qryn.data.QRYNCLOUD_LICENSE | The license key for qrynCloud. | XXXX |
| **qryn.data.QRYN_DATABASE_DATA_0_NODE** | The node for the qryn database. | clickhouse1 |
| **qryn.data.QRYN_DATABASE_DATA_0_USER** | The user for the qryn database. | default |
| **qryn.data.QRYN_DATABASE_DATA_0_PASS** | The password for the qryn database. | |
| **qryn.data.QRYN_DATABASE_DATA_0_HOST** | The host for the qryn database. | localhost |
| **qryn.data.QRYN_DATABASE_DATA_0_NAME** | The name for the qryn database. | qryn |
| **qryn.data.QRYN_DATABASE_DATA_0_PORT** | The port for the qryn database. | 9000 |
| **qryn.data.QRYN_DATABASE_DATA_0_SECURE** | Whether to use secure connection for the qryn database. | false |
| qryn.data.QRYN_SYSTEM_SETTINGS_LICENSE_AUTO_SHUTDOWN | Whether to deactivate license on sigkill | true |
| qryn.data.QRYN_WORKER_TYPE | Deletion worker type (redis/internal) | redis |
| qryn.data.QRYN_WORKER_SYNC_URL | Redis URI for "redis" worker | redis://XXXX@qryn-keydb:6379 |
| reader.autoscaling.enabled | Whether to enable hpa autoscaling for the reader. | True |
| reader.autoscaling.minReplicas | The minimum number of replicas for the reader. | 1 |
| reader.autoscaling.maxReplicas | The maximum number of replicas for the reader. | 10 |
| reader.autoscaling.targetCPUUtilizationPercentage | The target CPU utilization percentage for autoscaling. | 80 |
| reader.autoscaling.targetMemoryUtilizationPercentage | The target memory utilization percentage for autoscaling. | 80 |
| reader.ingress.enabled | Whether to enable ingress for the reader. | false |
| reader.ingress.hosts | The list of hostnames for the reader's ingress. | ['qryn-reader.local.qryn'] |
| reader.labels | Additional labels for the reader deployment. | [] |
| reader.podAnnotations | Additional pod annotations for the reader deployment. | [] |
| reader.nodeSelector | Configure nodeSelector for reader deployment. | {} |
| reader.tolerations | Configure tolerations for reader deployment. | [] |
| reader.affinity | Configure affinity for reader deployment. | {} |
| reader.enabled | Whether to enable the reader deployment. | True |
| reader.env.qrynHttpSettingsPort | The port for the qryn reader HTTP endpoint. | 3200 |
| reader.image.repository | The repository for the reader image. | qxip/qryn-go-cloud |
| reader.image.tag | The tag for the reader image. | 1.2.91-beta.55 |
| reader.imagePullPolicy | The image pull policy for the reader image. | IfNotPresent |
| reader.resources.requests.memory | The requested memory for the reader. | 1Gi |
| reader.resources.requests.cpu | The requested CPU for the reader. | 100m |
| reader.resources.limits.memory | The memory limit for the reader. | 1Gi |
| reader.resources.limits.cpu | The CPU limit for the reader. | 100m |
| reader.replicas | The number of replica sets for the reader. | 1 |
| reader.revisionHistoryLimit | The number of history revisions for the reader. | 10 |
| reader.type | The type of deployment for the reader. | ClusterIP |
| writer.labels | Additional labels for the writer deployment. | [] |
| writer.podAnnotations | Additional pod annotations for the writer deployment. | [] |
| writer.nodeSelector | Configure nodeSelector for writer deployment. | {} |
| writer.tolerations | Configure tolerations for writer deployment. | [] |
| writer.affinity | Configure affinity for writer deployment. | {} |
| writer.enabled | Whether to enable the writer deployment. | True |
| writer.ingress.enabled | Whether to enable ingress for the writer. | True |
| writer.ingress.hosts | The list of hostnames for the writer's ingress. | ['qryn-writer.local.qryn'] |
| writer.autoscaling.enabled | Whether to enable autoscaling for the writer. | True |
| writer.autoscaling.minReplicas | The minimum number of replicas for the writer. | 1 |
| writer.autoscaling.maxReplicas | The maximum number of replicas for the writer. | 10 |
| writer.autoscaling.targetCPUUtilizationPercentage | The target CPU utilization percentage for autoscaling. | 80 |
| writer.autoscaling.targetMemoryUtilizationPercentage | The target memory utilization percentage for autoscaling. | 80 |
| writer.env.qrynHttpSettingsPort | The port for the qryn HTTP endpoint. | 3100 |
| writer.image.repository | The repository for the writer image. | qxip/qryn-writer-cloud |
| writer.image.tag | The tag for the writer image. | 1.9.95-beta.13 |
| writer.imagePullPolicy | The image pull policy for the writer image. | IfNotPresent |
| writer.resources.requests.memory | The requested memory for the writer. | 1Gi |
| writer.resources.requests.cpu | The requested CPU for the writer. | 100m |
| writer.resources.limits.memory | The memory limit for the writer. | 1Gi |
| writer.resources.limits.cpu | The CPU limit for the writer. | 100m |
| writer.replicas | The number of replica sets for the writer. | 1 |
| writer.revisionHistoryLimit | The number of history revisions for the writer. | 10 |
| writer.type | The type of deployment for the writer. | ClusterIP |
| ctrl.labels | Additional labels for the qryn-ctrl deployment. | [] |
| ctrl.podAnnotations | Additional pod annotations for the ctrl deployment. | [] |
| ctrl.nodeSelector | Configure nodeSelector for ctrl deployment. | {} |
| ctrl.tolerations | Configure tolerations for ctrl deployment. | [] |
| ctrl.affinity | Configure affinity for ctrl deployment. | {} |
| ctrl.enabled | Whether to enable the qryn-ctrl deployment. | True |
| ctrl.image.repository | The repository for the qryn-ctrl image. | qxip/qryn-ctrl |
| ctrl.imagePullPolicy | Whether to pull the image for the qryn-ctrl. | IfNotPresent |
| ctrl.replicas | The number of replica sets for the qryn-ctrl. | 1 |
| ctrl.revisionHistoryLimit | The number of history revisions for the qryn-ctrl. | 10 |
| ctrl.type | The type of deployment for the qryn-ctrl. | ClusterIP |
| keydb.enabled | Whether to enable the keydb instance. | false |
| keydb.persistence | Whether to enable persistence for the keydb instance | true |
| keydb.livenessProbe | The liveness probe configuration for the keydb instance | { } |
| keydb.readinessProbe | The readiness probe configuration for the keydb instance | { } |
| keydb.initContainers | The init containers configuration for the keydb instance | |
| **keydb.env.KEYDB_PASS** | The password for the keydb instance | XXXXX |
| deleteWorker.enabled | Whether to enable the delete worker component | false |
| deleteWorker.podAnnotations | Additional pod annotations for the delete worker component | [] |
| deleteWorker.image | The image for the delete worker component | |
| deleteWorker.imagePullPolicy | The image pull policy for the delete worker component | IfNotPresent |
| deleteWorker.schedule | The schedule for the delete worker cronjob | "* * * * *" |
| deleteWorker.nodeSelector | The node selector configuration for the delete worker component | { } |
| deleteWorker.tolerations | The tolerations configuration for the delete worker component | [ ] |
| deleteWorker.affinity | The affinity configuration for the delete worker component | { } |
| deleteWorker.resources | The resources configuration for the delete worker component | |
