From af8477937312842be6ad4cf5d9a383883f60ff8a Mon Sep 17 00:00:00 2001 From: Pratik Date: Tue, 21 Jul 2026 16:25:10 +0530 Subject: [PATCH 1/4] docs: update Kubernetes Helm installation guides --- .../installation/distributed/k8s-helm.mdx | 153 ++++++++++++++---- .../installation/standalone/k8s.mdx | 142 +++++++++++----- 2 files changed, 225 insertions(+), 70 deletions(-) diff --git a/content/docs/self-hosted/installation/distributed/k8s-helm.mdx b/content/docs/self-hosted/installation/distributed/k8s-helm.mdx index 4cb5c7f..acea9de 100644 --- a/content/docs/self-hosted/installation/distributed/k8s-helm.mdx +++ b/content/docs/self-hosted/installation/distributed/k8s-helm.mdx @@ -1,5 +1,6 @@ --- title: Kubernetes +description: Install Parseable OSS or Enterprise in distributed mode on Kubernetes with Helm. redirect_from: - /installation/distributed/k8s-helm - /server/installation/distributed/setup-distributed-parseable-on-kubernetes-via-helm @@ -7,33 +8,57 @@ redirect_from: - /installation/setup-parseable-on-kubernetes-via-helm --- -This page explains the steps required to setup Parseable in a distributed mode on Kubernetes via Helm. +This page explains how to set up Parseable OSS or Enterprise in distributed mode on Kubernetes using Helm. ## Prerequisites -- `kubectl` and `helm` installed and configured to point to relevant Kubernetes cluster. -- Use S3 or a compatible object store such as MinIO to store logs. +- `kubectl` and `Helm 3 or later` installed and configured for your Kubernetes cluster. +- An S3-compatible object store such as Amazon S3 or MinIO. +- Parseable license files if you are installing Enterprise. + +You can find the available storage classes with: + +```bash +kubectl get storageclass +``` ## Set up object store -The MinIO installation steps below are for testing purposes only. For production level deployment please refer to the [MinIO documentation](https://min.io/docs/minio/linux/index.html). +The MinIO installation steps below are for testing purposes only. For production level deployment please refer to the [MinIO documentation](https://docs.min.io/aistor/). -This step is required only if you want to setup MinIO as the backend for Parseable. Please skip this step if you have another object store, like S3, already available. -Make sure you configure `storageClass` in the helm install command. +Replace `YOUR_STORAGE_CLASS` with a storage class available in your cluster. ```bash helm repo add minio https://charts.min.io/ -helm install --namespace minio --create-namespace --set "buckets[0].name=parseable,buckets[0].policy=none,buckets[0].purge=false,rootUser=minioadmin,rootPassword=minioadmin,replicas=1,persistence.enabled=true,persistence.storageClass="",resources.requests.memory=128Mi,mode=standalone" minio minio/minio -kubectl port-forward svc/minio-console -n minio 9001:9001 + +helm install minio minio/minio \ + --namespace minio \ + --create-namespace \ + --set "buckets[0].name=parseable" \ + --set "buckets[0].policy=none" \ + --set "buckets[0].purge=false" \ + --set rootUser=minioadmin \ + --set rootPassword=minioadmin \ + --set replicas=1 \ + --set mode=standalone \ + --set persistence.enabled=true \ + --set persistence.storageClass=YOUR_STORAGE_CLASS \ + --set resources.requests.memory=128Mi ``` -You can now access the MinIO console at `http://localhost:9001`. You should see a bucket called `parseable` created. +To access the MinIO console: + +```bash +kubectl port-forward service/minio-console 9001:9001 --namespace minio +``` + +Open `http://localhost:9001`. A bucket named `parseable` should be available. ### Create configuration secret -Create a secret file with the configuration for Parseable. Note that the values set below are based on the MinIO installation above. If you are using a different object store, please update the values accordingly. +Create a file named `parseable-env-secret` with the Parseable administrator and object-store configuration. The values below work with the MinIO test setup above. ```bash cat << EOF > parseable-env-secret @@ -43,52 +68,118 @@ s3.secret.key=minioadmin s3.region=us-east-1 s3.bucket=parseable addr=0.0.0.0:8000 -staging.dir=./staging -fs.dir=./data username=admin password=admin EOF ``` -You can add additional environment variables to the `parseable-env-secret` file as needed. You can find the details of all the environment variables in the [Environment Variables](/docs/self-hosted/configuration) section. +You can add additional environment variables to the `parseable-env-secret` file as needed. You can find the details of all the environment variables in the [Environment variables](/docs/self-hosted/configuration) documentation. +Create the namespace and Secret: -After this, create the secret in Kubernetes. +```bash +kubectl create namespace parseable + +kubectl create secret generic parseable-env-secret \ + --from-env-file=parseable-env-secret \ + --namespace parseable +``` + +## Install Parseable + +Add the Parseable Helm repository: ```bash -kubectl create ns parseable -kubectl create secret generic parseable-env-secret --from-env-file=parseable-env-secret -n parseable +helm repo add parseable https://charts.parseable.com +helm repo update ``` -### Install Parseable +The `parseable/parseable` chart supports both OSS and Enterprise. Replace `YOUR_STORAGE_CLASS` in the commands below. + +### Parseable OSS ```bash -helm repo add parseable https://charts.parseable.com/ -helm install parseable parseable/parseable -n parseable --set "parseable.highAvailability.enabled=true" --set "parseable.store=s3-store" --set "parseable.s3ModeSecret.enabled=true" +helm install parseable parseable/parseable \ + --namespace parseable \ + --set parseable.deploymentMode=distributed \ + --set parseable.store.type=s3-store \ + --set parseable.store.secretName=parseable-env-secret \ + --set parseable.distributed.ingestor.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ + --set parseable.distributed.querier.persistence.hotTier.storageClass=YOUR_STORAGE_CLASS \ + --wait ``` - -Note that `parseable.highAvailability.enabled=true` flag enables high availability mode. By default, the helm chart installs 3 Parseable ingest services and 1 Parseable query service. It also creates a ClusterIP service for Parseable ingestors. - +By default, the chart creates three ingestors and one querier. + +### Parseable Enterprise + + -### Access Parseable +Parseable Enterprise requires license files. Contact [sales@parseable.com](mailto:sales@parseable.com) to obtain a license and Enterprise image access. + +Create the license Secret: + +```bash +kubectl create secret generic parseable-license \ + --from-file=parseable_license.json=/parseable_license.json \ + --from-file=parseable_license.sig=/parseable_license.sig \ + --namespace parseable +``` + +Install Enterprise using the same chart with `parseable.enterprise.enabled=true`: + +```bash +helm install parseable parseable/parseable \ + --namespace parseable \ + --set parseable.deploymentMode=distributed \ + --set parseable.store.type=s3-store \ + --set parseable.store.secretName=parseable-env-secret \ + --set parseable.enterprise.enabled=true \ + --set parseable.enterprise.license.secretName=parseable-license \ + --set parseable.distributed.ingestor.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ + --set parseable.distributed.querier.persistence.hotTier.storageClass=YOUR_STORAGE_CLASS \ + --wait +``` + +By default, Enterprise creates three ingestors, one querier, and one Prism node. + +## Verify the installation + +```bash +kubectl get pods,pvc,services --namespace parseable +``` + +All pods should be `Running` and all PVCs should be `Bound`. + +## Access Parseable + +With the release name and namespace used above, send data to the ingestor service at: + +```text +http://parseable-ingestor-service.parseable.svc.cluster.local +``` -Since we're running Parseable in a distributed mode, the ingestor service and querier services are different. Any log agent or client should send events to the `parseable-ingestor-service` service. To expose the ingress service, you can use the following command: +For OSS, forward the querier service: ```bash -kubectl port-forward svc/parseable-ingestor-service 8000:80 -n parseable +kubectl port-forward service/parseable-querier-service 8000:80 --namespace parseable ``` -To access thePrism, you'll need to expose the `parseable-querier-service` service: +For Enterprise, forward the Prism service: ```bash -kubectl port-forward svc/parseable-querier-service 8001:80 -n parseable +kubectl port-forward service/parseable-prism-service 8000:80 --namespace parseable ``` -You should now be able to point your browser to `http://localhost:8001` and see the Parseable login page. You can login with the values set in `username` and `password` fields in the `parseable-env-secret` file above. +Open `http://localhost:8000` and sign in with the username and password from `parseable-env-secret`. -## Migration +## Migrate from older chart values -This section is for users using Parseable helm chart version `1.3.1` or previous. Parseable release `v1.4.0` introduced a hot-tier mechanism for query nodes. Accordingly, the query nodes in the helm chart are now deployed as a StatefulSet instead of a Deployment. The helm chart version `1.4.0` and above removes the Deployment and creates a StatefulSet for query nodes. +Chart version 3.0.0 uses a new values structure and one chart for both editions. -Since distributed mode always runs with S3 store mode, the data is stored remotely and there is no manual migration required. If you face any issues during the upgrade, please reach out to us in the [community Slack](https://logg.ing/community). +| Older value | Chart 3 value | +| --- | --- | +| `parseable.highAvailability.enabled=true` | `parseable.deploymentMode=distributed` | +| `parseable.store=s3-store` | `parseable.store.type=s3-store` | +| `parseable.s3ModeSecret.enabled=true` | `parseable.store.secretName=parseable-env-secret` | +| Separate Enterprise chart | `parseable.enterprise.enabled=true` | diff --git a/content/docs/self-hosted/installation/standalone/k8s.mdx b/content/docs/self-hosted/installation/standalone/k8s.mdx index 4400d57..06b874a 100644 --- a/content/docs/self-hosted/installation/standalone/k8s.mdx +++ b/content/docs/self-hosted/installation/standalone/k8s.mdx @@ -1,66 +1,111 @@ --- title: Kubernetes +description: Install Parseable OSS in standalone mode on Kubernetes with Helm. redirect_from: - /installation/standalone/k8s --- -This page explains the steps required to setup Parseable (in S3 or Local mode) on Kubernetes via Helm. +This page explains how to set up Parseable OSS in standalone mode on Kubernetes using Helm. You can use local storage or an object store such as Amazon S3 or MinIO. -### Prerequisites -- `kubectl` and `helm` installed and configured to point to relevant Kubernetes clusters. + +Standalone mode supports Parseable OSS only. To install Parseable Enterprise, use the [distributed Kubernetes installation](/docs/self-hosted/installation/distributed/k8s-helm). + + +## Prerequisites + +- `kubectl` and `Helm 3 or later` installed and configured for your Kubernetes cluster. +- A Kubernetes storage class for Parseable volumes. + +Find the available storage classes: -### Setup Parseable with Local Storage -#### Create configuration secret +```bash +kubectl get storageclass +``` -Create a secret file with the configuration for Parseable. +Add the Parseable Helm repository and create a namespace: + +```bash +helm repo add parseable https://charts.parseable.com +helm repo update +kubectl create namespace parseable +``` + +Choose one of the storage options below. + +## Set up Parseable with local storage + +Create a file named `parseable-env-secret`: ```bash cat << EOF > parseable-env-secret addr=0.0.0.0:8000 -staging.dir=./staging -fs.dir=./data username=admin password=admin EOF ``` -You can add additional environment variables to the `parseable-env-secret` file as needed. You can find the details of all the environment variables in the [Environment Variables](/docs/self-hosted/configuration) section. - -Then create the secret in Kubernetes. +Create the configuration Secret: ```bash -kubectl create ns parseable -kubectl create secret generic parseable-env-secret --from-env-file=parseable-env-secret -n parseable +kubectl create secret generic parseable-env-secret \ + --from-env-file=parseable-env-secret \ + --namespace parseable ``` -#### Install Parseable +Replace `YOUR_STORAGE_CLASS` with a storage class available in your cluster, then install Parseable: ```bash -helm repo add parseable https://charts.parseable.com -helm install parseable parseable/parseable -n parseable --set "parseable.local=true" -kubectl port-forward svc/parseable 8000:80 -n parseable +helm install parseable parseable/parseable \ + --namespace parseable \ + --set parseable.deploymentMode=standalone \ + --set parseable.store.type=local-store \ + --set parseable.store.secretName=parseable-env-secret \ + --set parseable.standalone.unified.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ + --set parseable.standalone.unified.persistence.data.enabled=true \ + --set parseable.standalone.unified.persistence.data.storageClass=YOUR_STORAGE_CLASS \ + --wait ``` -You should now be able to point your browser to `http://localhost:8000` and see the Parseable login page. You can login with the values set in the username and password fields in the `parseable-env-secret` file above. +The staging PVC temporarily buffers incoming data. The data PVC stores the actual local data and keeps it across pod replacements. + +## Set up Parseable with S3 storage -### Setup Parseable with S3 Storage -#### Setup object store -This step is required only if you want to setup [MinIO](https://min.io/) as the backend for Parseable. Please skip this step if you have another object store, like S3, already available. +### Set up MinIO for testing + + +The MinIO steps below are for testing only. Skip this section if you already have an S3-compatible object store. + ```bash helm repo add minio https://charts.min.io/ -helm install --namespace minio --create-namespace --set "buckets[0].name=parseable,buckets[0].policy=none,buckets[0].purge=false,rootUser=minioadmin,rootPassword=minioadmin,replicas=1,persistence.enabled=false,resources.requests.memory=128Mi,mode=standalone" minio minio/minio -kubectl port-forward svc/minio-console -n minio 9001:9001 + +helm install minio minio/minio \ + --namespace minio \ + --create-namespace \ + --set "buckets[0].name=parseable" \ + --set "buckets[0].policy=none" \ + --set "buckets[0].purge=false" \ + --set rootUser=minioadmin \ + --set rootPassword=minioadmin \ + --set replicas=1 \ + --set mode=standalone \ + --set persistence.enabled=false \ + --set resources.requests.memory=128Mi ``` -You can now access the MinIO console on http://localhost:9001. You should see a bucket called `parseable` created. +To access the MinIO console: - -MinIO installation steps above are for testing purposes only. For production, please refer to the [MinIO documentation](https://min.io/docs/minio/linux/index.html). - +```bash +kubectl port-forward service/minio-console 9001:9001 --namespace minio +``` + +Open `http://localhost:9001`. A bucket named `parseable` should be available. + +MinIO provides an S3-compatible API, so Parseable uses `s3-store` with the MinIO service as its S3 endpoint. -#### Create configuration secret -Create a secret file with the configuration for Parseable. Note that the values set below are based on the MinIO installation above. If you are using a different object store, please update the values accordingly. +### Create configuration secret + +Create a file named `parseable-env-secret`. The values below work with the MinIO test setup above. ```bash cat << EOF > parseable-env-secret @@ -70,28 +115,47 @@ s3.secret.key=minioadmin s3.region=us-east-1 s3.bucket=parseable addr=0.0.0.0:8000 -staging.dir=./staging -fs.dir=./data username=admin password=admin EOF ``` -Then create the secret in Kubernetes. +If you are using another S3-compatible object store, replace the endpoint and credentials with your own values. + +Create the configuration Secret: ```bash -kubectl create ns parseable -kubectl create secret generic parseable-env-secret --from-env-file=parseable-env-secret -n parseable +kubectl create secret generic parseable-env-secret \ + --from-env-file=parseable-env-secret \ + --namespace parseable ``` -#### Install Parseable +Replace `YOUR_STORAGE_CLASS`, then install Parseable: ```bash -helm repo add parseable https://charts.parseable.com -helm install parseable parseable/parseable -n parseable -kubectl port-forward svc/parseable 8000:80 -n parseable +helm install parseable parseable/parseable \ + --namespace parseable \ + --set parseable.deploymentMode=standalone \ + --set parseable.store.type=s3-store \ + --set parseable.store.secretName=parseable-env-secret \ + --set parseable.standalone.unified.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ + --wait ``` -You should now be able to point your browser to `http://localhost:8000` and see the Parseable login page. You can login with the values set in the username and password fields in the `parseable-env-secret` file above. +With S3 or MinIO, permanent data is stored in the object store. Only the local staging PVC is required. + +## Verify the installation + +```bash +kubectl get pods,pvc,services --namespace parseable +``` +The Parseable pod should be `Running` and its PVCs should be `Bound`. + +## Access Parseable + +```bash +kubectl port-forward service/parseable-standalone-service 8000:80 --namespace parseable +``` +Open `http://localhost:8000` and sign in with the username and password from `parseable-env-secret`. From 0339c8021dec8c573b97a943edd86a91f5791ec6 Mon Sep 17 00:00:00 2001 From: Pratik Date: Wed, 22 Jul 2026 17:59:28 +0530 Subject: [PATCH 2/4] docs: document Enterprise cluster secret setup --- .../self-hosted/installation/distributed/k8s-helm.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/docs/self-hosted/installation/distributed/k8s-helm.mdx b/content/docs/self-hosted/installation/distributed/k8s-helm.mdx index acea9de..efa80ee 100644 --- a/content/docs/self-hosted/installation/distributed/k8s-helm.mdx +++ b/content/docs/self-hosted/installation/distributed/k8s-helm.mdx @@ -126,7 +126,14 @@ kubectl create secret generic parseable-license \ --namespace parseable ``` -Install Enterprise using the same chart with `parseable.enterprise.enabled=true`: +Enterprise nodes require a shared cluster Secret for internal communication. Create it with a random 16-character value: + +```bash +kubectl -n parseable create secret generic parseable-cluster-secret \ + --from-literal=cluster-secret="$(openssl rand -hex 8)" +``` + +Install Enterprise using the same chart with Enterprise and the cluster Secret enabled: ```bash helm install parseable parseable/parseable \ @@ -134,6 +141,7 @@ helm install parseable parseable/parseable \ --set parseable.deploymentMode=distributed \ --set parseable.store.type=s3-store \ --set parseable.store.secretName=parseable-env-secret \ + --set parseable.clusterSecret.enabled=true \ --set parseable.enterprise.enabled=true \ --set parseable.enterprise.license.secretName=parseable-license \ --set parseable.distributed.ingestor.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ From 61056a6abce5288e709831da9f9213e79f025c8d Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 23 Jul 2026 17:17:43 +0530 Subject: [PATCH 3/4] docs: simplify Kubernetes Helm installation guides --- .../distributed/k8s-helm-enterprise.mdx | 337 ++++++++++++++++++ .../installation/distributed/k8s-helm-oss.mdx | 293 +++++++++++++++ .../installation/distributed/k8s-helm.mdx | 193 ---------- .../installation/standalone/k8s-oss.mdx | 286 +++++++++++++++ .../installation/standalone/k8s.mdx | 161 --------- 5 files changed, 916 insertions(+), 354 deletions(-) create mode 100644 content/docs/self-hosted/installation/distributed/k8s-helm-enterprise.mdx create mode 100644 content/docs/self-hosted/installation/distributed/k8s-helm-oss.mdx delete mode 100644 content/docs/self-hosted/installation/distributed/k8s-helm.mdx create mode 100644 content/docs/self-hosted/installation/standalone/k8s-oss.mdx delete mode 100644 content/docs/self-hosted/installation/standalone/k8s.mdx diff --git a/content/docs/self-hosted/installation/distributed/k8s-helm-enterprise.mdx b/content/docs/self-hosted/installation/distributed/k8s-helm-enterprise.mdx new file mode 100644 index 0000000..d571a08 --- /dev/null +++ b/content/docs/self-hosted/installation/distributed/k8s-helm-enterprise.mdx @@ -0,0 +1,337 @@ +--- +title: Kubernetes (Enterprise) +description: Install Parseable Enterprise in distributed mode on Kubernetes with Helm. +--- + + + +This guide installs Parseable Enterprise in distributed mode on Kubernetes. The installation creates ingestor, querier, and Prism nodes. + +To install Parseable OSS, use the [distributed OSS Kubernetes guide](/docs/self-hosted/installation/distributed/k8s-helm-oss). + +## 1. Prerequisites + +Before you begin, make sure you have: + +- `kubectl` configured for your Kubernetes cluster +- Helm 3 or later +- A Kubernetes storage class +- An existing, empty object-store bucket with access credentials +- `parseable_license.json` and `parseable_license.sig` from Parseable + +A valid Enterprise license is required to run Parseable Enterprise. If you do not have a license, contact [sales@parseable.com](mailto:sales@parseable.com); the Enterprise deployment cannot run without it. + +Confirm the Kubernetes context and find an available storage class: + +```bash +kubectl config current-context +kubectl get nodes +kubectl get storageclass +``` + +## 2. Create the namespace + +```bash +kubectl create namespace parseable +``` + +## 3. Choose an object store + +Choose exactly one object store below. Replace every `<...>` placeholder in the selected option before running the command. + +After completing one option, continue to step 4. + +### Option A: MinIO + + + This single-node MinIO setup is for testing only. Skip the installation if you + already have a MinIO or another S3-compatible object store. + + +Install MinIO and create a bucket named `parseable`: + +```bash +helm repo add minio https://charts.min.io/ +helm install --namespace minio --create-namespace --set "buckets[0].name=parseable,buckets[0].policy=none,buckets[0].purge=false,rootUser=minioadmin,rootPassword=minioadmin,replicas=1,persistence.enabled=true,persistence.storageClass="",resources.requests.memory=128Mi,mode=standalone" minio minio/minio +``` + +Forward the MinIO console port: + +```bash +kubectl port-forward svc/minio-console -n minio 9001:9001 +``` + +Open `http://localhost:9001`. A bucket named `parseable` should be available. + +Create a file named `parseable-env-secret`. These defaults work with the MinIO installation above: + +```bash +cat << EOF > parseable-env-secret +s3.url=http://minio.minio.svc.cluster.local:9000 +s3.access.key=minioadmin +s3.secret.key=minioadmin +s3.region=us-east-1 +s3.bucket=parseable +addr=0.0.0.0:8000 +username=admin +password=admin +EOF +``` + + + These credentials are for testing only. Before creating the Kubernetes Secret, + replace the MinIO and Parseable administrator credentials with secure values + that match your MinIO deployment. + + +Use `s3-store` in [`enterprise-values.yaml`](#7-create-enterprise-valuesyaml). + +### Option B: Amazon S3 + +Create a file named `parseable-env-secret` using the bucket, region, access key, and secret key provided by your AWS administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +s3.url= +s3.access.key= +s3.secret.key= +s3.bucket= +s3.region= +EOF +``` + +Use `s3-store` in [`enterprise-values.yaml`](#7-create-enterprise-valuesyaml). + +### Option C: Google Cloud Storage + +Create a file named `parseable-env-secret` using the bucket details provided by your Google Cloud administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +gcs.url= +gcs.bucket= +EOF +``` + +Keep the service-account JSON file ready. You will create its Kubernetes Secret after creating the main Secret. + + +The service-account JSON file is a credential. Store it securely and never commit it to source control. + + +Use `gcs-store` in [`enterprise-values.yaml`](#7-create-enterprise-valuesyaml). + +### Option D: Azure Blob Storage + +Create a file named `parseable-env-secret` using the storage account, container, and access key provided by your Azure administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +azr.access_key= +azr.account= +azr.container= +azr.url= +EOF +``` + +Use `blob-store` in [`enterprise-values.yaml`](#7-create-enterprise-valuesyaml). + +## 4. Create the Kubernetes Secret + +After creating the file for your selected object store, review it and create the Kubernetes Secret: + +```bash +chmod 600 parseable-env-secret + +kubectl create secret generic parseable-env-secret \ + --namespace parseable \ + --from-env-file=parseable-env-secret +``` + +If you selected Google Cloud Storage, also create the service-account key Secret: + +```bash +kubectl create secret generic parseable-gcs-key \ + --namespace parseable \ + --from-file=key.json='' +``` + +You can add supported environment variables to `parseable-env-secret` as needed. See the [environment variables documentation](/docs/self-hosted/configuration). + +After confirming that the Kubernetes Secret exists, delete the local plaintext file: + +```bash +rm parseable-env-secret +``` + +## 5. Create Enterprise Secrets + +Create the license Secret. Replace `` with the directory containing both license files: + +```bash +kubectl create secret generic parseable-license \ + --namespace parseable \ + --from-file=parseable_license.json='/parseable_license.json' \ + --from-file=parseable_license.sig='/parseable_license.sig' +``` + +Create a random 16-character shared Secret for communication between Enterprise nodes: + +```bash +kubectl create secret generic parseable-cluster-secret \ + --namespace parseable \ + --from-literal=cluster-secret="$(openssl rand -hex 8)" +``` + +## 6. Add the Parseable Helm repository + +```bash +helm repo add parseable https://charts.parseable.com +helm repo update parseable +``` + +## 7. Create `enterprise-values.yaml` + +Create a file named `enterprise-values.yaml`: + +```yaml +parseable: + deploymentMode: distributed + + store: + # MinIO and Amazon S3: s3-store + # Google Cloud Storage: gcs-store + # Azure Blob Storage: blob-store + type: s3-store + secretName: parseable-env-secret + # Google Cloud Storage only: uncomment this block. + # gcsCredentials: + # secretName: parseable-gcs-key + # secretKey: key.json + # mountPath: /var/secrets/google + + clusterSecret: + enabled: true + secretName: parseable-cluster-secret + secretKey: cluster-secret + + enterprise: + enabled: true + license: + secretName: parseable-license + mountPath: /tmp/license + dataKey: parseable_license.json + signatureKey: parseable_license.sig + distributed: + ingestor: + replicas: 3 + resources: + requests: + cpu: 250m + memory: 1Gi + limits: + cpu: 500m + memory: 4Gi + persistence: + staging: + enabled: true + storageClass: + accessMode: ReadWriteOnce + size: 5Gi + + querier: + replicas: 1 + resources: + requests: + cpu: 250m + memory: 1Gi + limits: + cpu: 500m + memory: 4Gi + persistence: + hotTier: + enabled: true + storageClass: + accessMode: ReadWriteOnce + size: 100Gi + + prism: + replicas: 1 + resources: + requests: + cpu: 500m + memory: 1Gi + limits: + cpu: "1" + memory: 2Gi +``` + +Before continuing: + +1. Set `parseable.store.type` for the object store selected in step 3. +2. If you selected Google Cloud Storage, uncomment the `gcsCredentials` block. +3. Replace both `` placeholders with a storage class returned by `kubectl get storageclass`. +4. Adjust replicas, CPU, memory, and volume sizes for your workload. + +## 8. Install Parseable Enterprise + +```bash +helm upgrade --install parseable parseable/parseable \ + --namespace parseable \ + --values ./enterprise-values.yaml \ + --wait \ + --timeout 10m +``` + +## 9. Verify the installation + +```bash +helm status parseable --namespace parseable +kubectl get pods,pvc,services,statefulsets --namespace parseable +``` + +The ingestor, querier, and Prism pods should be `Running`, and all PVCs should be `Bound`. + +## 10. Access Parseable + +Forward the Prism service: + +```bash +kubectl port-forward \ + service/parseable-prism-service 8000:80 \ + --namespace parseable +``` + +Open `http://localhost:8000` and sign in with the administrator credentials used in `parseable-env-secret`. + +Send ingestion traffic inside the cluster to: + +```text +http://parseable-ingestor-service.parseable.svc.cluster.local +``` + +## 11. Troubleshooting + +Start with Prism, then the querier, and then the ingestors: + +```bash +kubectl get events --namespace parseable --sort-by=.lastTimestamp +kubectl logs statefulset/parseable-prism --namespace parseable +kubectl logs statefulset/parseable-querier --namespace parseable +kubectl logs statefulset/parseable-ingestor --namespace parseable +``` + +- License errors usually indicate missing, incorrectly named, or invalid license files. +- `Pending` PVCs usually indicate an invalid storage class or unavailable volume provisioner. +- `CreateContainerConfigError` usually indicates a missing Secret or Secret key. +- Object-store authentication errors usually indicate incorrect credentials, permissions, endpoint, bucket, or container values. +- Use an empty bucket or container for a new Parseable cluster. Metadata from another Parseable cluster can cause credential or deployment identity conflicts. diff --git a/content/docs/self-hosted/installation/distributed/k8s-helm-oss.mdx b/content/docs/self-hosted/installation/distributed/k8s-helm-oss.mdx new file mode 100644 index 0000000..284dfe1 --- /dev/null +++ b/content/docs/self-hosted/installation/distributed/k8s-helm-oss.mdx @@ -0,0 +1,293 @@ +--- +title: Kubernetes (OSS) +description: Install Parseable OSS in distributed mode on Kubernetes with Helm. +redirect_from: + - /installation/distributed/k8s-helm + - /server/installation/distributed/setup-distributed-parseable-on-kubernetes-via-helm + - /installation/kubernetes-helm + - /installation/setup-parseable-on-kubernetes-via-helm +--- + +This guide installs Parseable OSS in distributed mode on Kubernetes. The installation creates separate ingestor and querier nodes. + +To install Parseable Enterprise, use the [distributed Enterprise Kubernetes guide](/docs/self-hosted/installation/distributed/k8s-helm-enterprise). + +## 1. Prerequisites + +Before you begin, make sure you have: + +- `kubectl` configured for your Kubernetes cluster +- Helm 3 or later +- A Kubernetes storage class +- An existing, empty object-store bucket or container +- Credentials with read, write, list, and delete access to the object store + +Confirm the Kubernetes context and find an available storage class: + +```bash +kubectl config current-context +kubectl get nodes +kubectl get storageclass +``` + +## 2. Create the namespace + +```bash +kubectl create namespace parseable +``` + +## 3. Choose an object store + +Choose exactly one object store below. Replace every `<...>` placeholder in the selected option before running the command. + +After completing one option, continue to step 4. + +### Option A: MinIO + + + This single-node MinIO setup is for testing only. Skip the installation if you + already have a MinIO or another S3-compatible object store. + + +Install MinIO and create a bucket named `parseable`: + +```bash +helm repo add minio https://charts.min.io/ +helm install --namespace minio --create-namespace --set "buckets[0].name=parseable,buckets[0].policy=none,buckets[0].purge=false,rootUser=minioadmin,rootPassword=minioadmin,replicas=1,persistence.enabled=true,persistence.storageClass="",resources.requests.memory=128Mi,mode=standalone" minio minio/minio +``` + +Forward the MinIO console port: + +```bash +kubectl port-forward svc/minio-console -n minio 9001:9001 +``` + +Open `http://localhost:9001`. A bucket named `parseable` should be available. + +Create a file named `parseable-env-secret`. These defaults work with the MinIO installation above: + +```bash +cat << EOF > parseable-env-secret +s3.url=http://minio.minio.svc.cluster.local:9000 +s3.access.key=minioadmin +s3.secret.key=minioadmin +s3.region=us-east-1 +s3.bucket=parseable +addr=0.0.0.0:8000 +username=admin +password=admin +EOF +``` + + + These credentials are for testing only. Before creating the Kubernetes Secret, + replace the MinIO and Parseable administrator credentials with secure values + that match your MinIO deployment. + + +Use `s3-store` in [`oss-values.yaml`](#6-create-oss-valuesyaml). + +### Option B: Amazon S3 + +Create a file named `parseable-env-secret` using the bucket, region, access key, and secret key provided by your AWS administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +s3.url= +s3.access.key= +s3.secret.key= +s3.bucket= +s3.region= +EOF +``` + +Use `s3-store` in [`oss-values.yaml`](#6-create-oss-valuesyaml). + +### Option C: Google Cloud Storage + +Create a file named `parseable-env-secret` using the bucket details provided by your Google Cloud administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +gcs.url= +gcs.bucket= +EOF +``` + +Keep the service-account JSON file ready. You will create its Kubernetes Secret after creating the main Secret. + + +The service-account JSON file is a credential. Store it securely and never commit it to source control. + + +Use `gcs-store` in [`oss-values.yaml`](#6-create-oss-valuesyaml). + +### Option D: Azure Blob Storage + +Create a file named `parseable-env-secret` using the storage account, container, and access key provided by your Azure administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +azr.access_key= +azr.account= +azr.container= +azr.url= +EOF +``` + +Use `blob-store` in [`oss-values.yaml`](#6-create-oss-valuesyaml). + +## 4. Create the Kubernetes Secret + +After creating the file for your selected object store, review it and create the Kubernetes Secret: + +```bash +chmod 600 parseable-env-secret + +kubectl create secret generic parseable-env-secret \ + --namespace parseable \ + --from-env-file=parseable-env-secret +``` + +If you selected Google Cloud Storage, also create the service-account key Secret: + +```bash +kubectl create secret generic parseable-gcs-key \ + --namespace parseable \ + --from-file=key.json='' +``` + +You can add supported environment variables to `parseable-env-secret` as needed. See the [environment variables documentation](/docs/self-hosted/configuration). + +After confirming that the Kubernetes Secret exists, delete the local plaintext file: + +```bash +rm parseable-env-secret +``` + +## 5. Add the Parseable Helm repository + +```bash +helm repo add parseable https://charts.parseable.com +helm repo update parseable +``` + +## 6. Create `oss-values.yaml` + +Create a file named `oss-values.yaml`: + +```yaml +parseable: + deploymentMode: distributed + + store: + # MinIO and Amazon S3: s3-store + # Google Cloud Storage: gcs-store + # Azure Blob Storage: blob-store + type: s3-store + secretName: parseable-env-secret + # Google Cloud Storage only: uncomment this block. + # gcsCredentials: + # secretName: parseable-gcs-key + # secretKey: key.json + # mountPath: /var/secrets/google + + distributed: + ingestor: + replicas: 3 + resources: + requests: + cpu: 250m + memory: 1Gi + limits: + cpu: 500m + memory: 4Gi + persistence: + staging: + enabled: true + storageClass: + accessMode: ReadWriteOnce + size: 5Gi + + querier: + replicas: 1 + resources: + requests: + cpu: 250m + memory: 1Gi + limits: + cpu: 500m + memory: 4Gi + persistence: + hotTier: + enabled: true + storageClass: + accessMode: ReadWriteOnce + size: 100Gi +``` + +Before continuing: + +1. Set `parseable.store.type` for the object store selected in step 3. +2. If you selected Google Cloud Storage, uncomment the `gcsCredentials` block. +3. Replace both `` placeholders with a storage class returned by `kubectl get storageclass`. +4. Adjust replicas, CPU, memory, and volume sizes for your workload. + +## 7. Install Parseable + +```bash +helm upgrade --install parseable parseable/parseable \ + --namespace parseable \ + --values ./oss-values.yaml \ + --wait \ + --timeout 10m +``` + +## 8. Verify the installation + +```bash +helm status parseable --namespace parseable +kubectl get pods,pvc,services,statefulsets --namespace parseable +``` + +All ingestor and querier pods should be `Running`, and all PVCs should be `Bound`. + +## 9. Access Parseable + +Forward the querier service: + +```bash +kubectl port-forward \ + service/parseable-querier-service 8000:80 \ + --namespace parseable +``` + +Open `http://localhost:8000` and sign in with the administrator credentials used in `parseable-env-secret`. + +Send ingestion traffic inside the cluster to: + +```text +http://parseable-ingestor-service.parseable.svc.cluster.local +``` + +## 10. Troubleshooting + +```bash +kubectl get events --namespace parseable --sort-by=.lastTimestamp +kubectl logs statefulset/parseable-querier --namespace parseable +kubectl logs statefulset/parseable-ingestor --namespace parseable +``` + +- `Pending` PVCs usually indicate an invalid storage class or unavailable volume provisioner. +- `CreateContainerConfigError` usually indicates a missing Secret or Secret key. +- Object-store authentication errors usually indicate incorrect credentials, permissions, endpoint, bucket, or container values. +- Use an empty bucket or container for a new Parseable cluster. Metadata from another Parseable cluster can cause credential or deployment identity conflicts. diff --git a/content/docs/self-hosted/installation/distributed/k8s-helm.mdx b/content/docs/self-hosted/installation/distributed/k8s-helm.mdx deleted file mode 100644 index efa80ee..0000000 --- a/content/docs/self-hosted/installation/distributed/k8s-helm.mdx +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Kubernetes -description: Install Parseable OSS or Enterprise in distributed mode on Kubernetes with Helm. -redirect_from: - - /installation/distributed/k8s-helm - - /server/installation/distributed/setup-distributed-parseable-on-kubernetes-via-helm - - /installation/kubernetes-helm - - /installation/setup-parseable-on-kubernetes-via-helm ---- - -This page explains how to set up Parseable OSS or Enterprise in distributed mode on Kubernetes using Helm. - -## Prerequisites - -- `kubectl` and `Helm 3 or later` installed and configured for your Kubernetes cluster. -- An S3-compatible object store such as Amazon S3 or MinIO. -- Parseable license files if you are installing Enterprise. - -You can find the available storage classes with: - -```bash -kubectl get storageclass -``` - -## Set up object store - - -The MinIO installation steps below are for testing purposes only. For production level deployment please refer to the [MinIO documentation](https://docs.min.io/aistor/). - - -Replace `YOUR_STORAGE_CLASS` with a storage class available in your cluster. - -```bash -helm repo add minio https://charts.min.io/ - -helm install minio minio/minio \ - --namespace minio \ - --create-namespace \ - --set "buckets[0].name=parseable" \ - --set "buckets[0].policy=none" \ - --set "buckets[0].purge=false" \ - --set rootUser=minioadmin \ - --set rootPassword=minioadmin \ - --set replicas=1 \ - --set mode=standalone \ - --set persistence.enabled=true \ - --set persistence.storageClass=YOUR_STORAGE_CLASS \ - --set resources.requests.memory=128Mi -``` - -To access the MinIO console: - -```bash -kubectl port-forward service/minio-console 9001:9001 --namespace minio -``` - -Open `http://localhost:9001`. A bucket named `parseable` should be available. - -### Create configuration secret - -Create a file named `parseable-env-secret` with the Parseable administrator and object-store configuration. The values below work with the MinIO test setup above. - -```bash -cat << EOF > parseable-env-secret -s3.url=http://minio.minio.svc.cluster.local:9000 -s3.access.key=minioadmin -s3.secret.key=minioadmin -s3.region=us-east-1 -s3.bucket=parseable -addr=0.0.0.0:8000 -username=admin -password=admin -EOF -``` - -You can add additional environment variables to the `parseable-env-secret` file as needed. You can find the details of all the environment variables in the [Environment variables](/docs/self-hosted/configuration) documentation. - -Create the namespace and Secret: - -```bash -kubectl create namespace parseable - -kubectl create secret generic parseable-env-secret \ - --from-env-file=parseable-env-secret \ - --namespace parseable -``` - -## Install Parseable - -Add the Parseable Helm repository: - -```bash -helm repo add parseable https://charts.parseable.com -helm repo update -``` - -The `parseable/parseable` chart supports both OSS and Enterprise. Replace `YOUR_STORAGE_CLASS` in the commands below. - -### Parseable OSS - -```bash -helm install parseable parseable/parseable \ - --namespace parseable \ - --set parseable.deploymentMode=distributed \ - --set parseable.store.type=s3-store \ - --set parseable.store.secretName=parseable-env-secret \ - --set parseable.distributed.ingestor.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ - --set parseable.distributed.querier.persistence.hotTier.storageClass=YOUR_STORAGE_CLASS \ - --wait -``` - -By default, the chart creates three ingestors and one querier. - -### Parseable Enterprise - - - -Parseable Enterprise requires license files. Contact [sales@parseable.com](mailto:sales@parseable.com) to obtain a license and Enterprise image access. - -Create the license Secret: - -```bash -kubectl create secret generic parseable-license \ - --from-file=parseable_license.json=/parseable_license.json \ - --from-file=parseable_license.sig=/parseable_license.sig \ - --namespace parseable -``` - -Enterprise nodes require a shared cluster Secret for internal communication. Create it with a random 16-character value: - -```bash -kubectl -n parseable create secret generic parseable-cluster-secret \ - --from-literal=cluster-secret="$(openssl rand -hex 8)" -``` - -Install Enterprise using the same chart with Enterprise and the cluster Secret enabled: - -```bash -helm install parseable parseable/parseable \ - --namespace parseable \ - --set parseable.deploymentMode=distributed \ - --set parseable.store.type=s3-store \ - --set parseable.store.secretName=parseable-env-secret \ - --set parseable.clusterSecret.enabled=true \ - --set parseable.enterprise.enabled=true \ - --set parseable.enterprise.license.secretName=parseable-license \ - --set parseable.distributed.ingestor.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ - --set parseable.distributed.querier.persistence.hotTier.storageClass=YOUR_STORAGE_CLASS \ - --wait -``` - -By default, Enterprise creates three ingestors, one querier, and one Prism node. - -## Verify the installation - -```bash -kubectl get pods,pvc,services --namespace parseable -``` - -All pods should be `Running` and all PVCs should be `Bound`. - -## Access Parseable - -With the release name and namespace used above, send data to the ingestor service at: - -```text -http://parseable-ingestor-service.parseable.svc.cluster.local -``` - -For OSS, forward the querier service: - -```bash -kubectl port-forward service/parseable-querier-service 8000:80 --namespace parseable -``` - -For Enterprise, forward the Prism service: - -```bash -kubectl port-forward service/parseable-prism-service 8000:80 --namespace parseable -``` - -Open `http://localhost:8000` and sign in with the username and password from `parseable-env-secret`. - -## Migrate from older chart values - -Chart version 3.0.0 uses a new values structure and one chart for both editions. - -| Older value | Chart 3 value | -| --- | --- | -| `parseable.highAvailability.enabled=true` | `parseable.deploymentMode=distributed` | -| `parseable.store=s3-store` | `parseable.store.type=s3-store` | -| `parseable.s3ModeSecret.enabled=true` | `parseable.store.secretName=parseable-env-secret` | -| Separate Enterprise chart | `parseable.enterprise.enabled=true` | diff --git a/content/docs/self-hosted/installation/standalone/k8s-oss.mdx b/content/docs/self-hosted/installation/standalone/k8s-oss.mdx new file mode 100644 index 0000000..dbf5f32 --- /dev/null +++ b/content/docs/self-hosted/installation/standalone/k8s-oss.mdx @@ -0,0 +1,286 @@ +--- +title: Kubernetes (OSS) +description: Install Parseable OSS in standalone mode on Kubernetes with Helm. +redirect_from: + - /installation/standalone/k8s +--- + +This guide installs Parseable OSS as a single standalone pod on Kubernetes. You can use local storage, MinIO, Amazon S3, Google Cloud Storage, or Azure Blob Storage. + + + Standalone mode supports Parseable OSS only. To install Parseable Enterprise, + use the [distributed Enterprise Kubernetes guide](/docs/self-hosted/installation/distributed/k8s-helm-enterprise). + + +## 1. Prerequisites + +Before you begin, make sure you have: + +- `kubectl` configured for your Kubernetes cluster +- Helm 3 or later +- A Kubernetes storage class +- An existing, empty bucket or container with access credentials if you use an object store + +Confirm the Kubernetes context and find an available storage class: + +```bash +kubectl config current-context +kubectl get nodes +kubectl get storageclass +``` + +## 2. Create the namespace + +```bash +kubectl create namespace parseable +``` + +## 3. Choose a storage option + +Choose exactly one storage option below. Replace every `<...>` placeholder in the selected option before creating the Kubernetes Secret. + +After completing one option, continue to step 4. + +### Option A: Local storage + +Create a file named `parseable-env-secret`: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +EOF +``` + +Use `local-store` in [`standalone-values.yaml`](#6-create-standalone-valuesyaml). + +### Option B: MinIO + + + This single-node MinIO setup is for testing only. Skip the installation if you + already have a MinIO or another S3-compatible object store. + + +Install MinIO and create a bucket named `parseable`: + +```bash +helm repo add minio https://charts.min.io/ +helm install --namespace minio --create-namespace --set "buckets[0].name=parseable,buckets[0].policy=none,buckets[0].purge=false,rootUser=minioadmin,rootPassword=minioadmin,replicas=1,persistence.enabled=true,persistence.storageClass="",resources.requests.memory=128Mi,mode=standalone" minio minio/minio +``` + +Forward the MinIO console port: + +```bash +kubectl port-forward svc/minio-console -n minio 9001:9001 +``` + +Open `http://localhost:9001`. A bucket named `parseable` should be available. + +Create a file named `parseable-env-secret` using the MinIO test credentials: + +```bash +cat << EOF > parseable-env-secret +s3.url=http://minio.minio.svc.cluster.local:9000 +s3.access.key=minioadmin +s3.secret.key=minioadmin +s3.region=us-east-1 +s3.bucket=parseable +addr=0.0.0.0:8000 +username=admin +password=admin +EOF +``` + + + These credentials are for testing only. Replace the MinIO and Parseable + administrator credentials before using this setup outside a test cluster. + + +Use `s3-store` in [`standalone-values.yaml`](#6-create-standalone-valuesyaml). + +### Option C: Amazon S3 + +Create a file named `parseable-env-secret` using the bucket credentials provided by your AWS administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +s3.url= +s3.access.key= +s3.secret.key= +s3.bucket= +s3.region= +EOF +``` + +Use `s3-store` in [`standalone-values.yaml`](#6-create-standalone-valuesyaml). + +### Option D: Google Cloud Storage + +Create a file named `parseable-env-secret` using the bucket details provided by your Google Cloud administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +gcs.url= +gcs.bucket= +EOF +``` + +Keep the service-account JSON file ready. You will create its Kubernetes Secret after creating the main Secret. + + + The service-account JSON file is a credential. Store it securely and never + commit it to source control. + + +Use `gcs-store` in [`standalone-values.yaml`](#6-create-standalone-valuesyaml). + +### Option E: Azure Blob Storage + +Create a file named `parseable-env-secret` using the storage credentials provided by your Azure administrator: + +```bash +cat <<'EOF' > parseable-env-secret +addr=0.0.0.0:8000 +username=admin +password= +azr.access_key= +azr.account= +azr.container= +azr.url= +EOF +``` + +Use `blob-store` in [`standalone-values.yaml`](#6-create-standalone-valuesyaml). + +## 4. Create the Kubernetes Secret + +Review the file created for your selected storage option, then create the Secret: + +```bash +chmod 600 parseable-env-secret + +kubectl create secret generic parseable-env-secret \ + --namespace parseable \ + --from-env-file=parseable-env-secret +``` + +If you selected Google Cloud Storage, also create the service-account key Secret: + +```bash +kubectl create secret generic parseable-gcs-key \ + --namespace parseable \ + --from-file=key.json='' +``` + +Confirm that the required Secrets exist without displaying their values: + +```bash +kubectl get secret parseable-env-secret --namespace parseable +kubectl get secret parseable-gcs-key --namespace parseable +``` + +The second command is required only for Google Cloud Storage. + +Delete the local plaintext configuration file after creating the Secret: + +```bash +rm parseable-env-secret +``` + +## 5. Add the Parseable Helm repository + +```bash +helm repo add parseable https://charts.parseable.com +helm repo update parseable +``` + +## 6. Create `standalone-values.yaml` + +Create a file named `standalone-values.yaml`: + +```yaml +parseable: + deploymentMode: standalone + + store: + # Local storage: local-store + # MinIO and Amazon S3: s3-store + # Google Cloud Storage: gcs-store + # Azure Blob Storage: blob-store + type: local-store + secretName: parseable-env-secret + # Google Cloud Storage only: uncomment this block. + # gcsCredentials: + # secretName: parseable-gcs-key + # secretKey: key.json + # mountPath: /var/secrets/google + + standalone: + unified: + persistence: + staging: + storageClass: + size: 5Gi + data: + # Keep enabled for local-store. Set to false for object stores. + enabled: true + storageClass: + size: 5Gi +``` + +Before continuing: + +1. Set `parseable.store.type` for the storage option selected in step 3. +2. Keep `data.enabled: true` for `local-store`; set it to `false` for an object store. +3. If you selected Google Cloud Storage, uncomment the `gcsCredentials` block. +4. Replace both `` placeholders with a storage class returned by `kubectl get storageclass`. +5. Adjust volume sizes for your workload. + +The staging volume temporarily buffers incoming data. The data volume stores permanent data only when `local-store` is selected; object-store deployments keep permanent data in the selected bucket or container. + +## 7. Install Parseable + +```bash +helm upgrade --install parseable parseable/parseable \ + --namespace parseable \ + --values ./standalone-values.yaml \ + --wait \ + --timeout 10m +``` + +## 8. Verify the installation + +```bash +helm status parseable --namespace parseable +kubectl get pods,pvc,services,deployments --namespace parseable +``` + +The Parseable pod should be `Running`, and every enabled PVC should be `Bound`. + +## 9. Access Parseable + +```bash +kubectl port-forward service/parseable-standalone-service 8000:80 --namespace parseable +``` + +Open `http://localhost:8000` and sign in with the username and password stored in `parseable-env-secret`. + +## 10. Troubleshooting + +```bash +kubectl get events --namespace parseable --sort-by=.lastTimestamp +kubectl describe pod --namespace parseable -l app.kubernetes.io/instance=parseable +kubectl logs deployment/parseable-standalone --namespace parseable --tail=200 +``` + +- `Pending` PVCs usually indicate an invalid storage class or unavailable volume provisioner. +- `CreateContainerConfigError` usually indicates a missing Secret or Secret key. +- Object-store authentication errors usually indicate incorrect credentials, permissions, endpoint, bucket, or container values. +- Use an empty bucket or container for a new Parseable installation. diff --git a/content/docs/self-hosted/installation/standalone/k8s.mdx b/content/docs/self-hosted/installation/standalone/k8s.mdx deleted file mode 100644 index 06b874a..0000000 --- a/content/docs/self-hosted/installation/standalone/k8s.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Kubernetes -description: Install Parseable OSS in standalone mode on Kubernetes with Helm. -redirect_from: - - /installation/standalone/k8s ---- - -This page explains how to set up Parseable OSS in standalone mode on Kubernetes using Helm. You can use local storage or an object store such as Amazon S3 or MinIO. - - -Standalone mode supports Parseable OSS only. To install Parseable Enterprise, use the [distributed Kubernetes installation](/docs/self-hosted/installation/distributed/k8s-helm). - - -## Prerequisites - -- `kubectl` and `Helm 3 or later` installed and configured for your Kubernetes cluster. -- A Kubernetes storage class for Parseable volumes. - -Find the available storage classes: - -```bash -kubectl get storageclass -``` - -Add the Parseable Helm repository and create a namespace: - -```bash -helm repo add parseable https://charts.parseable.com -helm repo update -kubectl create namespace parseable -``` - -Choose one of the storage options below. - -## Set up Parseable with local storage - -Create a file named `parseable-env-secret`: - -```bash -cat << EOF > parseable-env-secret -addr=0.0.0.0:8000 -username=admin -password=admin -EOF -``` - -Create the configuration Secret: - -```bash -kubectl create secret generic parseable-env-secret \ - --from-env-file=parseable-env-secret \ - --namespace parseable -``` - -Replace `YOUR_STORAGE_CLASS` with a storage class available in your cluster, then install Parseable: - -```bash -helm install parseable parseable/parseable \ - --namespace parseable \ - --set parseable.deploymentMode=standalone \ - --set parseable.store.type=local-store \ - --set parseable.store.secretName=parseable-env-secret \ - --set parseable.standalone.unified.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ - --set parseable.standalone.unified.persistence.data.enabled=true \ - --set parseable.standalone.unified.persistence.data.storageClass=YOUR_STORAGE_CLASS \ - --wait -``` - -The staging PVC temporarily buffers incoming data. The data PVC stores the actual local data and keeps it across pod replacements. - -## Set up Parseable with S3 storage - -### Set up MinIO for testing - - -The MinIO steps below are for testing only. Skip this section if you already have an S3-compatible object store. - - -```bash -helm repo add minio https://charts.min.io/ - -helm install minio minio/minio \ - --namespace minio \ - --create-namespace \ - --set "buckets[0].name=parseable" \ - --set "buckets[0].policy=none" \ - --set "buckets[0].purge=false" \ - --set rootUser=minioadmin \ - --set rootPassword=minioadmin \ - --set replicas=1 \ - --set mode=standalone \ - --set persistence.enabled=false \ - --set resources.requests.memory=128Mi -``` - -To access the MinIO console: - -```bash -kubectl port-forward service/minio-console 9001:9001 --namespace minio -``` - -Open `http://localhost:9001`. A bucket named `parseable` should be available. - -MinIO provides an S3-compatible API, so Parseable uses `s3-store` with the MinIO service as its S3 endpoint. - -### Create configuration secret - -Create a file named `parseable-env-secret`. The values below work with the MinIO test setup above. - -```bash -cat << EOF > parseable-env-secret -s3.url=http://minio.minio.svc.cluster.local:9000 -s3.access.key=minioadmin -s3.secret.key=minioadmin -s3.region=us-east-1 -s3.bucket=parseable -addr=0.0.0.0:8000 -username=admin -password=admin -EOF -``` - -If you are using another S3-compatible object store, replace the endpoint and credentials with your own values. - -Create the configuration Secret: - -```bash -kubectl create secret generic parseable-env-secret \ - --from-env-file=parseable-env-secret \ - --namespace parseable -``` - -Replace `YOUR_STORAGE_CLASS`, then install Parseable: - -```bash -helm install parseable parseable/parseable \ - --namespace parseable \ - --set parseable.deploymentMode=standalone \ - --set parseable.store.type=s3-store \ - --set parseable.store.secretName=parseable-env-secret \ - --set parseable.standalone.unified.persistence.staging.storageClass=YOUR_STORAGE_CLASS \ - --wait -``` - -With S3 or MinIO, permanent data is stored in the object store. Only the local staging PVC is required. - -## Verify the installation - -```bash -kubectl get pods,pvc,services --namespace parseable -``` - -The Parseable pod should be `Running` and its PVCs should be `Bound`. - -## Access Parseable - -```bash -kubectl port-forward service/parseable-standalone-service 8000:80 --namespace parseable -``` - -Open `http://localhost:8000` and sign in with the username and password from `parseable-env-secret`. From 0231c09d69fed2d6951c4a5fc9c68299453f1991 Mon Sep 17 00:00:00 2001 From: Aadish Jain Date: Thu, 23 Jul 2026 21:47:46 +0530 Subject: [PATCH 4/4] feat: add MdxLink component for enhanced link handling in documentation --- app/(docs)/[[...slug]]/page.tsx | 48 +++++++++++++++++---------------- components/MdxLink.tsx | 17 ++++++++++++ 2 files changed, 42 insertions(+), 23 deletions(-) create mode 100644 components/MdxLink.tsx diff --git a/app/(docs)/[[...slug]]/page.tsx b/app/(docs)/[[...slug]]/page.tsx index 2aa72b0..1978aeb 100644 --- a/app/(docs)/[[...slug]]/page.tsx +++ b/app/(docs)/[[...slug]]/page.tsx @@ -1,25 +1,26 @@ -import { source } from '@/lib/source'; +import { source } from "@/lib/source"; import { DocsPage, DocsBody, DocsDescription, DocsTitle, -} from 'fumadocs-ui/page'; -import { notFound, redirect } from 'next/navigation'; -import { createRelativeLink } from 'fumadocs-ui/mdx'; -import { getMDXComponents } from '@/mdx-components'; -import { CopyPageDropdown } from '@/components/CopyPageDropdown'; -import { Feedback } from '@/components/feedback/client'; -import { onPageFeedbackAction } from '@/components/feedback/actions'; +} from "fumadocs-ui/page"; +import { notFound, redirect } from "next/navigation"; +import { createRelativeLink } from "fumadocs-ui/mdx"; +import { getMDXComponents } from "@/mdx-components"; +import { CopyPageDropdown } from "@/components/CopyPageDropdown"; +import { Feedback } from "@/components/feedback/client"; +import { onPageFeedbackAction } from "@/components/feedback/actions"; +import { MdxLink } from "@/components/MdxLink"; export default async function Page(props: { params: Promise<{ slug?: string[] }>; }) { const params = await props.params; - + // If we're at the root path, show the index page (Get Started) // No redirect needed - the index page will be shown - + // Otherwise, show the regular docs page const page = source.getPage(params.slug); if (!page) notFound(); @@ -27,27 +28,30 @@ export default async function Page(props: { const MDXContent = page.data.body; return ( - {page.data.title} {page.data.description}
- +
-
+
@@ -56,8 +60,6 @@ export default async function Page(props: { ); } - - export async function generateStaticParams() { return source.generateParams(); } @@ -66,15 +68,15 @@ export async function generateMetadata(props: { params: Promise<{ slug?: string[] }>; }) { const params = await props.params; - + // Handle root /docs path - will redirect, but provide metadata just in case if (!params.slug || params.slug.length === 0) { return { - title: 'Parseable Documentation', - description: 'Welcome to the Parseable documentation', + title: "Parseable Documentation", + description: "Welcome to the Parseable documentation", }; } - + const page = source.getPage(params.slug); if (!page) notFound(); diff --git a/components/MdxLink.tsx b/components/MdxLink.tsx new file mode 100644 index 0000000..8cfff15 --- /dev/null +++ b/components/MdxLink.tsx @@ -0,0 +1,17 @@ +import Link from "fumadocs-core/link"; +import type { ComponentProps } from "react"; + +export function MdxLink({ + href, + external, + prefetch, + ...props +}: ComponentProps) { + if (typeof href === "string" && href.startsWith("#")) { + return ; + } + + return ( + + ); +}