diff --git a/helm-releases/pai-0.3.0.tgz b/helm-releases/pai-0.3.0.tgz new file mode 100644 index 000000000..67d6bc9b9 Binary files /dev/null and b/helm-releases/pai-0.3.0.tgz differ diff --git a/helm/Chart.lock b/helm/Chart.lock deleted file mode 100644 index 10b0b8ce1..000000000 --- a/helm/Chart.lock +++ /dev/null @@ -1,9 +0,0 @@ -dependencies: -- name: vector - repository: https://helm.vector.dev - version: 0.20.1 -- name: fluent-bit - repository: https://fluent.github.io/helm-charts - version: 0.25.0 -digest: sha256:5657989e00b94e31ddcb44d0c925f8d30849c46851879a27708b50cd1af6ee33 -generated: "2023-04-24T18:46:09.186176+05:30" diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 296b7c1cf..b3861fdca 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: parseable description: Helm chart for Parseable OSS version. Columnar data lake platform - purpose built for observability type: application -version: 2.8.2 +version: 3.0.0 appVersion: "v2.8.0" icon: "https://raw.githubusercontent.com/parseablehq/.github/main/images/logo.svg" @@ -10,14 +10,3 @@ maintainers: - name: Parseable Team email: hi@parseable.com url: https://parseable.com - -dependencies: -- name: vector - version: 0.20.1 - repository: https://helm.vector.dev - condition: vector.enabled -- name: fluent-bit - version: 0.48.0 - repository: https://fluent.github.io/helm-charts - condition: fluent-bit.enabled - \ No newline at end of file diff --git a/helm/README.md b/helm/README.md index e74171073..5645016dd 100644 --- a/helm/README.md +++ b/helm/README.md @@ -1,3 +1,41 @@ # Parseable Helm Chart -Refer the Parseable Helm Chart [documentation ↗︎](https://www.parseable.io/docs/installation/kubernetes-helm) +## Install (standalone, local-store) + +```sh +kubectl create secret generic parseable-env-secret \ + --from-literal=addr=0.0.0.0:8000 \ + --from-literal=username=admin \ + --from-literal=password=admin \ + --from-literal=staging.dir=/parseable/staging \ + --from-literal=fs.dir=/parseable/data + +helm install parseable ./ -n parseable --create-namespace +``` + +## Distributed on a cloud (querier + ingestors) + +Create the secret with the keys for your cloud (see the matching values file), then: + +```sh +# AWS (S3) +helm install parseable ./ -n parseable --create-namespace -f values-aws.yaml + +# GCP (GCS) +helm install parseable ./ -n parseable --create-namespace -f values-gcp.yaml + +# Azure (Blob) +helm install parseable ./ -n parseable --create-namespace -f values-azure.yaml +``` + +## Upgrade + +```sh +helm upgrade parseable ./ -n parseable -f values.yaml +``` + +## Uninstall + +```sh +helm uninstall parseable -n parseable +``` diff --git a/helm/charts/fluent-bit-0.48.1.tgz b/helm/charts/fluent-bit-0.48.1.tgz deleted file mode 100644 index cd471f645..000000000 Binary files a/helm/charts/fluent-bit-0.48.1.tgz and /dev/null differ diff --git a/helm/charts/vector-0.20.1.tgz b/helm/charts/vector-0.20.1.tgz deleted file mode 100644 index 349a449b9..000000000 Binary files a/helm/charts/vector-0.20.1.tgz and /dev/null differ diff --git a/helm/templates/_helpers_config_logstream.txt b/helm/templates/_helpers_config_logstream.txt deleted file mode 100644 index 8e979d53c..000000000 --- a/helm/templates/_helpers_config_logstream.txt +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -set -e ; # Have script exit in the event of a failed command. -IFS=$' \t\r\n' - -createStream() { - STREAM=$1 - echo; - echo \"Creating the log stream $STREAM\"; - - {{ if .Values.parseable.highAvailability.enabled }} - response=$(curl -sS --header 'Content-Type: application/json' -u "$P_USERNAME":"$P_PASSWORD" -w 'HTTPSTATUS:%{http_code}' --location --request PUT "http://{{ include "parseable.fullname" . }}-querier-service.{{ .Release.Namespace }}:{{ $.Values.parseable.service.port }}/api/v1/logstream/$STREAM"); - {{ else }} - response=$(curl -sS --header 'Content-Type: application/json' -u "$P_USERNAME":"$P_PASSWORD" -w 'HTTPSTATUS:%{http_code}' --location --request PUT "http://{{ include "parseable.fullname" . }}.{{ .Release.Namespace }}:{{ $.Values.parseable.service.port }}/api/v1/logstream/$STREAM"); - {{ end }} - - HTTP_BODY=$(echo $response | sed -e 's/HTTPSTATUS\:.*//g') - HTTP_STATUS=$(echo $response | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') - - echo \"API response:\" - echo \"HTTP status code: $HTTP_STATUS\" - echo \"HTTP response message: $HTTP_BODY\" -} - -setRetention() { - STREAM=$1 - ACTION=$2 - DURATION=$3 - - echo; - echo \"Setting the retention for $STREAM\"; - - {{ if .Values.parseable.highAvailability.enabled }} - response=$(curl -sS --header 'Content-Type: application/json' -u "$P_USERNAME":"$P_PASSWORD" -w 'HTTPSTATUS:%{http_code}' --location --request PUT "http://{{ include "parseable.fullname" . }}-querier-service.{{ .Release.Namespace }}:{{ $.Values.parseable.service.port }}/api/v1/logstream/$STREAM/retention" --data "[{\"description\":\"$ACTION logs after $DURATION\",\"action\":\"$ACTION\",\"duration\":\"$DURATION\"}]"); - {{ else }} - response=$(curl -sS --header 'Content-Type: application/json' -u "$P_USERNAME":"$P_PASSWORD" -w 'HTTPSTATUS:%{http_code}' --location --request PUT "http://{{ include "parseable.fullname" . }}.{{ .Release.Namespace }}:{{ $.Values.parseable.service.port }}/api/v1/logstream/$STREAM/retention" --data "[{\"description\":\"$ACTION logs after $DURATION\",\"action\":\"$ACTION\",\"duration\":\"$DURATION\"}]"); - {{ end }} - - HTTP_BODY=$(echo $response | sed -e 's/HTTPSTATUS\:.*//g') - HTTP_STATUS=$(echo $response | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') - - echo \"API response:\" - echo \"HTTP status code: $HTTP_STATUS\" - echo \"HTTP response message: $HTTP_BODY\" -} - -{{ if .Values.parseable.logstream }} -# Create the logstream -{{- range .Values.parseable.logstream }} -createStream {{.name}} -setRetention {{.name}} {{.retention.action}} {{.retention.duration}} -{{- end }} -{{- end }} diff --git a/helm/templates/data-pvc.yaml b/helm/templates/data-pvc.yaml index 2df8e05f9..197a4d552 100644 --- a/helm/templates/data-pvc.yaml +++ b/helm/templates/data-pvc.yaml @@ -1,4 +1,5 @@ -{{- if .Values.parseable.persistence.data.enabled }} +{{- $p := .Values.parseable.nodes.standalone.persistence.data }} +{{- if and (not .Values.parseable.highAvailability.enabled) $p.enabled }} apiVersion: v1 kind: PersistentVolumeClaim metadata: @@ -7,13 +8,9 @@ metadata: {{- include "parseable.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.parseable.persistence.data.accessMode | quote }} + - {{ $p.accessMode | quote }} resources: requests: - storage: {{ .Values.parseable.persistence.data.size | quote }} - {{- if .Values.parseable.persistence.data.storageClass }} - storageClassName: "{{ .Values.parseable.persistence.data.storageClass }}" - {{- else }} - storageClassName: "" - {{- end }} + storage: {{ $p.size | quote }} + storageClassName: "{{ $p.storageClass }}" {{- end }} diff --git a/helm/templates/ingestor-service.yaml b/helm/templates/ingestor-service.yaml index ba3350744..b9efbee38 100644 --- a/helm/templates/ingestor-service.yaml +++ b/helm/templates/ingestor-service.yaml @@ -1,16 +1,17 @@ -{{- if eq .Values.parseable.highAvailability.enabled true }} +{{- if .Values.parseable.highAvailability.enabled }} +{{- $node := .Values.parseable.nodes.ingestor }} apiVersion: v1 kind: Service metadata: name: {{ include "parseable.fullname" . }}-ingestor-service namespace: {{ .Release.Namespace }} - labels: + labels: {{- include "parseable.labelsSelector" . | nindent 4 }} spec: - type: {{ $.Values.parseable.highAvailability.ingestor.service.type }} + type: {{ $node.service.type }} ports: - - port: {{ $.Values.parseable.highAvailability.ingestor.service.port }} - targetPort: {{ .Values.parseable.highAvailability.ingestor.port }} + - port: {{ $node.service.port }} + targetPort: {{ $node.port }} protocol: TCP selector: {{- include "parseable.ingestorLabelsSelector" . | nindent 4 }} diff --git a/helm/templates/ingestor-statefulset.yaml b/helm/templates/ingestor-statefulset.yaml index 73185cd2b..59113de16 100644 --- a/helm/templates/ingestor-statefulset.yaml +++ b/helm/templates/ingestor-statefulset.yaml @@ -1,4 +1,10 @@ -{{- if eq .Values.parseable.highAvailability.enabled true }} +{{- if .Values.parseable.highAvailability.enabled }} +{{- $common := .Values.parseable.common }} +{{- $node := .Values.parseable.nodes.ingestor }} +{{- $secret := .Values.parseable.secrets }} +{{- $cred := .Values.parseable.credentialFile }} +{{- $audit := .Values.parseable.auditLogging }} +{{- $env := merge (deepCopy ($node.env | default dict)) ($common.env | default dict) }} apiVersion: v1 kind: Service metadata: @@ -18,29 +24,46 @@ metadata: name: {{ include "parseable.fullname" . }}-ingestor namespace: {{ .Release.Namespace }} labels: - {{- with .Values.parseable.highAvailability.ingestor.extraLabels }} - {{- toYaml . | nindent 4 }} - {{- end }} + {{- include "parseable.ingestorLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "parseable.ingestorLabelsSelector" . | nindent 6 }} serviceName: {{ include "parseable.fullname" . }}-ingestor-headless - replicas: {{ .Values.parseable.highAvailability.ingestor.count }} + replicas: {{ $node.count }} minReadySeconds: 2 template: metadata: + {{- with ($node.podAnnotations | default $common.podAnnotations) }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} labels: - {{- .Values.parseable.highAvailability.ingestor.labels | toYaml | nindent 8 }} + {{- with ($node.podLabels | default $common.podLabels) }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- include "parseable.ingestorLabelsSelector" . | nindent 8 }} spec: - {{- with .Values.parseable.highAvailability.ingestor.affinity }} + terminationGracePeriodSeconds: 10 + serviceAccountName: {{ include "parseable.serviceAccountName" . }} + securityContext: + {{- toYaml $common.podSecurityContext | nindent 8 }} + {{- with ($node.nodeSelector | default $common.nodeSelector) }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with ($node.tolerations | default $common.tolerations) }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with ($node.affinity | default $common.affinity) }} affinity: {{- toYaml . | nindent 8 }} {{- end }} + # ingestors register against the querier, so wait for it to be ready first initContainers: - name: wait-for-query-service - image: curlimages/curl:latest # Lightweight image with curl + image: curlimages/curl:latest command: - /bin/sh - -c @@ -56,136 +79,88 @@ spec: done echo "Query service did not become ready in time. Exiting." exit 1 - terminationGracePeriodSeconds: 10 - serviceAccountName: {{ include "parseable.serviceAccountName" . }} - {{- with .Values.parseable.highAvailability.ingestor.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.parseable.highAvailability.ingestor.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} + {{- if $cred.enabled }} volumes: - - name: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} + - name: {{ $cred.secretName }} secret: - secretName: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} + secretName: {{ $cred.secretName }} {{- end }} containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.parseable.securityContext | nindent 10 }} - image: {{ .Values.parseable.image.repository }}:{{ .Values.parseable.image.tag | default .Chart.AppVersion }} - imagePullPolicy: {{ .Values.parseable.image.pullPolicy }} - args: - - /usr/bin/parseable - - {{ .Values.parseable.store | quote }} - - --ingestor-endpoint=$(HOSTNAME).{{ include "parseable.fullname" . }}-ingestor-headless.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.parseable.highAvailability.ingestor.port }} - env: - - name: HOSTNAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - {{- range $key, $value := .Values.parseable.highAvailability.ingestor.env }} - - name: {{ $key }} - value: {{ tpl $value $ | quote }} - {{- end }} - - {{- if .Values.parseable.auditLogging.enabled }} - - name: P_AUDIT_LOGGER - value: {{ .Values.parseable.auditLogging.p_server | quote }} - - name: P_AUDIT_USERNAME - value: {{ .Values.parseable.auditLogging.p_username | quote }} - - name: P_AUDIT_PASSWORD - value: {{ .Values.parseable.auditLogging.p_password | quote }} - {{- end }} - - {{- if and .Values.parseable.s3ModeSecret .Values.parseable.s3ModeSecret.enabled }} - {{- range $secret := .Values.parseable.s3ModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - name: GOOGLE_APPLICATION_CREDENTIALS - value: {{ .Values.parseable.gcsModeSecret.auth.mount_path }}/{{ .Values.parseable.gcsModeSecret.auth.secret_key }} - {{- range $secret := .Values.parseable.gcsModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - - {{- if and .Values.parseable.blobModeSecret .Values.parseable.blobModeSecret.enabled }} - {{- range $secret := .Values.parseable.blobModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml $common.securityContext | nindent 12 }} + image: "{{ .Values.parseable.image.repository }}:{{ .Values.parseable.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.parseable.image.pullPolicy }} + args: + - "/usr/bin/parseable" + - {{ .Values.parseable.store | quote }} + - --ingestor-endpoint=$(HOSTNAME).{{ include "parseable.fullname" . }}-ingestor-headless.{{ .Release.Namespace }}.svc.cluster.local:{{ $node.port }} + env: + - name: HOSTNAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: P_MODE + value: "ingest" + # common.env merged with nodes.ingestor.env (node wins) + {{- range $key, $value := $env }} + - name: {{ $key }} + value: {{ tpl $value $ | quote }} + {{- end }} + # credentials from the secret in .Values.parseable.secrets + {{- if and $secret $secret.name $secret.keys }} + {{- $prefix := $secret.prefix | default "" | upper }} + {{- range $key := $secret.keys }} + - name: {{ $prefix }}{{ $key | upper | replace "." "_" | replace "-" "_" }} + valueFrom: + secretKeyRef: + name: {{ $secret.name }} + key: {{ $key }} + {{- end }} + {{- end }} + {{- if $cred.enabled }} + - name: GOOGLE_APPLICATION_CREDENTIALS + value: "{{ $cred.mountPath }}/{{ $cred.secretKey }}" + {{- end }} + {{- if $audit.enabled }} + - name: P_AUDIT_LOGGER + value: {{ $audit.p_server | quote }} + - name: P_AUDIT_USERNAME + value: {{ $audit.p_username | quote }} + - name: P_AUDIT_PASSWORD + value: {{ $audit.p_password | quote }} + {{- end }} + ports: + - containerPort: {{ $node.port }} + {{- with ($node.readinessProbe | default $common.readinessProbe) }} + readinessProbe: + {{- toYaml . | nindent 12 }} {{- end }} + resources: + {{- toYaml ($node.resources | default $common.resources) | nindent 12 }} + {{- if or $node.persistence.enabled $cred.enabled }} + volumeMounts: + {{- if $node.persistence.enabled }} + - name: stage-volume + mountPath: "/parseable/staging" + {{- end }} + {{- if $cred.enabled }} + - name: {{ $cred.secretName }} + mountPath: {{ $cred.mountPath }} + readOnly: true + {{- end }} {{- end }} - - - name: P_MODE - value: "ingest" - - {{- if .Values.parseable.kafkaConnector.enabled }} - {{- range $key, $value := .Values.parseable.kafkaConnector.env }} - - name: {{ $key }} - value: {{ tpl $value $ | quote }} - {{- end }} - {{- end }} - - ports: - - containerPort: {{ .Values.parseable.highAvailability.ingestor.port }} - {{- with .Values.readinessProbe }} - readinessProbe: - {{- toYaml . | nindent 10 }} - {{- end }} - resources: - {{- toYaml .Values.parseable.highAvailability.ingestor.resources | nindent 10 }} - {{- if or .Values.parseable.persistence.ingestor.enabled (and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled) }} - volumeMounts: - {{- if .Values.parseable.persistence.ingestor.enabled }} - - mountPath: "/parseable/staging" - name: stage-volume - {{- end }} - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - mountPath: {{ .Values.parseable.gcsModeSecret.auth.mount_path }} - name: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} - readOnly: true - {{- end }} - {{- end }} - {{- if .Values.parseable.persistence.ingestor.enabled }} + {{- if $node.persistence.enabled }} volumeClaimTemplates: - - metadata: - name: stage-volume - spec: - accessModes: - - {{ .Values.parseable.persistence.ingestor.accessMode | quote }} - storageClassName: {{ .Values.parseable.persistence.ingestor.storageClass | quote }} - resources: - requests: - storage: {{ .Values.parseable.persistence.ingestor.size | quote }} + - metadata: + name: stage-volume + spec: + accessModes: + - {{ $node.persistence.accessMode | quote }} + storageClassName: {{ $node.persistence.storageClass | quote }} + resources: + requests: + storage: {{ $node.persistence.size | quote }} {{- end }} {{- end }} diff --git a/helm/templates/logstream-configmap.yaml b/helm/templates/logstream-configmap.yaml deleted file mode 100644 index c3cda479b..000000000 --- a/helm/templates/logstream-configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if not (empty .Values.parseable.logstream) }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ include "parseable.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "parseable.labels" . | nindent 4 }} -data: - config-logstream: |- - {{- include (print $.Template.BasePath "/_helpers_config_logstream.txt") . | nindent 4 }} -{{- end }} diff --git a/helm/templates/logstream-job.yaml b/helm/templates/logstream-job.yaml deleted file mode 100644 index 5f77aeedd..000000000 --- a/helm/templates/logstream-job.yaml +++ /dev/null @@ -1,65 +0,0 @@ -{{- if not (empty .Values.parseable.logstream) }} -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "parseable.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "parseable.labels" . | nindent 4 }} -spec: - template: - metadata: - {{- with .Values.parseable.podAnnotations }} - annotations: - "helm.sh/hook": post-install,post-upgrade - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "parseable.labelsSelector" . | nindent 8 }} - spec: - restartPolicy: OnFailure - securityContext: - {{- toYaml .Values.parseable.podSecurityContext | nindent 8 }} - volumes: - - name: parseable-init - projected: - sources: - - configMap: - name: {{ include "parseable.fullname" . }} - containers: - - name: config-logstream - volumeMounts: - - name: parseable-init - mountPath: /config - securityContext: - {{- toYaml .Values.parseable.securityContext | nindent 12 }} - env: - {{- if .Values.parseable.local }} - {{- range $secret := .Values.parseable.localModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- else}} - {{- range $secret := .Values.parseable.s3ModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - image: curlimages/curl:8.00.0 - command: [ "/bin/sh", "/config/config-logstream" ] - backoffLimit: 20 -{{- end}} diff --git a/helm/templates/querier-service.yaml b/helm/templates/querier-service.yaml index 4f06760d0..537eb4825 100644 --- a/helm/templates/querier-service.yaml +++ b/helm/templates/querier-service.yaml @@ -1,15 +1,16 @@ -{{- if eq .Values.parseable.highAvailability.enabled true }} +{{- if .Values.parseable.highAvailability.enabled }} +{{- $svc := .Values.parseable.nodes.query.service }} apiVersion: v1 kind: Service metadata: name: {{ include "parseable.fullname" . }}-querier-service namespace: {{ .Release.Namespace }} - labels: + labels: {{- include "parseable.labelsSelector" . | nindent 4 }} spec: - type: {{ $.Values.parseable.service.type }} + type: {{ $svc.type }} ports: - - port: {{ $.Values.parseable.service.port }} + - port: {{ $svc.port }} targetPort: 8000 protocol: TCP selector: diff --git a/helm/templates/querier-statefulset.yaml b/helm/templates/querier-statefulset.yaml index de1f28298..b59f6cb53 100644 --- a/helm/templates/querier-statefulset.yaml +++ b/helm/templates/querier-statefulset.yaml @@ -1,4 +1,10 @@ {{- if .Values.parseable.highAvailability.enabled }} +{{- $common := .Values.parseable.common }} +{{- $node := .Values.parseable.nodes.query }} +{{- $secret := .Values.parseable.secrets }} +{{- $cred := .Values.parseable.credentialFile }} +{{- $audit := .Values.parseable.auditLogging }} +{{- $env := merge (deepCopy ($node.env | default dict)) ($common.env | default dict) }} apiVersion: v1 kind: Service metadata: @@ -24,189 +30,123 @@ spec: matchLabels: {{- include "parseable.querierLabelsSelector" . | nindent 6 }} serviceName: {{ include "parseable.fullname" . }}-querier-headless - ## TODO: this will change as we scale queriers replicas: 1 minReadySeconds: 2 template: metadata: - {{- with .Values.parseable.podAnnotations }} + {{- with ($node.podAnnotations | default $common.podAnnotations) }} annotations: {{- toYaml . | nindent 8 }} {{- end }} labels: - {{- .Values.parseable.podLabels | toYaml | nindent 8 }} + {{- with ($node.podLabels | default $common.podLabels) }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- include "parseable.querierLabelsSelector" . | nindent 8 }} spec: terminationGracePeriodSeconds: 10 serviceAccountName: {{ include "parseable.serviceAccountName" . }} - {{- with .Values.parseable.toleration }} + securityContext: + {{- toYaml $common.podSecurityContext | nindent 8 }} + {{- with ($node.nodeSelector | default $common.nodeSelector) }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with ($node.tolerations | default $common.tolerations) }} tolerations: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.parseable.nodeSelector }} - nodeSelector: + {{- with ($node.affinity | default $common.affinity) }} + affinity: {{- toYaml . | nindent 8 }} {{- end }} - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} volumes: - - name: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} + {{- if $cred.enabled }} + - name: {{ $cred.secretName }} secret: - secretName: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} - - name: stage-volume - emptyDir: {} - {{- else }} - volumes: + secretName: {{ $cred.secretName }} + {{- end }} - name: stage-volume emptyDir: {} - {{- end }} containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.parseable.securityContext | nindent 10 }} - image: {{ .Values.parseable.image.repository }}:{{ .Values.parseable.image.tag | default .Chart.AppVersion }} - imagePullPolicy: {{ .Values.parseable.image.pullPolicy }} - args: - - "/usr/bin/parseable" - - {{ .Values.parseable.store | quote }} - env: - - name: HOSTNAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - - name: P_MODE - value: "query" - {{- if .Values.parseable.persistence.querier.enabled }} - - name: P_HOT_TIER_DIR - value: "/parseable/hot-tier" - - name: P_MAX_DISK_USAGE_PERCENT - value: "95.0" - {{- end }} - {{- range $key, $value := .Values.parseable.env }} - - name: {{ $key }} - value: {{ tpl $value $ | quote }} - {{- end }} - - {{- if .Values.parseable.auditLogging.enabled }} - - name: P_AUDIT_LOGGER - value: {{ .Values.parseable.auditLogging.p_server | quote }} - - name: P_AUDIT_USERNAME - value: {{ .Values.parseable.auditLogging.p_username | quote }} - - name: P_AUDIT_PASSWORD - value: {{ .Values.parseable.auditLogging.p_password | quote }} - {{- end }} - - {{- if and .Values.parseable.s3ModeSecret .Values.parseable.s3ModeSecret.enabled }} - {{- range $secret := .Values.parseable.s3ModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - name: GOOGLE_APPLICATION_CREDENTIALS - value: {{ .Values.parseable.gcsModeSecret.auth.mount_path }}/{{ .Values.parseable.gcsModeSecret.auth.secret_key }} - {{- range $secret := .Values.parseable.gcsModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml $common.securityContext | nindent 12 }} + image: "{{ .Values.parseable.image.repository }}:{{ .Values.parseable.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.parseable.image.pullPolicy }} + args: [ "/usr/bin/parseable", {{ .Values.parseable.store | quote }} ] + env: + - name: HOSTNAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: P_MODE + value: "query" + {{- if $node.persistence.enabled }} + - name: P_HOT_TIER_DIR + value: "/parseable/hot-tier" + - name: P_MAX_DISK_USAGE_PERCENT + value: "95.0" + {{- end }} + # common.env merged with nodes.query.env (node wins) + {{- range $key, $value := $env }} + - name: {{ $key }} + value: {{ tpl $value $ | quote }} + {{- end }} + # credentials from the secret in .Values.parseable.secrets + {{- if and $secret $secret.name $secret.keys }} + {{- $prefix := $secret.prefix | default "" | upper }} + {{- range $key := $secret.keys }} + - name: {{ $prefix }}{{ $key | upper | replace "." "_" | replace "-" "_" }} + valueFrom: + secretKeyRef: + name: {{ $secret.name }} + key: {{ $key }} + {{- end }} + {{- end }} + {{- if $cred.enabled }} + - name: GOOGLE_APPLICATION_CREDENTIALS + value: "{{ $cred.mountPath }}/{{ $cred.secretKey }}" + {{- end }} + {{- if $audit.enabled }} + - name: P_AUDIT_LOGGER + value: {{ $audit.p_server | quote }} + - name: P_AUDIT_USERNAME + value: {{ $audit.p_username | quote }} + - name: P_AUDIT_PASSWORD + value: {{ $audit.p_password | quote }} + {{- end }} + ports: + - containerPort: 8000 + {{- with ($node.readinessProbe | default $common.readinessProbe) }} + readinessProbe: + {{- toYaml . | nindent 12 }} {{- end }} - {{- end }} - - {{- if and .Values.parseable.blobModeSecret .Values.parseable.blobModeSecret.enabled }} - {{- range $secret := .Values.parseable.blobModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - - ports: - - containerPort: 8000 - {{- with .Values.parseable.readinessProbe }} - readinessProbe: - {{- toYaml . | nindent 10 }} - {{- end }} - resources: - {{- toYaml .Values.parseable.resources | nindent 10 }} - volumeMounts: - - mountPath: "/parseable/staging" - name: stage-volume - {{- if .Values.parseable.persistence.querier.enabled }} - - mountPath: "/parseable/hot-tier" - name: hot-tier-volume - {{- end }} - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - mountPath: {{ .Values.parseable.gcsModeSecret.auth.mount_path }} - name: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} - readOnly: true - {{- end }} - {{- if .Values.parseable.sidecar.enabled }} - - name: {{ .Chart.Name }}-sidecar - securityContext: - {{- toYaml .Values.parseable.securityContext | nindent 10 }} - image: {{ .Values.parseable.sidecar.image.repository }}:{{ .Values.parseable.sidecar.image.tag }} - imagePullPolicy: {{ .Values.parseable.sidecar.image.pullPolicy }} - command: {{ .Values.parseable.sidecar.command }} - args: {{ .Values.parseable.sidecar.args }} - env: - {{- range $key, $value := .Values.parseable.sidecar.env }} - - name: {{ $key }} - value: {{ tpl $value $ | quote }} - {{- end }} - ports: - - containerPort: {{ .Values.parseable.sidecar.ports }} - resources: - {{- toYaml .Values.parseable.sidecar.resources | nindent 10 }} - volumeMounts: - {{- .Values.parseable.sidecar.volumeMounts | toYaml | nindent 10 }} - {{- end }} - {{- if .Values.parseable.persistence.querier.enabled }} - volumeClaimTemplates: - - metadata: - name: hot-tier-volume - spec: - accessModes: - - {{ .Values.parseable.persistence.querier.accessMode | quote }} - storageClassName: {{ .Values.parseable.persistence.querier.storageClass | quote }} - resources: - requests: - storage: {{ .Values.parseable.persistence.querier.size | quote }} - - metadata: - name: stage-volume - spec: - accessModes: - - {{ .Values.parseable.persistence.querier.accessMode | quote }} - storageClassName: {{ .Values.parseable.persistence.querier.storageClass | quote }} - resources: - requests: - storage: 5Gi - {{- if .Values.parseable.sidecar.enabled }} - {{- .Values.parseable.sidecar.volumeClaimTemplates | toYaml | nindent 2 }} - {{- end }} - {{- else }} - {{- if .Values.parseable.sidecar.enabled }} + resources: + {{- toYaml ($node.resources | default $common.resources) | nindent 12 }} + volumeMounts: + - name: stage-volume + mountPath: "/parseable/staging" + {{- if $node.persistence.enabled }} + - name: hot-tier-volume + mountPath: "/parseable/hot-tier" + {{- end }} + {{- if $cred.enabled }} + - name: {{ $cred.secretName }} + mountPath: {{ $cred.mountPath }} + readOnly: true + {{- end }} + {{- if $node.persistence.enabled }} volumeClaimTemplates: - {{- .Values.parseable.sidecar.volumeClaimTemplates | toYaml | nindent 2 }} - {{- end }} + - metadata: + name: hot-tier-volume + spec: + accessModes: + - {{ $node.persistence.accessMode | quote }} + storageClassName: {{ $node.persistence.storageClass | quote }} + resources: + requests: + storage: {{ $node.persistence.size | quote }} {{- end }} {{- end }} diff --git a/helm/templates/service-monitor.yaml b/helm/templates/service-monitor.yaml deleted file mode 100644 index 0750ab4ec..000000000 --- a/helm/templates/service-monitor.yaml +++ /dev/null @@ -1,69 +0,0 @@ -{{- if .Values.parseable.metrics.serviceMonitor.enabled }} -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - name: {{ include "parseable.fullname" . }} - namespace: {{ default .Release.Namespace .Values.parseable.metrics.serviceMonitor.namespace | quote }} - labels: - {{- with .Values.parseable.metrics.serviceMonitor.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} - {{- include "parseable.labels" . | nindent 4 }} -spec: - {{ if .Values.parseable.metrics.serviceMonitor.spec.jobLabel }} - jobLabel: {{ .Values.parseable.metrics.serviceMonitor.spec.jobLabel | quote }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.targetLabels }} - targetLabels: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.targetLabels | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.podTargetLabels }} - podTargetLabels: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.podTargetLabels | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.endpoints }} - endpoints: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.endpoints | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.selector }} - selector: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.selector | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.namespaceSelector }} - namespaceSelector: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.namespaceSelector | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.sampleLimit }} - sampleLimit: {{ .Values.parseable.metrics.serviceMonitor.spec.sampleLimit }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.scrapeProtocols }} - scrapeProtocols: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.scrapeProtocols | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.targetLimit }} - targetLimit: {{ .Values.parseable.metrics.serviceMonitor.spec.targetLimit }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.labelLimit }} - labelLimit: {{ .Values.parseable.metrics.serviceMonitor.spec.labelLimit }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.labelNameLengthLimit }} - labelNameLengthLimit: {{ .Values.parseable.metrics.serviceMonitor.spec.labelNameLengthLimit }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.labelValueLengthLimit }} - labelValueLengthLimit: {{ .Values.parseable.metrics.serviceMonitor.spec.labelValueLengthLimit }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.keepDroppedTargets }} - keepDroppedTargets: {{ .Values.parseable.metrics.serviceMonitor.spec.keepDroppedTargets }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.attachMetadata }} - attachMetadata: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.attachMetadata | nindent 4 }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.scrapeClass }} - scrapeClass: {{ .Values.parseable.metrics.serviceMonitor.spec.scrapeClass | quote }} - {{- end }} - {{ if .Values.parseable.metrics.serviceMonitor.spec.bodySizeLimit }} - bodySizeLimit: - {{- toYaml .Values.parseable.metrics.serviceMonitor.spec.bodySizeLimit | nindent 4 }} - {{- end }} -{{- end }} diff --git a/helm/templates/stage-pvc.yaml b/helm/templates/stage-pvc.yaml index 7940af5a4..f4de56b72 100644 --- a/helm/templates/stage-pvc.yaml +++ b/helm/templates/stage-pvc.yaml @@ -1,4 +1,5 @@ -{{- if .Values.parseable.persistence.staging.enabled }} +{{- $p := .Values.parseable.nodes.standalone.persistence.staging }} +{{- if and (not .Values.parseable.highAvailability.enabled) $p.enabled }} apiVersion: v1 kind: PersistentVolumeClaim metadata: @@ -7,13 +8,9 @@ metadata: {{- include "parseable.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.parseable.persistence.staging.accessMode | quote }} + - {{ $p.accessMode | quote }} resources: requests: - storage: {{ .Values.parseable.persistence.staging.size | quote }} - {{- if .Values.parseable.persistence.staging.storageClass }} - storageClassName: "{{ .Values.parseable.persistence.staging.storageClass }}" - {{- else }} - storageClassName: "" - {{- end }} + storage: {{ $p.size | quote }} + storageClassName: "{{ $p.storageClass }}" {{- end }} diff --git a/helm/templates/standalone-deployment.yaml b/helm/templates/standalone-deployment.yaml index e009094c1..4bdfa6527 100644 --- a/helm/templates/standalone-deployment.yaml +++ b/helm/templates/standalone-deployment.yaml @@ -1,4 +1,10 @@ -{{- if eq .Values.parseable.highAvailability.enabled false }} +{{- if not .Values.parseable.highAvailability.enabled }} +{{- $common := .Values.parseable.common }} +{{- $node := .Values.parseable.nodes.standalone }} +{{- $secret := .Values.parseable.secrets }} +{{- $cred := .Values.parseable.credentialFile }} +{{- $audit := .Values.parseable.auditLogging }} +{{- $env := merge (deepCopy ($node.env | default dict)) ($common.env | default dict) }} apiVersion: apps/v1 kind: Deployment metadata: @@ -13,12 +19,14 @@ spec: {{- include "parseable.labelsSelector" . | nindent 6 }} template: metadata: - {{- with .Values.parseable.podAnnotations }} + {{- with ($node.podAnnotations | default $common.podAnnotations) }} annotations: {{- toYaml . | nindent 8 }} {{- end }} labels: - {{- .Values.parseable.podLabels | toYaml | nindent 8 }} + {{- with ($node.podLabels | default $common.podLabels) }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- include "parseable.labelsSelector" . | nindent 8 }} spec: {{- with .Values.parseable.imagePullSecrets }} @@ -27,149 +35,97 @@ spec: {{- end }} serviceAccountName: {{ include "parseable.serviceAccountName" . }} securityContext: - {{- toYaml .Values.parseable.podSecurityContext | nindent 8 }} + {{- toYaml $common.podSecurityContext | nindent 8 }} containers: - name: {{ .Chart.Name }} securityContext: - {{- toYaml .Values.parseable.securityContext | nindent 12 }} + {{- toYaml $common.securityContext | nindent 12 }} image: "{{ .Values.parseable.image.repository }}:{{ .Values.parseable.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.parseable.image.pullPolicy }} - # Uncomment to debug - # command: [ "/bin/sh", "-c", "sleep 1000000" ] - args: [ "/usr/bin/parseable", {{ .Values.parseable.store | quote }}] + args: [ "/usr/bin/parseable", {{ .Values.parseable.store | quote }} ] env: - name: HOSTNAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - {{- range $key, $value := .Values.parseable.env }} + # common.env merged with nodes.standalone.env (node wins) + {{- range $key, $value := $env }} - name: {{ $key }} value: {{ tpl $value $ | quote }} {{- end }} - {{- if and .Values.parseable.localModeSecret .Values.parseable.localModeSecret.enabled }} - {{- range $secret := .Values.parseable.localModeSecret.secrets }} + # credentials from the secret in .Values.parseable.secrets + {{- if and $secret $secret.name $secret.keys }} + {{- $prefix := $secret.prefix | default "" | upper }} {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} + - name: {{ $prefix }}{{ $key | upper | replace "." "_" | replace "-" "_" }} valueFrom: secretKeyRef: name: {{ $secret.name }} key: {{ $key }} {{- end }} {{- end }} + {{- if $cred.enabled }} + - name: GOOGLE_APPLICATION_CREDENTIALS + value: "{{ $cred.mountPath }}/{{ $cred.secretKey }}" {{- end }} - - {{- if .Values.parseable.auditLogging.enabled }} + {{- if $audit.enabled }} - name: P_AUDIT_LOGGER - value: {{ .Values.parseable.auditLogging.p_server | quote }} + value: {{ $audit.p_server | quote }} - name: P_AUDIT_USERNAME - value: {{ .Values.parseable.auditLogging.p_username | quote }} + value: {{ $audit.p_username | quote }} - name: P_AUDIT_PASSWORD - value: {{ .Values.parseable.auditLogging.p_password | quote }} - {{- end }} - - {{- if .Values.parseable.kafkaConnector.enabled }} - {{- range $key, $value := .Values.parseable.kafkaConnector.env }} - - name: {{ $key }} - value: {{ tpl $value $ | quote }} - {{- end }} - {{- end }} - - {{- if and .Values.parseable.s3ModeSecret .Values.parseable.s3ModeSecret.enabled }} - {{- range $secret := .Values.parseable.s3ModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} + value: {{ $audit.p_password | quote }} {{- end }} - - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - name: GOOGLE_APPLICATION_CREDENTIALS - value: {{ .Values.parseable.gcsModeSecret.auth.mount_path }} - {{- range $secret := .Values.parseable.gcsModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - - {{- if and .Values.parseable.blobModeSecret .Values.parseable.blobModeSecret.enabled }} - {{- range $secret := .Values.parseable.blobModeSecret.secrets }} - {{- range $key := $secret.keys }} - {{- $envPrefix := $secret.prefix | default "" | upper }} - {{- $envKey := $key | upper | replace "." "_" | replace "-" "_" }} - - name: {{ $envPrefix }}{{ $envKey }} - valueFrom: - secretKeyRef: - name: {{ $secret.name }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - ports: - containerPort: 8000 - {{- with .Values.readinessProbe }} + {{- with ($node.readinessProbe | default $common.readinessProbe) }} readinessProbe: {{- toYaml . | nindent 12 }} {{- end }} resources: - {{- toYaml .Values.parseable.resources | nindent 12 }} + {{- toYaml ($node.resources | default $common.resources) | nindent 12 }} volumeMounts: - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - mountPath: {{ .Values.parseable.gcsModeSecret.auth.mount_path }} - name: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} - readOnly: true - {{- end }} - - mountPath: "/parseable/data" - name: data-volume - - mountPath: "/parseable/staging" - name: stage-volume + {{- if $cred.enabled }} + - name: {{ $cred.secretName }} + mountPath: {{ $cred.mountPath }} + readOnly: true + {{- end }} + - name: data-volume + mountPath: "/parseable/data" + - name: stage-volume + mountPath: "/parseable/staging" volumes: - {{- if and .Values.parseable.gcsModeSecret .Values.parseable.gcsModeSecret.enabled }} - - name: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} + {{- if $cred.enabled }} + - name: {{ $cred.secretName }} secret: - secretName: {{ .Values.parseable.gcsModeSecret.auth.secret_name }} - {{- end }} - {{- if .Values.parseable.persistence.staging.enabled }} - - name: stage-volume - persistentVolumeClaim: - claimName: {{ include "parseable.fullname" . }}-staging-pvc - {{- else }} - - name: stage-volume - emptyDir: {} - {{- end }} - {{- if .Values.parseable.persistence.data.enabled }} - - name: data-volume - persistentVolumeClaim: - claimName: {{ include "parseable.fullname" . }}-data-pvc - {{- else }} - - name: data-volume - emptyDir: {} - {{- end }} - {{- with .Values.parseable.nodeSelector }} + secretName: {{ $cred.secretName }} + {{- end }} + {{- if $node.persistence.staging.enabled }} + - name: stage-volume + persistentVolumeClaim: + claimName: {{ include "parseable.fullname" . }}-staging-pvc + {{- else }} + - name: stage-volume + emptyDir: {} + {{- end }} + {{- if $node.persistence.data.enabled }} + - name: data-volume + persistentVolumeClaim: + claimName: {{ include "parseable.fullname" . }}-data-pvc + {{- else }} + - name: data-volume + emptyDir: {} + {{- end }} + {{- with ($node.nodeSelector | default $common.nodeSelector) }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.parseable.tolerations }} + {{- with ($node.tolerations | default $common.tolerations) }} tolerations: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.parseable.affinity }} + {{- with ($node.affinity | default $common.affinity) }} affinity: {{- toYaml . | nindent 8 }} {{- end }} diff --git a/helm/templates/standalone-service.yaml b/helm/templates/standalone-service.yaml index 08ed2943d..6484f9cb9 100644 --- a/helm/templates/standalone-service.yaml +++ b/helm/templates/standalone-service.yaml @@ -1,15 +1,16 @@ -{{- if eq .Values.parseable.highAvailability.enabled false }} +{{- if not .Values.parseable.highAvailability.enabled }} +{{- $svc := .Values.parseable.nodes.standalone.service }} apiVersion: v1 kind: Service metadata: name: {{ include "parseable.fullname" . }} namespace: {{ .Release.Namespace }} - labels: + labels: {{- include "parseable.labelsSelector" . | nindent 4 }} spec: - type: {{ $.Values.parseable.service.type }} + type: {{ $svc.type }} ports: - - port: {{ $.Values.parseable.service.port }} + - port: {{ $svc.port }} targetPort: 8000 protocol: TCP selector: diff --git a/helm/values-aws.yaml b/helm/values-aws.yaml new file mode 100644 index 000000000..d7dd2a882 --- /dev/null +++ b/helm/values-aws.yaml @@ -0,0 +1,33 @@ +# Parseable on AWS (S3), distributed mode +parseable: + store: s3-store + highAvailability: + enabled: true + + secrets: + name: parseable-env-secret + prefix: P_ + keys: + - addr + - username + - password + - staging.dir + - fs.dir + - s3.url + - s3.access.key + - s3.secret.key + - s3.bucket + - s3.region + + nodes: + query: + persistence: + enabled: true + storageClass: gp3 + size: 100Gi + ingestor: + count: 3 + persistence: + enabled: true + storageClass: gp3 + size: 5Gi diff --git a/helm/values-azure.yaml b/helm/values-azure.yaml new file mode 100644 index 000000000..6299d51bd --- /dev/null +++ b/helm/values-azure.yaml @@ -0,0 +1,32 @@ +# Parseable on Azure (Blob), distributed mode +parseable: + store: blob-store + highAvailability: + enabled: true + + secrets: + name: parseable-env-secret + prefix: P_ + keys: + - addr + - username + - password + - staging.dir + - fs.dir + - azr.access_key + - azr.account + - azr.container + - azr.url + + nodes: + query: + persistence: + enabled: true + storageClass: managed-csi + size: 100Gi + ingestor: + count: 3 + persistence: + enabled: true + storageClass: managed-csi + size: 5Gi diff --git a/helm/values-gcp.yaml b/helm/values-gcp.yaml new file mode 100644 index 000000000..5d2fb94c1 --- /dev/null +++ b/helm/values-gcp.yaml @@ -0,0 +1,37 @@ +# Parseable on GCP (GCS), distributed mode +parseable: + store: gcs-store + highAvailability: + enabled: true + + secrets: + name: parseable-env-secret + prefix: P_ + keys: + - addr + - username + - password + - staging.dir + - fs.dir + - gcs.url + - gcs.bucket + + # GCS service-account key mounted from the same secret (key.json) + credentialFile: + enabled: true + secretName: parseable-env-secret + secretKey: key.json + mountPath: /var/secrets/google + + nodes: + query: + persistence: + enabled: true + storageClass: standard-rwo + size: 100Gi + ingestor: + count: 3 + persistence: + enabled: true + storageClass: standard-rwo + size: 5Gi diff --git a/helm/values.yaml b/helm/values.yaml index 7448d93a1..b9ecf7b07 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -3,196 +3,51 @@ parseable: repository: quay.io/parseablehq/parseable tag: "v2.8.0" pullPolicy: Always - ## object store can be local-store, s3-store, blob-store or gcs-store. + imagePullSecrets: [] + + # local-store, s3-store, blob-store or gcs-store store: local-store - ## Set to true if you want to deploy Parseable in a HA mode (multiple ingestors + hot tier) - ## Please note that highAvailability is not supported in local mode - highAvailability: - enabled: true - ingestor: - affinity: {} - # podAntiAffinity: - # requiredDuringSchedulingIgnoredDuringExecution: - # - labelSelector: - # matchLabels: - # app: parseable - # component: ingestor - # topologyKey: kubernetes.io/hostname - port: 8000 - extraLabels: - app: parseable - podAnnotations: {} - nodeSelector: {} - tolerations: [] - labels: - app: parseable - component: ingestor - count: 3 - env: - RUST_LOG: warn - ## Use this endpoint to send events to ingestors - ## Console (UI) is available on the other service (that points to the query pod) - service: - type: ClusterIP - port: 80 - readinessProbe: - httpGet: - path: /api/v1/readiness - port: 8000 - resources: - limits: - cpu: 500m - memory: 4Gi - requests: - cpu: 250m - memory: 1Gi - ## Add environment variables to the Parseable Deployment - env: - RUST_LOG: warn - ## Enable to create a log stream and then add retention configuration - ## for that log stream - # logstream: - # - name: "vectordemo" - # retention: - # action: "delete" - # duration: "30d" - # - name: "fluentbitdemo" - # retention: - # action: "delete" - # duration: "30d" - ## enable persistence using PVC for the Data and Staging directories - ## Note that Data directory is needed only for local mode - persistence: - staging: - enabled: true - storageClass: "" - accessMode: ReadWriteOnce - size: 5Gi - ingestor: - enabled: false - storageClass: "" - accessMode: ReadWriteOnce - size: 5Gi - data: - enabled: false - storageClass: "" - accessMode: ReadWriteOnce - size: 5Gi - ## enabling the disk on querier adds the hot-tier. - ## local-store is not supported on hot-tier. - querier: - enabled: false - storageClass: "" - accessMode: ReadWriteOnce - size: 100Gi - ## comment out the secrets depending upon deployment option - ## localModeSecret if store is set to local - ## blobModeSecret if store is set to blob-store - ## s3ModeSecret if store is set to s3-store - localModeSecret: - enabled: false - secrets: - - name: parseable-env-secret - prefix: P_ - keys: - - addr - - username - - password - - staging.dir - - fs.dir - blobModeSecret: - enabled: false - secrets: - - name: parseable-env-secret - prefix: P_ - keys: - - addr - - username - - password - - azr.access_key - - azr.account - - azr.container - - azr.url - s3ModeSecret: + # false = single Deployment; true = querier + ingestors (needs an object store) + highAvailability: enabled: false - secrets: - - name: parseable-env-secret - prefix: P_ - keys: - - addr - - username - - password - - staging.dir - - fs.dir - - s3.url - - s3.access.key - - s3.secret.key - - s3.bucket - - s3.region - gcsModeSecret: - enabled: true - auth: - secret_name: parseable-env-secret - secret_key: key.json - mount_path: /var/secrets/google - secrets: - - name: parseable-env-secret - prefix: P_ - keys: - - addr - - username - - password - - staging.dir - - fs.dir - - gcs.url - - gcs.bucket + serviceAccount: create: true name: "parseable" annotations: {} - nodeSelector: {} - service: - type: ClusterIP - port: 80 - readinessProbe: - httpGet: - path: /api/v1/readiness - port: 8000 - tolerations: [] - affinity: {} - resources: - limits: - cpu: 500m - memory: 4Gi - requests: - cpu: 250m - memory: 1Gi - ## works only when highAvailability is enabled - ## Set it to true if you want to deploy Parseable - ## Query node with a sidecar - sidecar: + + nameOverride: "" + fullnameOverride: "" + + # each key is set as an env var: prefix + upper-cased key, "." "-" -> "_" + secrets: + name: parseable-env-secret + prefix: P_ + keys: + - addr + - username + - password + - staging.dir + - fs.dir + + # file credential (e.g. GCS key.json); sets GOOGLE_APPLICATION_CREDENTIALS + credentialFile: enabled: false - image: - repository: busybox - tag: latest - pullPolicy: IfNotPresent - command: [] - args: [] + secretName: parseable-env-secret + secretKey: key.json + mountPath: /var/secrets/google + + auditLogging: + enabled: false + p_server: "" + p_username: "" + p_password: "" + + # defaults for every node; a node under nodes: can override any of these + common: env: RUST_LOG: warn - ports: 8000 - volumeMounts: - - name: test-volume - mountPath: /parseable/test - volumeClaimTemplates: - - metadata: - name: test-volume - spec: - accessModes: ["ReadWriteOnce"] - resources: - requests: - storage: 1Gi resources: limits: cpu: 500m @@ -200,367 +55,66 @@ parseable: requests: cpu: 250m memory: 1Gi - securityContext: - allowPrivilegeEscalation: false - podAnnotations: - prometheus.io/scrape: "true" - prometheus.io/port: "80" - prometheus.io/path: "/api/v1/metrics" - podSecurityContext: - runAsUser: 1000 - runAsGroup: 1000 - fsGroup: 1000 - fsGroupChangePolicy: "Always" - nameOverride: "" - fullnameOverride: "" - podLabels: - app: parseable - component: query - ## Use this section to create ServiceMonitor object for - ## this Parseable deployment. Read more on ServiceMonitor - ## here: https://prometheus-operator.dev/docs/api-reference/api/#monitoring.coreos.com/v1.ServiceMonitor - metrics: - serviceMonitor: - enabled: false - labels: {} - namespace: "" - spec: - jobLabel: "" - targetLabels: [] - podTargetLabels: [] - endpoints: [] - selector: {} - namespaceSelector: {} - sampleLimit: 0 - scrapeProtocols: [] - targetLimit: 0 - labelLimit: 0 - labelNameLengthLimit: 0 - labelValueLengthLimit: 0 - keepDroppedTargets: 0 - attachMetadata: {} - scrapeClass: "" - bodySizeLimit: {} - kafkaConnector: - enabled: false - env: - # General Kafka Configuration - P_KAFKA_BOOTSTRAP_SERVERS: "my-kafka.kafka.svc.cluster.local:9092" # Comma-separated list of Kafka bootstrap servers - P_KAFKA_PARTITION_LISTENER_CONCURRENCY: "2" # Number of parallel threads for Kafka partition listeners - P_KAFKA_CONSUMER_TOPICS: "test-log-stream-0,test-log-stream-1" - # P_KAFKA_CLIENT_ID: "parseable-connect" # Client ID for Kafka connection - # P_CONNECTOR_BAD_DATA_POLICY: "fail" # Default Policy for handling bad data - - # Consumer Configurations. These config are Default Parseable KafkaConnector configs. Change only if necessary. - # P_KAFKA_CONSUMER_GROUP_ID: "parseable-connect-cg" - # P_KAFKA_CONSUMER_BUFFER_SIZE: "10000" - # P_KAFKA_CONSUMER_BUFFER_TIMEOUT: "10000ms" - # P_KAFKA_CONSUMER_SESSION_TIMEOUT: "60000" - # P_KAFKA_CONSUMER_HEARTBEAT_INTERVAL: "3000" - # P_KAFKA_CONSUMER_PARTITION_STRATEGY: "roundrobin,range" - # P_KAFKA_CONSUMER_MAX_POLL_INTERVAL: "300000" - # P_KAFKA_CONSUMER_ENABLE_AUTO_OFFSET_STORE: "true" - # P_KAFKA_CONSUMER_AUTO_OFFSET_RESET: "earliest" - # P_KAFKA_CONSUMER_FETCH_MIN_BYTES: "1" - # P_KAFKA_CONSUMER_FETCH_MAX_BYTES: "52428800" - # P_KAFKA_CONSUMER_FETCH_MAX_WAIT: "500" - # P_KAFKA_CONSUMER_MAX_PARTITION_FETCH_BYTES: "1048576" - # P_KAFKA_CONSUMER_QUEUED_MIN_MESSAGES: "100000" - # P_KAFKA_CONSUMER_QUEUED_MAX_MESSAGES_KBYTES: "65536" - # P_KAFKA_CONSUMER_ENABLE_PARTITION_EOF: "false" - # P_KAFKA_CONSUMER_CHECK_CRCS: "false" - # P_KAFKA_CONSUMER_ISOLATION_LEVEL: "read_committed" - # P_KAFKA_CONSUMER_FETCH_MESSAGE_MAX_BYTES: "1048576" - # P_KAFKA_CONSUMER_STATS_INTERVAL: "10000" - - # Security Configuration Options - By Default PLAINTEXT - - # Option 1: SSL Encryption Only - # P_KAFKA_SECURITY_PROTOCOL: "SSL" - # P_KAFKA_SSL_CA_LOCATION: "/etc/ssl/certs/ca-certificates.crt" - # P_KAFKA_SSL_CERTIFICATE_LOCATION: "/etc/ssl/certs/client-cert.pem" - # P_KAFKA_SSL_KEY_LOCATION: "/etc/ssl/private/client-key.pem" - # P_KAFKA_SSL_KEY_PASSWORD: "my-key-password" # Optional: only if key is password protected - - # Option 2: SASL Authentication with SSL Encryption - # P_KAFKA_SECURITY_PROTOCOL: "SASL_SSL" - # P_KAFKA_SSL_CA_LOCATION: "/etc/ssl/certs/ca-certificates.crt" - # P_KAFKA_SASL_MECHANISM: "SCRAM-SHA-512" # Can also be PLAIN, SCRAM-SHA-256, or GSSAPI - # P_KAFKA_SASL_USERNAME: "kafka-user" - # P_KAFKA_SASL_PASSWORD: "kafka-password" - - # Option 3: SASL Authentication without Encryption - # P_KAFKA_SECURITY_PROTOCOL: "SASL_PLAINTEXT" - # P_KAFKA_SASL_MECHANISM: "PLAIN" # Can also be SCRAM-SHA-256, SCRAM-SHA-512, or GSSAPI - # P_KAFKA_SASL_USERNAME: "kafka-user" - # P_KAFKA_SASL_PASSWORD: "kafka-password" - - # Option 4: OAuth Bearer Token Authentication (Not supported yet) - # P_KAFKA_SECURITY_PROTOCOL: "SASL_SSL" - # P_KAFKA_SASL_MECHANISM: "OAUTHBEARER" - # P_KAFKA_OAUTH_TOKEN_ENDPOINT: "https://oauth.example.com/token" - # P_KAFKA_OAUTH_CLIENT_ID: "kafka-client" - # P_KAFKA_OAUTH_CLIENT_SECRET: "client-secret" - # P_KAFKA_OAUTH_SCOPE: "kafka-access" # Optional: only if required by OAuth provider - -## Default values for Vector -# See Vector helm documentation to learn more: -# https://vector.dev/docs/setup/installation/package-managers/helm/ -vector: - enabled: false - role: "Agent" - rollWorkload: true - image: - repository: timberio/vector - pullPolicy: IfNotPresent - pullSecrets: [] - tag: "" - sha: "" - replicas: 1 - podManagementPolicy: OrderedReady - podDisruptionBudget: - enabled: false - minAvailable: 1 - maxUnavailable: - rbac: - create: true - serviceAccount: - create: true - annotations: {} - name: - automountToken: true - podLabels: - vector.dev/exclude: "true" - args: - - --config-dir - - "/etc/vector/" - terminationGracePeriodSeconds: 60 - service: - enabled: true - type: "ClusterIP" - annotations: {} - topologyKeys: [] - ports: [] - externalTrafficPolicy: "" - loadBalancerIP: "" - ipFamilyPolicy: "" - ipFamilies: [] - serviceHeadless: - enabled: true - dnsPolicy: ClusterFirst - customConfig: - data_dir: /vector-data-dir - api: - enabled: true - address: 127.0.0.1:8686 - playground: false - sources: - kubernetes_logs: - type: kubernetes_logs - sinks: - parseable: - type: http - method: post - batch: - max_bytes: 10485760 - max_events: 1000 - timeout_secs: 10 - compression: gzip - inputs: - - kubernetes_logs - encoding: - codec: json - uri: "http://parseable.parseable.svc.cluster.local/api/v1/ingest" - auth: - strategy: basic - user: admin - password: admin - request: - headers: - X-P-Stream: vectordemo - healthcheck: + readinessProbe: + httpGet: + path: /api/v1/readiness + port: 8000 + securityContext: + allowPrivilegeEscalation: false + podSecurityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + fsGroupChangePolicy: "Always" + podAnnotations: + prometheus.io/scrape: "true" + prometheus.io/port: "80" + prometheus.io/path: "/api/v1/metrics" + podLabels: {} + nodeSelector: {} + tolerations: [] + affinity: {} + + # per-node overrides; env is merged with common (node wins), rest replaces + nodes: + standalone: + env: {} + service: + type: ClusterIP + port: 80 + persistence: + staging: enabled: true - path: "http://parseable.parseable.svc.cluster.local/api/v1/liveness" - port: 80 - -# Default values for fluent-bit. -# See fluent-bit helm documentation to learn more: -# https://github.com/fluent/helm-charts/tree/main/charts/fluent-bit -fluent-bit: - enabled: false - kind: DaemonSet - serverHost: parseable-ingestor-service.parseable.svc.cluster.local - serverUsername: admin - serverPassword: admin - serverStream: $NAMESPACE - excludeNamespaces: kube-system, default - replicaCount: 1 - image: - repository: parseable/fluent-bit - tag: "v2" - pullPolicy: Always - testFramework: - enabled: true - image: - repository: busybox - pullPolicy: Always - tag: latest - serviceAccount: - create: true - annotations: {} - name: - rbac: - create: true - nodeAccess: false - eventsAccess: true - dnsPolicy: ClusterFirst - service: - type: ClusterIP - port: 2020 - loadBalancerClass: - loadBalancerSourceRanges: [] - labels: {} - livenessProbe: - httpGet: - path: / - port: http - readinessProbe: - httpGet: - path: /api/v1/health - port: http - flush: 1 - metricsPort: 2020 - ## https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/classic-mode/configuration-file - config: - service: | - [SERVICE] - Daemon Off - Flush {{ .Values.flush }} - Log_Level {{ .Values.logLevel }} - Parsers_File parsers.conf - Parsers_File custom_parsers.conf - HTTP_Server On - HTTP_Listen 0.0.0.0 - HTTP_Port {{ .Values.metricsPort }} - Health_Check On - - ## https://docs.fluentbit.io/manual/pipeline/inputs - inputs: | - [INPUT] - Name tail - Path /var/log/containers/*.log - multiline.parser docker, cri - Tag kube.* - Mem_Buf_Limit 5MB - Skip_Long_Lines On - - # [INPUT] - # Name tail - # Path /var/log/containers/{NGINX_POD_NAME}-*.log - # Parser nginx_access - # Tag kube.* - # Mem_Buf_Limit 5MB - # Skip_Long_Lines On - - # [INPUT] - # Name tail - # Path /var/log/containers/{NGINX_POD_NAME}-*.log - # Parser nginx_error - # Tag kube.* - # Mem_Buf_Limit 5MB - # Skip_Long_Lines On - - [INPUT] - name kubernetes_events - tag k8s_events - - [INPUT] - Name systemd - Tag host.* - Systemd_Filter _SYSTEMD_UNIT=kubelet.service - Read_From_Tail On - - ## https://docs.fluentbit.io/manual/pipeline/filters - filters: | - [FILTER] - Name kubernetes - Match kube.* - Merge_Log On - Keep_Log Off - K8S-Logging.Parser On - K8S-Logging.Exclude On - - ## https://docs.fluentbit.io/manual/pipeline/outputs - outputs: | - [OUTPUT] - Name parseable - Match kube.* - Server_Host {{ .Values.serverHost }} - Username {{ .Values.serverUsername }} - Password {{ .Values.serverPassword }} - Server_Port 80 - Stream {{ .Values.serverStream }} - Exclude_Namespaces {{ .Values.excludeNamespaces }} - - [OUTPUT] - Name parseable - Match k8s_events - Server_Host {{ .Values.serverHost }} - Server_Port 80 - Username {{ .Values.serverUsername }} - Password {{ .Values.serverPassword }} - Stream k8s-events - - upstream: {} - - customParsers: | - [PARSER] - Name docker_no_time - Format json - Time_Keep Off - Time_Key time - Time_Format %Y-%m-%dT%H:%M:%S.%L - - # [PARSER] - # Name nginx_error - # Format regex - # Regex ^(?\S+Z) stderr F (?\S+ \S+) \[(?\S+)\] (?\d+#\d+): \*(?\d+) (?.*?) client: (?\S+), server: (?\S+), request: "(?\S+) (?\S+) HTTP/\S+", upstream: "(?[^"]+)", host: "(?\S+)"$ - # Time_Key timestamp - # Time_Format %Y/%m/%d %H:%M:%S - - # [PARSER] - # Name nginx_access - # Format regex - # Regex (?[^ ]*) - (?[^ ]*) \[(?[^\]]*)\] "(?\S+)(?: +(?[^\"]*?)(?: +\S*)?)?" (?[^ ]*) (?[^ ]*) "(?[^\"]*)" "(?[^\"]*)" (?[^ ]*) (?[^ ]*) \[(?[^ ]*)\] \[(?[^ ]*)\] (?[^,]*),?(?:[^,]*),?(?:[^ ]*) (?[^,]*),?(?:[^,]*),?(?:[^ ]*) (?[^,]*),?(?:[^,]*),?(?:[^ ]*) (?[^,]*),?(?:[^,]*),?(?:[^ ]*) (?[^ ]*) - # Time_Key timestamp - # Time_Format %d/%b/%Y:%H:%M:%S %z + storageClass: "" + accessMode: ReadWriteOnce + size: 5Gi + data: + enabled: false + storageClass: "" + accessMode: ReadWriteOnce + size: 5Gi + + query: + env: {} + service: + type: ClusterIP + port: 80 + # enables the hot tier; not supported with local-store + persistence: + enabled: false + storageClass: "" + accessMode: ReadWriteOnce + size: 100Gi - # The config volume is mounted by default, either to the existingConfigMap value, or the default of "fluent-bit.fullname" - volumeMounts: - - name: config - mountPath: /fluent-bit/etc/fluent-bit.conf - subPath: fluent-bit.conf - - name: config - mountPath: /fluent-bit/etc/custom_parsers.conf - subPath: custom_parsers.conf - daemonSetVolumes: - - name: varlog - hostPath: - path: /var/log - - name: varlibdockercontainers - hostPath: - path: /var/lib/docker/containers - - name: etcmachineid - hostPath: - path: /etc/machine-id - type: File - daemonSetVolumeMounts: - - name: varlog - mountPath: /var/log - - name: varlibdockercontainers - mountPath: /var/lib/docker/containers - readOnly: true - - name: etcmachineid - mountPath: /etc/machine-id - readOnly: true - logLevel: info + ingestor: + count: 3 + port: 8000 + env: {} + service: + type: ClusterIP + port: 80 + persistence: + enabled: false + storageClass: "" + accessMode: ReadWriteOnce + size: 5Gi diff --git a/index.yaml b/index.yaml index fa5bccbcd..606186886 100644 --- a/index.yaml +++ b/index.yaml @@ -1,9 +1,27 @@ apiVersion: v1 entries: pai: + - apiVersion: v2 + appVersion: 0.3.0 + created: "2026-06-19T11:48:21.375199+05:30" + description: Parseable Auto Instrumentation (PAI) operator for Kubernetes + digest: 460cffa045fb2cb72b1b43bb25b42d332c441e04ec90800a0155c8ebabcbc7b9 + home: https://github.com/parseablehq/pai + keywords: + - observability + - opentelemetry + - auto-instrumentation + - parseable + maintainers: + - name: Parseable + name: pai + type: application + urls: + - https://charts.parseable.com/helm-releases/pai-0.3.0.tgz + version: 0.3.0 - apiVersion: v2 appVersion: 0.2.0 - created: "2026-06-08T13:03:45.109378+08:00" + created: "2026-06-19T11:48:21.374828+05:30" description: Parseable Auto Instrumentation (PAI) operator for Kubernetes digest: fd04518e8fc9e25d3fa876971a38b4c65005a207ba9440ae8ce981cd070646d9 home: https://github.com/parseablehq/pai @@ -21,7 +39,7 @@ entries: version: 0.2.0 - apiVersion: v2 appVersion: 0.1.0 - created: "2026-06-08T13:03:45.109233+08:00" + created: "2026-06-19T11:48:21.374461+05:30" description: Parseable Auto Instrumentation (PAI) operator for Kubernetes digest: 9443e75bef96a424fd5063ddd02cee18e6050207d73e505f66be467287c9f7f7 home: https://github.com/parseablehq/pai @@ -40,7 +58,7 @@ entries: parseable: - apiVersion: v2 appVersion: v2.8.0 - created: "2026-06-08T13:03:45.221758+08:00" + created: "2026-06-19T11:48:21.512833+05:30" dependencies: - condition: vector.enabled name: vector @@ -65,7 +83,7 @@ entries: version: 2.8.2 - apiVersion: v2 appVersion: v2.8.1 - created: "2026-06-08T13:03:45.22012+08:00" + created: "2026-06-19T11:48:21.511079+05:30" dependencies: - condition: vector.enabled name: vector @@ -90,7 +108,7 @@ entries: version: 2.8.1 - apiVersion: v2 appVersion: v2.8.0 - created: "2026-06-08T13:03:45.218159+08:00" + created: "2026-06-19T11:48:21.50904+05:30" dependencies: - condition: vector.enabled name: vector @@ -115,7 +133,7 @@ entries: version: 2.8.0 - apiVersion: v2 appVersion: v2.7.2 - created: "2026-06-08T13:03:45.216492+08:00" + created: "2026-06-19T11:48:21.507255+05:30" dependencies: - condition: vector.enabled name: vector @@ -140,7 +158,7 @@ entries: version: 2.7.2 - apiVersion: v2 appVersion: v2.7.1 - created: "2026-06-08T13:03:45.21479+08:00" + created: "2026-06-19T11:48:21.505179+05:30" dependencies: - condition: vector.enabled name: vector @@ -165,7 +183,7 @@ entries: version: 2.7.1 - apiVersion: v2 appVersion: v2.6.6 - created: "2026-06-08T13:03:45.212753+08:00" + created: "2026-06-19T11:48:21.503388+05:30" dependencies: - condition: vector.enabled name: vector @@ -190,7 +208,7 @@ entries: version: 2.6.6 - apiVersion: v2 appVersion: v2.6.5 - created: "2026-06-08T13:03:45.211094+08:00" + created: "2026-06-19T11:48:21.501361+05:30" dependencies: - condition: vector.enabled name: vector @@ -215,7 +233,7 @@ entries: version: 2.6.5 - apiVersion: v2 appVersion: v2.5.13 - created: "2026-06-08T13:03:45.200212+08:00" + created: "2026-06-19T11:48:21.488594+05:30" dependencies: - condition: vector.enabled name: vector @@ -240,7 +258,7 @@ entries: version: 2.5.13 - apiVersion: v2 appVersion: v2.5.7 - created: "2026-06-08T13:03:45.20911+08:00" + created: "2026-06-19T11:48:21.499335+05:30" dependencies: - condition: vector.enabled name: vector @@ -265,7 +283,7 @@ entries: version: 2.5.7 - apiVersion: v2 appVersion: v2.5.6 - created: "2026-06-08T13:03:45.207505+08:00" + created: "2026-06-19T11:48:21.497237+05:30" dependencies: - condition: vector.enabled name: vector @@ -290,7 +308,7 @@ entries: version: 2.5.6 - apiVersion: v2 appVersion: v2.5.5 - created: "2026-06-08T13:03:45.205892+08:00" + created: "2026-06-19T11:48:21.494746+05:30" dependencies: - condition: vector.enabled name: vector @@ -315,7 +333,7 @@ entries: version: 2.5.5 - apiVersion: v2 appVersion: v2.5.4 - created: "2026-06-08T13:03:45.203943+08:00" + created: "2026-06-19T11:48:21.49258+05:30" dependencies: - condition: vector.enabled name: vector @@ -339,7 +357,7 @@ entries: version: 2.5.4 - apiVersion: v2 appVersion: v2.5.3 - created: "2026-06-08T13:03:45.20227+08:00" + created: "2026-06-19T11:48:21.490769+05:30" dependencies: - condition: vector.enabled name: vector @@ -363,7 +381,7 @@ entries: version: 2.5.3 - apiVersion: v2 appVersion: v2.4.0 - created: "2026-06-08T13:03:45.198621+08:00" + created: "2026-06-19T11:48:21.486787+05:30" dependencies: - condition: vector.enabled name: vector @@ -387,7 +405,7 @@ entries: version: 2.4.0 - apiVersion: v2 appVersion: v2.3.3 - created: "2026-06-08T13:03:45.196995+08:00" + created: "2026-06-19T11:48:21.484571+05:30" dependencies: - condition: vector.enabled name: vector @@ -411,7 +429,7 @@ entries: version: 2.3.3 - apiVersion: v2 appVersion: v2.3.2 - created: "2026-06-08T13:03:45.195026+08:00" + created: "2026-06-19T11:48:21.482537+05:30" dependencies: - condition: vector.enabled name: vector @@ -435,7 +453,7 @@ entries: version: 2.3.2 - apiVersion: v2 appVersion: v2.3.1 - created: "2026-06-08T13:03:45.19334+08:00" + created: "2026-06-19T11:48:21.480253+05:30" dependencies: - condition: vector.enabled name: vector @@ -459,7 +477,7 @@ entries: version: 2.3.1 - apiVersion: v2 appVersion: v2.3.0 - created: "2026-06-08T13:03:45.191377+08:00" + created: "2026-06-19T11:48:21.478091+05:30" dependencies: - condition: vector.enabled name: vector @@ -483,7 +501,7 @@ entries: version: 2.3.0 - apiVersion: v2 appVersion: v2.1.0 - created: "2026-06-08T13:03:45.18972+08:00" + created: "2026-06-19T11:48:21.476236+05:30" dependencies: - condition: vector.enabled name: vector @@ -507,7 +525,7 @@ entries: version: 2.1.0 - apiVersion: v2 appVersion: v1.7.5 - created: "2026-06-08T13:03:45.187602+08:00" + created: "2026-06-19T11:48:21.474011+05:30" dependencies: - condition: vector.enabled name: vector @@ -531,7 +549,7 @@ entries: version: 2.0.0 - apiVersion: v2 appVersion: v1.7.5 - created: "2026-06-08T13:03:45.185956+08:00" + created: "2026-06-19T11:48:21.472217+05:30" dependencies: - condition: vector.enabled name: vector @@ -555,7 +573,7 @@ entries: version: 1.7.5 - apiVersion: v2 appVersion: v1.7.3 - created: "2026-06-08T13:03:45.184297+08:00" + created: "2026-06-19T11:48:21.470148+05:30" dependencies: - condition: vector.enabled name: vector @@ -579,7 +597,7 @@ entries: version: 1.7.3 - apiVersion: v2 appVersion: v1.7.2 - created: "2026-06-08T13:03:45.182331+08:00" + created: "2026-06-19T11:48:21.468299+05:30" dependencies: - condition: vector.enabled name: vector @@ -603,7 +621,7 @@ entries: version: 1.7.2 - apiVersion: v2 appVersion: v1.7.1 - created: "2026-06-08T13:03:45.18069+08:00" + created: "2026-06-19T11:48:21.466107+05:30" dependencies: - condition: vector.enabled name: vector @@ -627,7 +645,7 @@ entries: version: 1.7.1 - apiVersion: v2 appVersion: v1.7.0 - created: "2026-06-08T13:03:45.178724+08:00" + created: "2026-06-19T11:48:21.464215+05:30" dependencies: - condition: vector.enabled name: vector @@ -650,7 +668,7 @@ entries: version: 1.7.0 - apiVersion: v2 appVersion: v1.6.3 - created: "2026-06-08T13:03:45.17705+08:00" + created: "2026-06-19T11:48:21.462175+05:30" dependencies: - condition: vector.enabled name: vector @@ -673,7 +691,7 @@ entries: version: 1.6.8 - apiVersion: v2 appVersion: v1.6.3 - created: "2026-06-08T13:03:45.175007+08:00" + created: "2026-06-19T11:48:21.460061+05:30" dependencies: - condition: vector.enabled name: vector @@ -696,7 +714,7 @@ entries: version: 1.6.7 - apiVersion: v2 appVersion: v1.6.3 - created: "2026-06-08T13:03:45.173404+08:00" + created: "2026-06-19T11:48:21.458277+05:30" dependencies: - condition: vector.enabled name: vector @@ -719,7 +737,7 @@ entries: version: 1.6.6 - apiVersion: v2 appVersion: v1.6.3 - created: "2026-06-08T13:03:45.171846+08:00" + created: "2026-06-19T11:48:21.456157+05:30" dependencies: - condition: vector.enabled name: vector @@ -742,7 +760,7 @@ entries: version: 1.6.5 - apiVersion: v2 appVersion: v1.6.3 - created: "2026-06-08T13:03:45.169949+08:00" + created: "2026-06-19T11:48:21.454182+05:30" dependencies: - condition: vector.enabled name: vector @@ -765,7 +783,7 @@ entries: version: 1.6.4 - apiVersion: v2 appVersion: v1.6.3 - created: "2026-06-08T13:03:45.168407+08:00" + created: "2026-06-19T11:48:21.452047+05:30" dependencies: - condition: vector.enabled name: vector @@ -788,7 +806,7 @@ entries: version: 1.6.3 - apiVersion: v2 appVersion: v1.6.2 - created: "2026-06-08T13:03:45.166634+08:00" + created: "2026-06-19T11:48:21.450305+05:30" dependencies: - condition: vector.enabled name: vector @@ -811,7 +829,7 @@ entries: version: 1.6.2 - apiVersion: v2 appVersion: v1.6.1 - created: "2026-06-08T13:03:45.165135+08:00" + created: "2026-06-19T11:48:21.448043+05:30" dependencies: - condition: vector.enabled name: vector @@ -834,7 +852,7 @@ entries: version: 1.6.1 - apiVersion: v2 appVersion: v1.6.0 - created: "2026-06-08T13:03:45.163611+08:00" + created: "2026-06-19T11:48:21.446311+05:30" dependencies: - condition: vector.enabled name: vector @@ -857,7 +875,7 @@ entries: version: 1.6.0 - apiVersion: v2 appVersion: v1.5.5 - created: "2026-06-08T13:03:45.161756+08:00" + created: "2026-06-19T11:48:21.444435+05:30" dependencies: - condition: vector.enabled name: vector @@ -880,7 +898,7 @@ entries: version: 1.5.5 - apiVersion: v2 appVersion: v1.5.4 - created: "2026-06-08T13:03:45.160224+08:00" + created: "2026-06-19T11:48:21.442029+05:30" dependencies: - condition: vector.enabled name: vector @@ -903,7 +921,7 @@ entries: version: 1.5.4 - apiVersion: v2 appVersion: v1.5.3 - created: "2026-06-08T13:03:45.158678+08:00" + created: "2026-06-19T11:48:21.440213+05:30" dependencies: - condition: vector.enabled name: vector @@ -926,7 +944,7 @@ entries: version: 1.5.3 - apiVersion: v2 appVersion: v1.5.2 - created: "2026-06-08T13:03:45.156791+08:00" + created: "2026-06-19T11:48:21.437951+05:30" dependencies: - condition: vector.enabled name: vector @@ -949,7 +967,7 @@ entries: version: 1.5.2 - apiVersion: v2 appVersion: v1.5.1 - created: "2026-06-08T13:03:45.155314+08:00" + created: "2026-06-19T11:48:21.436049+05:30" dependencies: - condition: vector.enabled name: vector @@ -972,7 +990,7 @@ entries: version: 1.5.1 - apiVersion: v2 appVersion: v1.5.0 - created: "2026-06-08T13:03:45.153649+08:00" + created: "2026-06-19T11:48:21.433762+05:30" dependencies: - condition: vector.enabled name: vector @@ -995,7 +1013,7 @@ entries: version: 1.5.0 - apiVersion: v2 appVersion: v1.4.0 - created: "2026-06-08T13:03:45.151903+08:00" + created: "2026-06-19T11:48:21.431466+05:30" dependencies: - condition: vector.enabled name: vector @@ -1018,7 +1036,7 @@ entries: version: 1.4.1 - apiVersion: v2 appVersion: v1.4.0 - created: "2026-06-08T13:03:45.150445+08:00" + created: "2026-06-19T11:48:21.429431+05:30" dependencies: - condition: vector.enabled name: vector @@ -1041,7 +1059,7 @@ entries: version: 1.4.0 - apiVersion: v2 appVersion: v1.3.0 - created: "2026-06-08T13:03:45.148661+08:00" + created: "2026-06-19T11:48:21.427108+05:30" dependencies: - condition: vector.enabled name: vector @@ -1064,7 +1082,7 @@ entries: version: 1.3.1 - apiVersion: v2 appVersion: v1.3.0 - created: "2026-06-08T13:03:45.14726+08:00" + created: "2026-06-19T11:48:21.425267+05:30" dependencies: - condition: vector.enabled name: vector @@ -1087,7 +1105,7 @@ entries: version: 1.3.0 - apiVersion: v2 appVersion: v1.2.0 - created: "2026-06-08T13:03:45.145808+08:00" + created: "2026-06-19T11:48:21.42339+05:30" dependencies: - condition: vector.enabled name: vector @@ -1110,7 +1128,7 @@ entries: version: 1.2.0 - apiVersion: v2 appVersion: v1.1.0 - created: "2026-06-08T13:03:45.14406+08:00" + created: "2026-06-19T11:48:21.421015+05:30" dependencies: - condition: vector.enabled name: vector @@ -1133,7 +1151,7 @@ entries: version: 1.1.0 - apiVersion: v2 appVersion: v1.0.0 - created: "2026-06-08T13:03:45.142627+08:00" + created: "2026-06-19T11:48:21.419145+05:30" dependencies: - condition: vector.enabled name: vector @@ -1156,7 +1174,7 @@ entries: version: 1.0.0 - apiVersion: v2 appVersion: v0.9.0 - created: "2026-06-08T13:03:45.141059+08:00" + created: "2026-06-19T11:48:21.4165+05:30" dependencies: - condition: vector.enabled name: vector @@ -1179,7 +1197,7 @@ entries: version: 0.9.0 - apiVersion: v2 appVersion: v0.8.1 - created: "2026-06-08T13:03:45.139568+08:00" + created: "2026-06-19T11:48:21.41472+05:30" dependencies: - condition: vector.enabled name: vector @@ -1202,7 +1220,7 @@ entries: version: 0.8.1 - apiVersion: v2 appVersion: v0.8.0 - created: "2026-06-08T13:03:45.138147+08:00" + created: "2026-06-19T11:48:21.412304+05:30" dependencies: - condition: vector.enabled name: vector @@ -1225,7 +1243,7 @@ entries: version: 0.8.0 - apiVersion: v2 appVersion: v0.7.3 - created: "2026-06-08T13:03:45.136413+08:00" + created: "2026-06-19T11:48:21.410632+05:30" dependencies: - condition: vector.enabled name: vector @@ -1248,7 +1266,7 @@ entries: version: 0.7.3 - apiVersion: v2 appVersion: v0.7.2 - created: "2026-06-08T13:03:45.135012+08:00" + created: "2026-06-19T11:48:21.408752+05:30" dependencies: - condition: vector.enabled name: vector @@ -1271,7 +1289,7 @@ entries: version: 0.7.2 - apiVersion: v2 appVersion: v0.7.1 - created: "2026-06-08T13:03:45.133544+08:00" + created: "2026-06-19T11:48:21.406709+05:30" dependencies: - condition: vector.enabled name: vector @@ -1294,7 +1312,7 @@ entries: version: 0.7.1 - apiVersion: v2 appVersion: v0.7.0 - created: "2026-06-08T13:03:45.13154+08:00" + created: "2026-06-19T11:48:21.404786+05:30" dependencies: - condition: vector.enabled name: vector @@ -1317,7 +1335,7 @@ entries: version: 0.7.0 - apiVersion: v2 appVersion: v0.6.2 - created: "2026-06-08T13:03:45.130069+08:00" + created: "2026-06-19T11:48:21.402644+05:30" dependencies: - condition: vector.enabled name: vector @@ -1340,7 +1358,7 @@ entries: version: 0.6.2 - apiVersion: v2 appVersion: v0.6.1 - created: "2026-06-08T13:03:45.128581+08:00" + created: "2026-06-19T11:48:21.400977+05:30" dependencies: - condition: vector.enabled name: vector @@ -1363,7 +1381,7 @@ entries: version: 0.6.1 - apiVersion: v2 appVersion: v0.6.0 - created: "2026-06-08T13:03:45.126687+08:00" + created: "2026-06-19T11:48:21.39899+05:30" dependencies: - condition: vector.enabled name: vector @@ -1386,7 +1404,7 @@ entries: version: 0.6.0 - apiVersion: v2 appVersion: v0.5.1 - created: "2026-06-08T13:03:45.125232+08:00" + created: "2026-06-19T11:48:21.396969+05:30" dependencies: - condition: vector.enabled name: vector @@ -1409,7 +1427,7 @@ entries: version: 0.5.1 - apiVersion: v2 appVersion: v0.5.0 - created: "2026-06-08T13:03:45.123443+08:00" + created: "2026-06-19T11:48:21.395114+05:30" dependencies: - condition: vector.enabled name: vector @@ -1432,7 +1450,7 @@ entries: version: 0.5.0 - apiVersion: v2 appVersion: v0.4.4 - created: "2026-06-08T13:03:45.122052+08:00" + created: "2026-06-19T11:48:21.392657+05:30" dependencies: - condition: vector.enabled name: vector @@ -1455,7 +1473,7 @@ entries: version: 0.4.5 - apiVersion: v2 appVersion: v0.4.3 - created: "2026-06-08T13:03:45.120645+08:00" + created: "2026-06-19T11:48:21.390547+05:30" dependencies: - condition: vector.enabled name: vector @@ -1478,7 +1496,7 @@ entries: version: 0.4.4 - apiVersion: v2 appVersion: v0.4.2 - created: "2026-06-08T13:03:45.11885+08:00" + created: "2026-06-19T11:48:21.388264+05:30" dependencies: - condition: vector.enabled name: vector @@ -1501,7 +1519,7 @@ entries: version: 0.4.3 - apiVersion: v2 appVersion: v0.4.1 - created: "2026-06-08T13:03:45.117488+08:00" + created: "2026-06-19T11:48:21.386295+05:30" dependencies: - condition: vector.enabled name: vector @@ -1524,7 +1542,7 @@ entries: version: 0.4.2 - apiVersion: v2 appVersion: v0.4.0 - created: "2026-06-08T13:03:45.116037+08:00" + created: "2026-06-19T11:48:21.384226+05:30" dependencies: - condition: vector.enabled name: vector @@ -1547,7 +1565,7 @@ entries: version: 0.4.1 - apiVersion: v2 appVersion: v0.4.0 - created: "2026-06-08T13:03:45.113982+08:00" + created: "2026-06-19T11:48:21.38243+05:30" dependencies: - condition: vector.enabled name: vector @@ -1570,7 +1588,7 @@ entries: version: 0.4.0 - apiVersion: v2 appVersion: v0.3.1 - created: "2026-06-08T13:03:45.112619+08:00" + created: "2026-06-19T11:48:21.380635+05:30" dependencies: - condition: vector.enabled name: vector @@ -1593,7 +1611,7 @@ entries: version: 0.3.1 - apiVersion: v2 appVersion: v0.3.0 - created: "2026-06-08T13:03:45.111179+08:00" + created: "2026-06-19T11:48:21.378137+05:30" description: Helm chart for Parseable Server digest: ff30739229b727dc637f62fd4481c886a6080ce4556bae10cafe7642ddcfd937 name: parseable @@ -1603,7 +1621,7 @@ entries: version: 0.3.0 - apiVersion: v2 appVersion: v0.2.2 - created: "2026-06-08T13:03:45.111004+08:00" + created: "2026-06-19T11:48:21.377963+05:30" description: Helm chart for Parseable Server digest: 477d0dc2f0c07d4f4c32e105d4bdd70c71113add5c2a75ac5f1cb42aa0276db7 name: parseable @@ -1613,7 +1631,7 @@ entries: version: 0.2.2 - apiVersion: v2 appVersion: v0.2.1 - created: "2026-06-08T13:03:45.110512+08:00" + created: "2026-06-19T11:48:21.377807+05:30" description: Helm chart for Parseable Server digest: 84826fcd1b4c579f301569f43b0309c07e8082bad76f5cdd25f86e86ca2e8192 name: parseable @@ -1623,7 +1641,7 @@ entries: version: 0.2.1 - apiVersion: v2 appVersion: v0.2.0 - created: "2026-06-08T13:03:45.110391+08:00" + created: "2026-06-19T11:48:21.377646+05:30" description: Helm chart for Parseable Server digest: 7a759f7f9809f3935cba685e904c021a0b645f217f4e45b9be185900c467edff name: parseable @@ -1633,7 +1651,7 @@ entries: version: 0.2.0 - apiVersion: v2 appVersion: v0.1.1 - created: "2026-06-08T13:03:45.110273+08:00" + created: "2026-06-19T11:48:21.377507+05:30" description: Helm chart for Parseable Server digest: 37993cf392f662ec7b1fbfc9a2ba00ec906d98723e38f3c91ff1daca97c3d0b3 name: parseable @@ -1643,7 +1661,7 @@ entries: version: 0.1.1 - apiVersion: v2 appVersion: v0.1.0 - created: "2026-06-08T13:03:45.110158+08:00" + created: "2026-06-19T11:48:21.377365+05:30" description: Helm chart for Parseable Server digest: 1d580d072af8d6b1ebcbfee31c2e16c907d08db754780f913b5f0032b403789b name: parseable @@ -1653,7 +1671,7 @@ entries: version: 0.1.0 - apiVersion: v2 appVersion: v0.0.8 - created: "2026-06-08T13:03:45.110047+08:00" + created: "2026-06-19T11:48:21.377219+05:30" description: Helm chart for Parseable Server digest: c805254ffa634f96ecec448bcfff9973339aa9487dd8199b21b17b79a4de9345 name: parseable @@ -1663,7 +1681,7 @@ entries: version: 0.0.8 - apiVersion: v2 appVersion: v0.0.7 - created: "2026-06-08T13:03:45.109937+08:00" + created: "2026-06-19T11:48:21.377084+05:30" description: Helm chart for Parseable Server digest: c591f617ed1fe820bb2c72a4c976a78126f1d1095d552daa07c4700f46c4708a name: parseable @@ -1673,7 +1691,7 @@ entries: version: 0.0.7 - apiVersion: v2 appVersion: v0.0.6 - created: "2026-06-08T13:03:45.10983+08:00" + created: "2026-06-19T11:48:21.376932+05:30" description: Helm chart for Parseable Server digest: f9ae56a6fcd6a59e7bee0436200ddbedeb74ade6073deb435b8fcbaf08dda795 name: parseable @@ -1683,7 +1701,7 @@ entries: version: 0.0.6 - apiVersion: v2 appVersion: v0.0.5 - created: "2026-06-08T13:03:45.109722+08:00" + created: "2026-06-19T11:48:21.376786+05:30" description: Helm chart for Parseable Server digest: 4d6b08a064fba36e16feeb820b77e1e8e60fb6de48dbf7ec8410d03d10c26ad0 name: parseable @@ -1693,7 +1711,7 @@ entries: version: 0.0.5 - apiVersion: v2 appVersion: v0.0.2 - created: "2026-06-08T13:03:45.109605+08:00" + created: "2026-06-19T11:48:21.375802+05:30" description: Helm chart for Parseable Server digest: 38a0a3e4c498afbbcc76ebfcb9cb598fa2ca843a53cc93b3cb4f135b85c10844 name: parseable @@ -1703,7 +1721,7 @@ entries: version: 0.0.2 - apiVersion: v2 appVersion: v0.0.1 - created: "2026-06-08T13:03:45.109495+08:00" + created: "2026-06-19T11:48:21.375565+05:30" description: Helm chart for Parseable Server digest: 1f1142db092b9620ee38bb2294ccbb1c17f807b33bf56da43816af7fe89f301e name: parseable @@ -1714,7 +1732,7 @@ entries: parseable-enterprise: - apiVersion: v2 appVersion: v2.8.1 - created: "2026-06-08T13:03:45.235107+08:00" + created: "2026-06-19T11:48:21.527896+05:30" dependencies: - condition: vector.enabled name: vector @@ -1739,7 +1757,7 @@ entries: version: 2.8.1 - apiVersion: v2 appVersion: v2.8.0 - created: "2026-06-08T13:03:45.233405+08:00" + created: "2026-06-19T11:48:21.525912+05:30" dependencies: - condition: vector.enabled name: vector @@ -1764,7 +1782,7 @@ entries: version: 2.8.0 - apiVersion: v2 appVersion: v2.7.3 - created: "2026-06-08T13:03:45.231589+08:00" + created: "2026-06-19T11:48:21.523575+05:30" dependencies: - condition: vector.enabled name: vector @@ -1789,7 +1807,7 @@ entries: version: 2.7.3 - apiVersion: v2 appVersion: v2.7.2 - created: "2026-06-08T13:03:45.22962+08:00" + created: "2026-06-19T11:48:21.521718+05:30" dependencies: - condition: vector.enabled name: vector @@ -1814,7 +1832,7 @@ entries: version: 2.7.2 - apiVersion: v2 appVersion: v2.7.1 - created: "2026-06-08T13:03:45.227818+08:00" + created: "2026-06-19T11:48:21.519409+05:30" dependencies: - condition: vector.enabled name: vector @@ -1839,7 +1857,7 @@ entries: version: 2.7.1 - apiVersion: v2 appVersion: v2.6.6 - created: "2026-06-08T13:03:45.225599+08:00" + created: "2026-06-19T11:48:21.517043+05:30" dependencies: - condition: vector.enabled name: vector @@ -1864,7 +1882,7 @@ entries: version: 2.6.7 - apiVersion: v2 appVersion: v2.6.6 - created: "2026-06-08T13:03:45.223825+08:00" + created: "2026-06-19T11:48:21.515118+05:30" dependencies: - condition: vector.enabled name: vector @@ -1887,4 +1905,4 @@ entries: urls: - https://charts.parseable.com/helm-releases/parseable-enterprise-2.6.6.tgz version: 2.6.6 -generated: "2026-06-08T13:03:45.109001+08:00" +generated: "2026-06-19T11:48:21.373906+05:30"