diff --git a/helm/templates/sts-coordinator.yaml b/helm/templates/sts-coordinator.yaml index 6e187bd982..a92ace6f00 100644 --- a/helm/templates/sts-coordinator.yaml +++ b/helm/templates/sts-coordinator.yaml @@ -24,7 +24,7 @@ metadata: {{- include "fluss.labels" . | nindent 4 }} spec: serviceName: coordinator-server-hs - replicas: {{ .Values.coordinator.numberOfReplicas }} + replicas: {{ .Values.coordinator.replicas }} selector: matchLabels: {{- include "fluss.selectorLabels" . | nindent 6 }} @@ -81,21 +81,21 @@ spec: bin/coordinator-server.sh start-foreground livenessProbe: - failureThreshold: 100 - timeoutSeconds: 1 - initialDelaySeconds: 10 - periodSeconds: 3 + failureThreshold: {{ .Values.coordinator.livenessProbe.failureThreshold }} + timeoutSeconds: {{ .Values.coordinator.livenessProbe.timeoutSeconds }} + initialDelaySeconds: {{ .Values.coordinator.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.coordinator.livenessProbe.periodSeconds }} tcpSocket: port: {{ .Values.listeners.client.port }} readinessProbe: - failureThreshold: 100 - timeoutSeconds: 1 - initialDelaySeconds: 10 - periodSeconds: 3 + failureThreshold: {{ .Values.coordinator.readinessProbe.failureThreshold }} + timeoutSeconds: {{ .Values.coordinator.readinessProbe.timeoutSeconds }} + initialDelaySeconds: {{ .Values.coordinator.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.coordinator.readinessProbe.periodSeconds }} tcpSocket: port: {{ .Values.listeners.client.port }} resources: - {{- toYaml .Values.resources.coordinatorServer | nindent 12 }} + {{- toYaml .Values.coordinator.resources | nindent 12 }} volumeMounts: - name: fluss-conf mountPath: /opt/conf diff --git a/helm/templates/sts-tablet.yaml b/helm/templates/sts-tablet.yaml index aa60cf462c..21de5af1f4 100644 --- a/helm/templates/sts-tablet.yaml +++ b/helm/templates/sts-tablet.yaml @@ -24,7 +24,7 @@ metadata: {{- include "fluss.labels" . | nindent 4 }} spec: serviceName: tablet-server-hs - replicas: {{ .Values.tablet.numberOfReplicas }} + replicas: {{ .Values.tablet.replicas }} selector: matchLabels: {{- include "fluss.selectorLabels" . | nindent 6 }} @@ -78,21 +78,21 @@ spec: bin/tablet-server.sh start-foreground livenessProbe: - failureThreshold: 100 - timeoutSeconds: 1 - initialDelaySeconds: 10 - periodSeconds: 3 + failureThreshold: {{ .Values.tablet.livenessProbe.failureThreshold }} + timeoutSeconds: {{ .Values.tablet.livenessProbe.timeoutSeconds }} + initialDelaySeconds: {{ .Values.tablet.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.tablet.livenessProbe.periodSeconds }} tcpSocket: port: {{ .Values.listeners.client.port }} readinessProbe: - failureThreshold: 100 - timeoutSeconds: 1 - initialDelaySeconds: 10 - periodSeconds: 3 + failureThreshold: {{ .Values.tablet.readinessProbe.failureThreshold }} + timeoutSeconds: {{ .Values.tablet.readinessProbe.timeoutSeconds }} + initialDelaySeconds: {{ .Values.tablet.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.tablet.readinessProbe.periodSeconds }} tcpSocket: port: {{ .Values.listeners.client.port }} resources: - {{- toYaml .Values.resources.tabletServer | nindent 12 }} + {{- toYaml .Values.tablet.resources | nindent 12 }} volumeMounts: - name: fluss-conf mountPath: /opt/conf diff --git a/helm/tests/coordinator_statefulset_test.yaml b/helm/tests/coordinator_statefulset_test.yaml new file mode 100644 index 0000000000..6b2d1d2ce2 --- /dev/null +++ b/helm/tests/coordinator_statefulset_test.yaml @@ -0,0 +1,166 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +suite: coordinator statefulset +templates: + - templates/sts-coordinator.yaml + +tests: + - it: should set default replicas to 1 + asserts: + - equal: + path: spec.replicas + value: 1 + + - it: should allow overriding replicas + set: + coordinator.replicas: 3 + asserts: + - equal: + path: spec.replicas + value: 3 + + - it: should set default liveness probe values + asserts: + - equal: + path: spec.template.spec.containers[0].livenessProbe.failureThreshold + value: 100 + - equal: + path: spec.template.spec.containers[0].livenessProbe.timeoutSeconds + value: 1 + - equal: + path: spec.template.spec.containers[0].livenessProbe.initialDelaySeconds + value: 10 + - equal: + path: spec.template.spec.containers[0].livenessProbe.periodSeconds + value: 3 + - equal: + path: spec.template.spec.containers[0].livenessProbe.tcpSocket.port + value: 9124 + + - it: should set default readiness probe values + asserts: + - equal: + path: spec.template.spec.containers[0].readinessProbe.failureThreshold + value: 100 + - equal: + path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds + value: 1 + - equal: + path: spec.template.spec.containers[0].readinessProbe.initialDelaySeconds + value: 10 + - equal: + path: spec.template.spec.containers[0].readinessProbe.periodSeconds + value: 3 + - equal: + path: spec.template.spec.containers[0].readinessProbe.tcpSocket.port + value: 9124 + + - it: should allow overriding liveness probe values + set: + coordinator.livenessProbe.failureThreshold: 50 + coordinator.livenessProbe.timeoutSeconds: 5 + coordinator.livenessProbe.initialDelaySeconds: 30 + coordinator.livenessProbe.periodSeconds: 10 + asserts: + - equal: + path: spec.template.spec.containers[0].livenessProbe.failureThreshold + value: 50 + - equal: + path: spec.template.spec.containers[0].livenessProbe.timeoutSeconds + value: 5 + - equal: + path: spec.template.spec.containers[0].livenessProbe.initialDelaySeconds + value: 30 + - equal: + path: spec.template.spec.containers[0].livenessProbe.periodSeconds + value: 10 + + - it: should allow overriding readiness probe values + set: + coordinator.readinessProbe.failureThreshold: 50 + coordinator.readinessProbe.timeoutSeconds: 5 + coordinator.readinessProbe.initialDelaySeconds: 30 + coordinator.readinessProbe.periodSeconds: 10 + asserts: + - equal: + path: spec.template.spec.containers[0].readinessProbe.failureThreshold + value: 50 + - equal: + path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds + value: 5 + - equal: + path: spec.template.spec.containers[0].readinessProbe.initialDelaySeconds + value: 30 + - equal: + path: spec.template.spec.containers[0].readinessProbe.periodSeconds + value: 10 + + - it: should have empty resources by default + asserts: + - equal: + path: spec.template.spec.containers[0].resources + value: {} + + - it: should allow setting resource requests and limits + set: + coordinator.resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + asserts: + - equal: + path: spec.template.spec.containers[0].resources.requests.cpu + value: 500m + - equal: + path: spec.template.spec.containers[0].resources.requests.memory + value: 512Mi + - equal: + path: spec.template.spec.containers[0].resources.limits.cpu + value: "1" + - equal: + path: spec.template.spec.containers[0].resources.limits.memory + value: 1Gi + + - it: should use emptyDir volume when storage is disabled + set: + coordinator.storage.enabled: false + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: data + emptyDir: {} + - isNull: + path: spec.volumeClaimTemplates + + - it: should create volumeClaimTemplate when storage is enabled + set: + coordinator.storage.enabled: true + coordinator.storage.size: 5Gi + coordinator.storage.storageClass: fast-ssd + asserts: + - equal: + path: spec.volumeClaimTemplates[0].spec.resources.requests.storage + value: 5Gi + - equal: + path: spec.volumeClaimTemplates[0].spec.storageClassName + value: fast-ssd diff --git a/helm/tests/tablet_statefulset_test.yaml b/helm/tests/tablet_statefulset_test.yaml new file mode 100644 index 0000000000..29ee927f13 --- /dev/null +++ b/helm/tests/tablet_statefulset_test.yaml @@ -0,0 +1,166 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +suite: tablet statefulset +templates: + - templates/sts-tablet.yaml + +tests: + - it: should set default replicas to 3 + asserts: + - equal: + path: spec.replicas + value: 3 + + - it: should allow overriding replicas + set: + tablet.replicas: 5 + asserts: + - equal: + path: spec.replicas + value: 5 + + - it: should set default liveness probe values + asserts: + - equal: + path: spec.template.spec.containers[0].livenessProbe.failureThreshold + value: 100 + - equal: + path: spec.template.spec.containers[0].livenessProbe.timeoutSeconds + value: 1 + - equal: + path: spec.template.spec.containers[0].livenessProbe.initialDelaySeconds + value: 10 + - equal: + path: spec.template.spec.containers[0].livenessProbe.periodSeconds + value: 3 + - equal: + path: spec.template.spec.containers[0].livenessProbe.tcpSocket.port + value: 9124 + + - it: should set default readiness probe values + asserts: + - equal: + path: spec.template.spec.containers[0].readinessProbe.failureThreshold + value: 100 + - equal: + path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds + value: 1 + - equal: + path: spec.template.spec.containers[0].readinessProbe.initialDelaySeconds + value: 10 + - equal: + path: spec.template.spec.containers[0].readinessProbe.periodSeconds + value: 3 + - equal: + path: spec.template.spec.containers[0].readinessProbe.tcpSocket.port + value: 9124 + + - it: should allow overriding liveness probe values + set: + tablet.livenessProbe.failureThreshold: 50 + tablet.livenessProbe.timeoutSeconds: 5 + tablet.livenessProbe.initialDelaySeconds: 30 + tablet.livenessProbe.periodSeconds: 10 + asserts: + - equal: + path: spec.template.spec.containers[0].livenessProbe.failureThreshold + value: 50 + - equal: + path: spec.template.spec.containers[0].livenessProbe.timeoutSeconds + value: 5 + - equal: + path: spec.template.spec.containers[0].livenessProbe.initialDelaySeconds + value: 30 + - equal: + path: spec.template.spec.containers[0].livenessProbe.periodSeconds + value: 10 + + - it: should allow overriding readiness probe values + set: + tablet.readinessProbe.failureThreshold: 50 + tablet.readinessProbe.timeoutSeconds: 5 + tablet.readinessProbe.initialDelaySeconds: 30 + tablet.readinessProbe.periodSeconds: 10 + asserts: + - equal: + path: spec.template.spec.containers[0].readinessProbe.failureThreshold + value: 50 + - equal: + path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds + value: 5 + - equal: + path: spec.template.spec.containers[0].readinessProbe.initialDelaySeconds + value: 30 + - equal: + path: spec.template.spec.containers[0].readinessProbe.periodSeconds + value: 10 + + - it: should have empty resources by default + asserts: + - equal: + path: spec.template.spec.containers[0].resources + value: {} + + - it: should allow setting resource requests and limits + set: + tablet.resources: + requests: + cpu: "1" + memory: 2Gi + limits: + cpu: "2" + memory: 4Gi + asserts: + - equal: + path: spec.template.spec.containers[0].resources.requests.cpu + value: "1" + - equal: + path: spec.template.spec.containers[0].resources.requests.memory + value: 2Gi + - equal: + path: spec.template.spec.containers[0].resources.limits.cpu + value: "2" + - equal: + path: spec.template.spec.containers[0].resources.limits.memory + value: 4Gi + + - it: should use emptyDir volume when storage is disabled + set: + tablet.storage.enabled: false + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: data + emptyDir: {} + - isNull: + path: spec.volumeClaimTemplates + + - it: should create volumeClaimTemplate when storage is enabled + set: + tablet.storage.enabled: true + tablet.storage.size: 20Gi + tablet.storage.storageClass: fast-ssd + asserts: + - equal: + path: spec.volumeClaimTemplates[0].spec.resources.requests.storage + value: 20Gi + - equal: + path: spec.volumeClaimTemplates[0].spec.storageClassName + value: fast-ssd diff --git a/helm/values.yaml b/helm/values.yaml index db5d3fc2a9..8e5137bac0 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -38,14 +38,48 @@ configurationOverrides: internal.listener.name: INTERNAL tablet: - numberOfReplicas: 3 + replicas: 3 + livenessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 + readinessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi storage: enabled: false size: 1Gi storageClass: coordinator: - numberOfReplicas: 1 + replicas: 1 + livenessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 + readinessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi storage: enabled: false size: 1Gi @@ -58,26 +92,6 @@ listeners: client: port: 9124 -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # coordinatorServer: - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - # tabletServer: - # requests: - # cpu: 100m - # memory: 128Mi - # limits: - # cpu: 100m - # memory: 128Mi - serviceAccount: create: false # If not set and create is true, a name is generated using the fullname template diff --git a/website/docs/install-deploy/deploying-with-helm.md b/website/docs/install-deploy/deploying-with-helm.md index 9bdbf414e5..a4c011b5a2 100644 --- a/website/docs/install-deploy/deploying-with-helm.md +++ b/website/docs/install-deploy/deploying-with-helm.md @@ -23,14 +23,14 @@ the installation documentation provides instructions for deploying one using Bit ## Supported Versions -| Component | Minimum Version | Recommended Version | -|-----------|----------------|-------------------| -| [Kubernetes](https://kubernetes.io) | v1.19+ | v1.25+ | -| [Helm](https://helm.sh) | v3.8.0+ | v3.18.6+ | -| [ZooKeeper](https://zookeeper.apache.org) | v3.6+ | v3.8+ | -| [Apache Fluss](https://fluss.apache.org/docs/) (Container Image) | $FLUSS_VERSION$ | $FLUSS_VERSION$ | -| [Minikube](https://minikube.sigs.k8s.io) (Local Development) | v1.25+ | v1.32+ | -| [Docker](https://docs.docker.com/) (Local Development) | v20.10+ | v24.0+ | +| Component | Minimum Version | Recommended Version | +|------------------------------------------------------------------|-----------------|---------------------| +| [Kubernetes](https://kubernetes.io) | v1.19+ | v1.25+ | +| [Helm](https://helm.sh) | v3.8.0+ | v3.18.6+ | +| [ZooKeeper](https://zookeeper.apache.org) | v3.6+ | v3.8+ | +| [Apache Fluss](https://fluss.apache.org/docs/) (Container Image) | $FLUSS_VERSION$ | $FLUSS_VERSION$ | +| [Minikube](https://minikube.sigs.k8s.io) (Local Development) | v1.25+ | v1.32+ | +| [Docker](https://docs.docker.com/) (Local Development) | v20.10+ | v24.0+ | ## Installation @@ -136,8 +136,8 @@ minikube delete The Fluss Helm chart deploys the following Kubernetes resources: ### Core Components -- **CoordinatorServer**: 1x StatefulSet with Headless Service for cluster coordination -- **TabletServer**: 3x StatefulSet with Headless Service for data storage and processing +- **CoordinatorServer**: StatefulSet (default: 1 replica) with Headless Service for cluster coordination +- **TabletServer**: StatefulSet (default: 3 replicas) with Headless Service for data storage and processing - **ConfigMap**: Configuration management for `server.yaml` settings - **Services**: Headless services providing stable pod DNS names @@ -161,69 +161,75 @@ The following table lists the configurable parameters of the Fluss chart and the ### Global Parameters -| Parameter | Description | Default | -|-----------|-------------|---------| -| `nameOverride` | Override the name of the chart | `""` | -| `fullnameOverride` | Override the full name of the resources | `""` | +| Parameter | Description | Default | +|--------------------|-----------------------------------------|---------| +| `nameOverride` | Override the name of the chart | `""` | +| `fullnameOverride` | Override the full name of the resources | `""` | ### Image Parameters -| Parameter | Description | Default | -|-----------|-------------|---------| -| `image.registry` | Container image registry | `""` | -| `image.repository` | Container image repository | `fluss` | -| `image.tag` | Container image tag | `$FLUSS_VERSION$` | -| `image.pullPolicy` | Container image pull policy | `IfNotPresent` | -| `image.pullSecrets` | Container image pull secrets | `[]` | +| Parameter | Description | Default | +|---------------------|------------------------------|-------------------| +| `image.registry` | Container image registry | `""` | +| `image.repository` | Container image repository | `fluss` | +| `image.tag` | Container image tag | `$FLUSS_VERSION$` | +| `image.pullPolicy` | Container image pull policy | `IfNotPresent` | +| `image.pullSecrets` | Container image pull secrets | `[]` | ### Application Configuration -| Parameter | Description | Default | -|-----------|-------------|---------| -| `listeners.internal.port` | Internal communication port | `9123` | -| `listeners.client.port` | Client port (intra-cluster) | `9124` | +| Parameter | Description | Default | +|---------------------------|-----------------------------|---------| +| `listeners.internal.port` | Internal communication port | `9123` | +| `listeners.client.port` | Client port (intra-cluster) | `9124` | ### Fluss Configuration Overrides -| Parameter | Description | Default | -|-----------|-------------|---------| -| `configurationOverrides.default.bucket.number` | Default number of buckets for tables | `3` | -| `configurationOverrides.default.replication.factor` | Default replication factor | `3` | -| `configurationOverrides.zookeeper.path.root` | ZooKeeper root path for Fluss | `/fluss` | -| `configurationOverrides.zookeeper.address` | ZooKeeper ensemble address | `zk-zookeeper.{{ .Release.Namespace }}.svc.cluster.local:2181` | -| `configurationOverrides.remote.data.dir` | Remote data directory for snapshots | `/tmp/fluss/remote-data` | -| `configurationOverrides.data.dir` | Local data directory | `/tmp/fluss/data` | -| `configurationOverrides.internal.listener.name` | Internal listener name | `INTERNAL` | +| Parameter | Description | Default | +|-----------------------------------------------------|--------------------------------------|----------------------------------------------------------------| +| `configurationOverrides.default.bucket.number` | Default number of buckets for tables | `3` | +| `configurationOverrides.default.replication.factor` | Default replication factor | `3` | +| `configurationOverrides.zookeeper.path.root` | ZooKeeper root path for Fluss | `/fluss` | +| `configurationOverrides.zookeeper.address` | ZooKeeper ensemble address | `zk-zookeeper.{{ .Release.Namespace }}.svc.cluster.local:2181` | +| `configurationOverrides.remote.data.dir` | Remote data directory for snapshots | `/tmp/fluss/remote-data` | +| `configurationOverrides.data.dir` | Local data directory | `/tmp/fluss/data` | +| `configurationOverrides.internal.listener.name` | Internal listener name | `INTERNAL` | + +### Coordinator Server Parameters + +| Parameter | Description | Default | +|--------------------------------------------------|---------------------------------------------------------|----------------------| +| `coordinator.replicas` | Number of CoordinatorServer replicas to deploy | `1` | +| `coordinator.livenessProbe.failureThreshold` | Liveness probe failure threshold | `100` | +| `coordinator.livenessProbe.timeoutSeconds` | Liveness probe timeout | `1` | +| `coordinator.livenessProbe.initialDelaySeconds` | Liveness probe initial delay | `10` | +| `coordinator.livenessProbe.periodSeconds` | Liveness probe period | `3` | +| `coordinator.readinessProbe.failureThreshold` | Readiness probe failure threshold | `100` | +| `coordinator.readinessProbe.timeoutSeconds` | Readiness probe timeout | `1` | +| `coordinator.readinessProbe.initialDelaySeconds` | Readiness probe initial delay | `10` | +| `coordinator.readinessProbe.periodSeconds` | Readiness probe period | `3` | +| `coordinator.resources` | CPU/memory resource requests and limits for coordinator | `{}` | +| `coordinator.storage.enabled` | Enable persistent volume claims for CoordinatorServer | `false` | +| `coordinator.storage.size` | Coordinator persistent volume size | `1Gi` | +| `coordinator.storage.storageClass` | Coordinator storage class name | `nil` (uses default) | ### Tablet Server Parameters -| Parameter | Description | Default | -|-----------|-------------|---------| -| `tablet.numberOfReplicas` | Number of TabletServer replicas to deploy | `3` | - -### Storage Parameters - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `coordinator.storage.enabled` | Enable persistent volume claims for CoordinatorServer | `false` | -| `coordinator.storage.size` | Coordinator persistent volume size | `1Gi` | -| `coordinator.storage.storageClass` | Coordinator storage class name | `nil` (uses default) | -| `tablet.storage.enabled` | Enable persistent volume claims for TabletServer | `false` | -| `tablet.storage.size` | Tablet persistent volume size | `1Gi` | -| `tablet.storage.storageClass` | Tablet storage class name | `nil` (uses default) | - -### Resource Parameters - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `resources.coordinatorServer.requests.cpu` | CPU requests for coordinator | Not set | -| `resources.coordinatorServer.requests.memory` | Memory requests for coordinator | Not set | -| `resources.coordinatorServer.limits.cpu` | CPU limits for coordinator | Not set | -| `resources.coordinatorServer.limits.memory` | Memory limits for coordinator | Not set | -| `resources.tabletServer.requests.cpu` | CPU requests for tablet servers | Not set | -| `resources.tabletServer.requests.memory` | Memory requests for tablet servers | Not set | -| `resources.tabletServer.limits.cpu` | CPU limits for tablet servers | Not set | -| `resources.tabletServer.limits.memory` | Memory limits for tablet servers | Not set | +| Parameter | Description | Default | +|---------------------------------------------|------------------------------------------------------------|----------------------| +| `tablet.replicas` | Number of TabletServer replicas to deploy | `3` | +| `tablet.livenessProbe.failureThreshold` | Liveness probe failure threshold | `100` | +| `tablet.livenessProbe.timeoutSeconds` | Liveness probe timeout | `1` | +| `tablet.livenessProbe.initialDelaySeconds` | Liveness probe initial delay | `10` | +| `tablet.livenessProbe.periodSeconds` | Liveness probe period | `3` | +| `tablet.readinessProbe.failureThreshold` | Readiness probe failure threshold | `100` | +| `tablet.readinessProbe.timeoutSeconds` | Readiness probe timeout | `1` | +| `tablet.readinessProbe.initialDelaySeconds` | Readiness probe initial delay | `10` | +| `tablet.readinessProbe.periodSeconds` | Readiness probe period | `3` | +| `tablet.resources` | CPU/memory resource requests and limits for tablet servers | `{}` | +| `tablet.storage.enabled` | Enable persistent volume claims for TabletServer | `false` | +| `tablet.storage.size` | Tablet persistent volume size | `1Gi` | +| `tablet.storage.storageClass` | Tablet storage class name | `nil` (uses default) | ## Advanced Configuration @@ -255,18 +261,34 @@ listeners: port: 9124 ``` -### Storage Configuration +### Component Configuration -Configure different storage volumes for coordinator or tablet pods: +Each component (coordinator and tablet) supports independent configuration for replicas, resource requests/limits, health check probes, and storage: ```yaml coordinator: + replicas: 1 + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi storage: enabled: true size: 5Gi storageClass: fast-ssd tablet: + replicas: 5 + resources: + requests: + cpu: "1" + memory: 2Gi + limits: + cpu: "2" + memory: 4Gi storage: enabled: true size: 20Gi @@ -331,22 +353,32 @@ image: ### Health Checks -The chart includes liveness and readiness probes: +The chart includes configurable liveness and readiness probes for each component. The probes use TCP socket checks on the client port. You can customize them per component: ```yaml -livenessProbe: - tcpSocket: - port: 9124 - initialDelaySeconds: 10 - periodSeconds: 3 - failureThreshold: 100 +coordinator: + livenessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 + readinessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 -readinessProbe: - tcpSocket: - port: 9124 - initialDelaySeconds: 10 - periodSeconds: 3 - failureThreshold: 100 +tablet: + livenessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 + readinessProbe: + failureThreshold: 100 + timeoutSeconds: 1 + initialDelaySeconds: 10 + periodSeconds: 3 ``` ### Logs