This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb-helm.git


The following commit(s) were added to refs/heads/master by this push:
     new a0d7ca4  Add the FODC Agent and Proxy components to the Helm chart 
(#45)
a0d7ca4 is described below

commit a0d7ca4fc2e431368c70d2418ae477548afd270b
Author: Fine0830 <[email protected]>
AuthorDate: Wed Jan 14 13:31:38 2026 +0800

    Add the FODC Agent and Proxy components to the Helm chart (#45)
    
    * add FODC Proxy component to the Helm char
---
 .github/workflows/e2e.ci.yaml                      |   2 +
 CHANGES.md                                         |   4 +
 chart/templates/NOTES.txt                          |  16 ++
 chart/templates/cluster_data_statefulset.yaml      |  80 ++++++
 chart/templates/cluster_fodc_proxy_deployment.yaml | 172 +++++++++++++
 chart/templates/cluster_fodc_proxy_service.yaml    |  85 ++++++
 chart/templates/cluster_liaison_statefulset.yaml   |  93 ++++++-
 chart/templates/ingress.yaml                       |  48 ++++
 chart/templates/pdb.yaml                           |  27 ++
 chart/templates/standalone_statefulset.yaml        | 103 ++++++++
 chart/values-lifecycle.yaml                        | 196 ++++++++++++++
 chart/values.yaml                                  | 197 ++++++++++++++
 doc/parameters.md                                  |  99 ++++++-
 test/e2e/e2e-banyandb-fodc-proxy-service.yaml      | 121 +++++++++
 test/e2e/env                                       |   2 +-
 test/e2e/values.cluster.yaml                       |   3 +
 test/e2e/values.dns.registry.yaml                  |   2 +
 .../{values.lifecycle.yaml => values.fodc.yaml}    | 285 ++++++++++-----------
 test/e2e/values.lifecycle.yaml                     |   3 +
 19 files changed, 1380 insertions(+), 158 deletions(-)

diff --git a/.github/workflows/e2e.ci.yaml b/.github/workflows/e2e.ci.yaml
index 2157249..208b2c7 100644
--- a/.github/workflows/e2e.ci.yaml
+++ b/.github/workflows/e2e.ci.yaml
@@ -41,6 +41,8 @@ jobs:
             config: test/e2e/e2e-banyandb-cluster.yaml
           - name: Run Skywalking E2E Test (BanyanDB lifecycle as database)
             config: test/e2e/e2e-banyandb-lifecycle.yaml
+          - name: Run Skywalking E2E Test (FODC Proxy Service)
+            config: test/e2e/e2e-banyandb-fodc-proxy-service.yaml
           - name: Run Skywalking E2E Test (BanyanDB DNS node registry)
             config: test/e2e/e2e-banyandb-node-registry-dns.yaml
     name: ${{ matrix.test.name }}
diff --git a/CHANGES.md b/CHANGES.md
index 2fbcfbb..9759da3 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -12,6 +12,10 @@ Release Notes.
 0.5.3
 -----------------
 
+#### Features
+
+-  Add the FODC Agent and Proxy components to the Helm chart.
+
 #### Bugs
 
 - Fix missing port in data node list for liaison.
diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index dc20101..725f9e5 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -13,6 +13,22 @@
 
    Note: adjust the key if you changed `auth.credentialsFileKey`.
 {{- end }}
+
+{{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+FODC (First Occurrence Data Collection) Proxy is enabled.
+
+The FODC Proxy provides:
+- Agent registry
+- Aggregated metrics endpoints (/metrics, /metrics-windows)
+
+Services:
+- gRPC (Agent connections): {{ template "banyandb.fullname" . 
}}-fodc-proxy-grpc:{{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+- HTTP (Metrics & APIs): {{ template "banyandb.fullname" . 
}}-fodc-proxy-http:{{ .Values.cluster.fodc.proxy.httpSvc.port }}
+
+To access the FODC Proxy metrics:
+   kubectl port-forward svc/{{ template "banyandb.fullname" . 
}}-fodc-proxy-http -n {{ .Release.Namespace }} {{ 
.Values.cluster.fodc.proxy.httpSvc.port }}:{{ 
.Values.cluster.fodc.proxy.httpSvc.port }}
+   curl http://localhost:{{ .Values.cluster.fodc.proxy.httpSvc.port }}/metrics
+{{- end }}
 {{/*
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
diff --git a/chart/templates/cluster_data_statefulset.yaml 
b/chart/templates/cluster_data_statefulset.yaml
index 6bc33de..18af49b 100644
--- a/chart/templates/cluster_data_statefulset.yaml
+++ b/chart/templates/cluster_data_statefulset.yaml
@@ -298,6 +298,86 @@ spec:
               readOnly: true
             {{- end }}
           {{- end }}
+        {{- if and $.Values.cluster.enabled $.Values.cluster.fodc.enabled }}
+        - name: fodc-agent
+          image: {{ $.Values.cluster.fodc.agent.image.repository }}:{{ default 
$.Values.image.tag $.Values.cluster.fodc.agent.image.tag }}
+          imagePullPolicy: {{ $.Values.cluster.fodc.agent.image.pullPolicy }}
+          {{- with $.Values.cluster.fodc.agent.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
+          args:
+            - --proxy-addr={{ template "banyandb.fullname" $ 
}}-fodc-proxy-grpc:{{ $.Values.cluster.fodc.proxy.grpcSvc.port }}
+            - --node-ip=127.0.0.1
+            - --node-port={{ $.Values.cluster.data.nodeTemplate.grpcSvc.port }}
+            - --node-role=datanode-{{ $roleName }}
+            - --metrics-endpoint=http://127.0.0.1:2121/metrics
+            - --poll-metrics-interval={{ 
$.Values.cluster.fodc.agent.config.scrapeInterval }}
+            - --prometheus-listen-addr=:{{ 
$.Values.cluster.fodc.agent.httpPort }}
+            - --max-metrics-memory-usage-percentage={{ 
$.Values.cluster.fodc.agent.config.ktmEnabled | ternary 10 5 }}
+            - --heartbeat-interval={{ 
$.Values.cluster.fodc.agent.config.heartbeatInterval }}
+            - --reconnect-interval={{ 
$.Values.cluster.fodc.agent.config.reconnectInterval }}
+          env:
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: POD_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            {{- range $env := $.Values.cluster.fodc.agent.env }}
+            - name: {{ $env.name }}
+              value: {{ $env.value }}
+            {{- end }}
+          ports:
+            - name: fodc-agent-grpc
+              containerPort: {{ $.Values.cluster.fodc.agent.grpcPort }}
+            - name: fodc-agent-http
+              containerPort: {{ $.Values.cluster.fodc.agent.httpPort }}
+          startupProbe:
+            httpGet:
+              path: /metrics
+              port: {{ $.Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
$.Values.cluster.fodc.agent.startupProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
$.Values.cluster.fodc.agent.startupProbe.periodSeconds }}
+            timeoutSeconds: {{ 
$.Values.cluster.fodc.agent.startupProbe.timeoutSeconds }}
+            successThreshold: {{ 
$.Values.cluster.fodc.agent.startupProbe.successThreshold }}
+            failureThreshold: {{ 
$.Values.cluster.fodc.agent.startupProbe.failureThreshold }}
+          readinessProbe:
+            httpGet:
+              path: /metrics
+              port: {{ $.Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
$.Values.cluster.fodc.agent.readinessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
$.Values.cluster.fodc.agent.readinessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
$.Values.cluster.fodc.agent.readinessProbe.timeoutSeconds }}
+            successThreshold: {{ 
$.Values.cluster.fodc.agent.readinessProbe.successThreshold }}
+            failureThreshold: {{ 
$.Values.cluster.fodc.agent.readinessProbe.failureThreshold }}
+          livenessProbe:
+            httpGet:
+              path: /metrics
+              port: {{ $.Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
$.Values.cluster.fodc.agent.livenessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
$.Values.cluster.fodc.agent.livenessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
$.Values.cluster.fodc.agent.livenessProbe.timeoutSeconds }}
+            successThreshold: {{ 
$.Values.cluster.fodc.agent.livenessProbe.successThreshold }}
+            failureThreshold: {{ 
$.Values.cluster.fodc.agent.livenessProbe.failureThreshold }}
+          {{- with $.Values.cluster.fodc.agent.resources }}
+          resources:
+            {{- if .requests }}
+            requests:
+              {{- range $request := .requests }}
+              {{ $request.key }}: {{ $request.value }}
+              {{- end }}
+            {{- end }}
+            {{- if .limits }}
+            limits:
+              {{- range $limit := .limits }}
+              {{ $limit.key }}: {{ $limit.value }}
+              {{- end }}
+            {{- end }}
+          {{- end }}
+        {{- end }}
         {{- if $roleConfig.backupSidecar.enabled }}
         - name: backup
           image: {{ $.Values.image.repository }}:{{ required 
"banyandb.image.tag is required" $.Values.image.tag }}-slim
diff --git a/chart/templates/cluster_fodc_proxy_deployment.yaml 
b/chart/templates/cluster_fodc_proxy_deployment.yaml
new file mode 100644
index 0000000..bf423f7
--- /dev/null
+++ b/chart/templates/cluster_fodc_proxy_deployment.yaml
@@ -0,0 +1,172 @@
+{{/*
+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.
+*/}}
+
+{{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ template "banyandb.fullname" . }}-fodc-proxy
+  labels:
+{{ include "banyandb.labels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 6 }}
+      app.kubernetes.io/component: fodc-proxy
+  strategy:
+    type: RollingUpdate
+    rollingUpdate:
+      maxUnavailable: 1
+      maxSurge: 1
+  template:
+    metadata:
+      labels:
+{{ include "banyandb.labels" . | nindent 8 }}
+        app.kubernetes.io/component: fodc-proxy
+{{- if .Values.cluster.fodc.proxy.podAnnotations }}
+      annotations:
+{{ toYaml .Values.cluster.fodc.proxy.podAnnotations | indent 6 }}
+{{- end }}
+    spec:
+      serviceAccountName: {{ template "banyandb.serviceAccountName" . }}
+{{- with .Values.cluster.fodc.proxy.securityContext }}
+      securityContext:
+{{ toYaml . | nindent 6 }}
+{{- end }}
+      priorityClassName: {{ .Values.cluster.fodc.proxy.priorityClassName }}
+      containers:
+        - name: fodc-proxy
+          image: {{ .Values.cluster.fodc.proxy.image.repository }}:{{ default 
.Values.image.tag .Values.cluster.fodc.proxy.image.tag }}
+          imagePullPolicy: {{ .Values.cluster.fodc.proxy.image.pullPolicy }}
+{{- with .Values.cluster.fodc.proxy.containerSecurityContext }}
+          securityContext:
+{{ toYaml . | nindent 12 }}
+{{- end }}
+          env:
+{{- range $env := .Values.cluster.fodc.proxy.env }}
+            - name: {{ $env.name }}
+              value: {{ $env.value | quote }}
+{{- end }}
+          args:
+            - --grpc-listen-addr=:{{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+            - --http-listen-addr=:{{ .Values.cluster.fodc.proxy.httpSvc.port }}
+            - --agent-heartbeat-timeout={{ 
.Values.cluster.fodc.proxy.config.agentHeartbeatTimeout }}
+            - --agent-cleanup-timeout={{ 
.Values.cluster.fodc.proxy.config.agentCleanupTimeout }}
+            - --max-agents={{ .Values.cluster.fodc.proxy.config.maxAgents }}
+            - --http-read-timeout={{ 
.Values.cluster.fodc.proxy.config.httpReadTimeout }}
+            - --http-write-timeout={{ 
.Values.cluster.fodc.proxy.config.httpWriteTimeout }}
+            - --heartbeat-interval={{ 
.Values.cluster.fodc.proxy.config.heartbeatInterval }}
+          ports:
+            - name: grpc
+              containerPort: {{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+            - name: http
+              containerPort: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+          readinessProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.proxy.readinessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.proxy.readinessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.proxy.readinessProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.proxy.readinessProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.proxy.readinessProbe.failureThreshold }}
+          livenessProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.proxy.livenessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.proxy.livenessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.proxy.livenessProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.proxy.livenessProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.proxy.livenessProbe.failureThreshold }}
+          startupProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.proxy.startupProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.proxy.startupProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.proxy.startupProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.proxy.startupProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.proxy.startupProbe.failureThreshold }}
+
+      {{- if and .Values.cluster.fodc.proxy.resources (or 
.Values.cluster.fodc.proxy.resources.requests 
.Values.cluster.fodc.proxy.resources.limits) }}
+      resources:
+{{ toYaml .Values.cluster.fodc.proxy.resources | indent 8 }}
+      {{- end }}
+
+      {{- if .Values.cluster.fodc.proxy.tolerations }}
+      tolerations:
+        {{- range $toleration := .Values.cluster.fodc.proxy.tolerations }}
+        - key: {{ $toleration.key }}
+          operator: {{ $toleration.operator }}
+          value: {{ $toleration.value }}
+          effect: {{ $toleration.effect }}
+        {{- end }}
+      {{- end }}
+
+      {{- if .Values.cluster.fodc.proxy.nodeSelector }}
+      nodeSelector:
+        {{- range $selector := .Values.cluster.fodc.proxy.nodeSelector }}
+        {{ $selector.key }}: {{ $selector.value }}
+        {{- end }}
+      {{- end }}
+
+      {{- if .Values.cluster.fodc.proxy.affinity }}
+      affinity:
+{{ toYaml .Values.cluster.fodc.proxy.affinity | nindent 6 }}
+      {{- else if or .Values.cluster.fodc.proxy.podAffinityPreset 
.Values.cluster.fodc.proxy.podAntiAffinityPreset }}
+      affinity:
+        {{- if and .Values.cluster.fodc.proxy.podAffinityPreset (not (empty 
.Values.cluster.fodc.proxy.podAffinityPreset)) }}
+        podAffinity:
+          {{- if eq .Values.cluster.fodc.proxy.podAffinityPreset "soft" }}
+          preferredDuringSchedulingIgnoredDuringExecution:
+            - weight: 100
+              podAffinityTerm:
+                labelSelector:
+                  matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 20 }}
+                topologyKey: kubernetes.io/hostname
+          {{- else if eq .Values.cluster.fodc.proxy.podAffinityPreset "hard" }}
+          requiredDuringSchedulingIgnoredDuringExecution:
+            - labelSelector:
+                matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 18 }}
+              topologyKey: kubernetes.io/hostname
+          {{- end }}
+        {{- end }}
+        {{- if and .Values.cluster.fodc.proxy.podAntiAffinityPreset (not 
(empty .Values.cluster.fodc.proxy.podAntiAffinityPreset)) }}
+        podAntiAffinity:
+          {{- if eq .Values.cluster.fodc.proxy.podAntiAffinityPreset "soft" }}
+          preferredDuringSchedulingIgnoredDuringExecution:
+            - weight: 100
+              podAffinityTerm:
+                labelSelector:
+                  matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 20 }}
+                topologyKey: kubernetes.io/hostname
+          {{- else if eq .Values.cluster.fodc.proxy.podAntiAffinityPreset 
"hard" }}
+          requiredDuringSchedulingIgnoredDuringExecution:
+            - labelSelector:
+                matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 18 }}
+              topologyKey: kubernetes.io/hostname
+          {{- end }}
+        {{- end }}
+      {{- end }}
+{{- end }}
diff --git a/chart/templates/cluster_fodc_proxy_service.yaml 
b/chart/templates/cluster_fodc_proxy_service.yaml
new file mode 100644
index 0000000..bca235c
--- /dev/null
+++ b/chart/templates/cluster_fodc_proxy_service.yaml
@@ -0,0 +1,85 @@
+{{/*
+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.
+*/}}
+
+{{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+{{- if .Values.cluster.fodc.proxy.grpcSvc }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "banyandb.fullname" . }}-fodc-proxy-grpc
+  labels:
+{{ include "banyandb.labels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+    {{- range $key, $value := .Values.cluster.fodc.proxy.grpcSvc.labels }}
+    {{ $key }}: {{ $value | quote }}
+    {{- end }}
+  annotations:
+    {{- range $key, $value := .Values.cluster.fodc.proxy.grpcSvc.annotations }}
+    {{ $key }}: {{ $value | quote }}
+    {{- end }}
+spec:
+  type: ClusterIP
+  ports:
+    - port: {{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+      name: grpc
+      targetPort: grpc
+  selector:
+{{ include "banyandb.selectorLabels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+{{- end }}
+{{- if .Values.cluster.fodc.proxy.httpSvc }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "banyandb.fullname" . }}-fodc-proxy-http
+  labels:
+{{ include "banyandb.labels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+    {{- range $key, $value := .Values.cluster.fodc.proxy.httpSvc.labels }}
+    {{ $key }}: {{ $value | quote }}
+    {{- end }}
+  annotations:
+    {{- range $key, $value := .Values.cluster.fodc.proxy.httpSvc.annotations }}
+    {{ $key }}: {{ $value | quote }}
+    {{- end }}
+spec:
+  type: {{ .Values.cluster.fodc.proxy.httpSvc.type }}
+  ports:
+    - port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+      name: http
+      targetPort: http
+  selector:
+{{ include "banyandb.selectorLabels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+  {{- if .Values.cluster.fodc.proxy.httpSvc.externalIPs }}
+  externalIPs:
+    {{- range $v := .Values.cluster.fodc.proxy.httpSvc.externalIPs }}
+    - {{ $v }}
+    {{- end }}
+  {{- end }}
+  {{- if .Values.cluster.fodc.proxy.httpSvc.loadBalancerIP }}
+  loadBalancerIP: {{ .Values.cluster.fodc.proxy.httpSvc.loadBalancerIP }}
+  {{- end }}
+  {{- if .Values.cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges }}
+  loadBalancerSourceRanges:
+    {{- range $v := 
.Values.cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges }}
+    - {{ $v }}
+    {{- end }}
+  {{- end }}
+{{- end }}
+{{- end }}
diff --git a/chart/templates/cluster_liaison_statefulset.yaml 
b/chart/templates/cluster_liaison_statefulset.yaml
index a7e56d9..1f373db 100644
--- a/chart/templates/cluster_liaison_statefulset.yaml
+++ b/chart/templates/cluster_liaison_statefulset.yaml
@@ -48,8 +48,9 @@ spec:
         {{- toYaml . | nindent 8 }}
       {{- end }}
       priorityClassName: {{ .Values.cluster.liaison.priorityClassName }}
-      {{- if or (and .Values.storage.liaison.enabled 
.Values.cluster.liaison.volumePermissions.enabled) .Values.auth.enabled }}
+      {{- if or (and .Values.storage.liaison.enabled 
.Values.cluster.liaison.volumePermissions.enabled) .Values.auth.enabled (and 
.Values.cluster.enabled .Values.cluster.fodc.enabled) }}
       initContainers:
+        {{- if and .Values.storage.liaison.enabled 
.Values.cluster.liaison.volumePermissions.enabled }}
         - name: volume-permissions
           image: {{ default "busybox:1.36" 
.Values.cluster.liaison.volumePermissions.image }}
           imagePullPolicy: IfNotPresent
@@ -74,8 +75,8 @@ spec:
             - mountPath: /mnt/{{ $claim.claimName }}
               name: {{ $claim.claimName }}
             {{- end }}
-      {{- end }}
-      {{- if .Values.auth.enabled }}
+        {{- end }}
+        {{- if .Values.auth.enabled }}
         - name: auth-config-prepare
           image: busybox:1.36
           imagePullPolicy: IfNotPresent
@@ -97,6 +98,7 @@ spec:
               readOnly: true
             - mountPath: /etc/banyandb
               name: banyandb-auth-writable
+        {{- end }}
       {{- end }}
       containers:
         - name: liaison
@@ -286,6 +288,91 @@ spec:
             {{- end }}
           {{- end }}
 
+        {{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+        - name: fodc-agent
+          image: {{ .Values.cluster.fodc.agent.image.repository }}:{{ default 
.Values.image.tag .Values.cluster.fodc.agent.image.tag }}
+          imagePullPolicy: {{ .Values.cluster.fodc.agent.image.pullPolicy }}
+          {{- with .Values.cluster.fodc.agent.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
+          command:
+            - sh
+            - -c
+            - |
+              exec /fodc-agent \
+                --proxy-addr={{ template "banyandb.fullname" . 
}}-fodc-proxy-grpc:{{ .Values.cluster.fodc.proxy.grpcSvc.port }} \
+                --node-ip=127.0.0.1 \
+                --node-port={{ .Values.cluster.liaison.grpcSvc.port }} \
+                --node-role=liaison \
+                --metrics-endpoint=http://127.0.0.1:2121/metrics \
+                --poll-metrics-interval={{ 
.Values.cluster.fodc.agent.config.scrapeInterval }} \
+                --prometheus-listen-addr=:{{ 
.Values.cluster.fodc.agent.httpPort }} \
+                --max-metrics-memory-usage-percentage={{ 
.Values.cluster.fodc.agent.config.ktmEnabled | ternary 10 5 }} \
+                --heartbeat-interval={{ 
.Values.cluster.fodc.agent.config.heartbeatInterval }} \
+                --reconnect-interval={{ 
.Values.cluster.fodc.agent.config.reconnectInterval }}
+          env:
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: POD_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            {{- range $env := .Values.cluster.fodc.agent.env }}
+            - name: {{ $env.name }}
+              value: {{ $env.value }}
+            {{- end }}
+          ports:
+            - name: fodc-agent-grpc
+              containerPort: {{ .Values.cluster.fodc.agent.grpcPort }}
+            - name: fodc-agent-http
+              containerPort: {{ .Values.cluster.fodc.agent.httpPort }}
+          startupProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.agent.startupProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.agent.startupProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.agent.startupProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.agent.startupProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.agent.startupProbe.failureThreshold }}
+          readinessProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.agent.readinessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.agent.readinessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.agent.readinessProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.agent.readinessProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.agent.readinessProbe.failureThreshold }}
+          livenessProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.agent.livenessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.agent.livenessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.agent.livenessProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.agent.livenessProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.agent.livenessProbe.failureThreshold }}
+          {{- with .Values.cluster.fodc.agent.resources }}
+          resources:
+            {{- if .requests }}
+            requests:
+              {{- range $request := .requests }}
+              {{ $request.key }}: {{ $request.value }}
+              {{- end }}
+            {{- end }}
+            {{- if .limits }}
+            limits:
+              {{- range $limit := .limits }}
+              {{ $limit.key }}: {{ $limit.value }}
+              {{- end }}
+            {{- end }}
+          {{- end }}
+        {{- end }}
+
       {{- if or .Values.cluster.liaison.tls .Values.auth.enabled 
$nodeDiscoveryFileMode }}
       volumes:
         {{- if .Values.cluster.liaison.tls }}
diff --git a/chart/templates/ingress.yaml b/chart/templates/ingress.yaml
index 1dbdc9a..cfe5dca 100644
--- a/chart/templates/ingress.yaml
+++ b/chart/templates/ingress.yaml
@@ -156,4 +156,52 @@ spec:
 {{ toYaml .Values.cluster.ui.standalone.ingress.tls | indent 4 }}
   {{- end -}}
 {{- end }}
+
+{{- if and .Values.cluster.fodc.enabled 
.Values.cluster.fodc.proxy.ingress.enabled }}
+---
+{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" }}
+apiVersion: networking.k8s.io/v1
+{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/Ingress" 
}}
+apiVersion: networking.k8s.io/v1beta1
+{{- else }}
+apiVersion: extensions/v1beta1
+{{- end }}
+kind: Ingress
+metadata:
+  labels: {{ include "banyandb.labels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+  {{- range $key, $value := .Values.cluster.fodc.proxy.ingress.labels }}
+    {{ $key }}: {{ $value | quote }}
+    {{- end }}
+  name: {{ template "banyandb.fullname" . }}-fodc-proxy
+  annotations:
+  {{- range $key, $value := .Values.cluster.fodc.proxy.ingress.annotations }}
+    {{ $key }}: {{ $value | quote }}
+    {{- end }}
+spec:
+  rules:
+  {{- range .Values.cluster.fodc.proxy.ingress.rules }}
+    - host: {{ .host }}
+      http:
+        paths:
+        {{- range .paths }}
+        - path: {{ .path }}
+          pathType: Prefix
+          backend:
+            {{- if $.Capabilities.APIVersions.Has 
"networking.k8s.io/v1/Ingress" }}
+            service:
+              name: {{ .serviceName }}
+              port:
+                number: {{ .port }}
+            {{- else }}
+            serviceName: {{ .serviceName }}
+            servicePort: {{ .port }}
+            {{- end }}
+        {{- end }}
+    {{- end -}}
+  {{- if .Values.cluster.fodc.proxy.ingress.tls }}
+  tls:
+{{ toYaml .Values.cluster.fodc.proxy.ingress.tls | indent 4 }}
+  {{- end -}}
+{{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/chart/templates/pdb.yaml b/chart/templates/pdb.yaml
index 8f0192c..d403f2d 100644
--- a/chart/templates/pdb.yaml
+++ b/chart/templates/pdb.yaml
@@ -125,3 +125,30 @@ spec:
   paused: {{ $budget.paused }}
   {{- end }}
 {{- end }}
+---
+{{- if and .Values.cluster.fodc.enabled 
.Values.cluster.fodc.proxy.podDisruptionBudget }}
+{{- if .Capabilities.APIVersions.Has "policy/v1" }}
+apiVersion: policy/v1
+{{- else }}
+apiVersion: policy/v1beta1
+{{- end }}
+kind: PodDisruptionBudget
+metadata:
+  name: {{ template "banyandb.fullname" . }}-fodc-proxy
+  labels: {{ include "banyandb.labels" . | nindent 4 }}
+    app.kubernetes.io/component: fodc-proxy
+spec:
+  {{- $budget := .Values.cluster.fodc.proxy.podDisruptionBudget }}
+  {{- if $budget.maxUnavailable }}
+  maxUnavailable: {{ $budget.maxUnavailable }}
+  {{- end }}
+  {{- if $budget.minAvailable }}
+  minAvailable: {{ $budget.minAvailable }}
+  {{- end }}
+  selector:
+    matchLabels: {{ include "banyandb.selectorLabels" . | nindent 6 }}
+      app.kubernetes.io/component: fodc-proxy
+  {{- if $budget.paused }}
+  paused: {{ $budget.paused }}
+  {{- end }}
+{{- end }}
diff --git a/chart/templates/standalone_statefulset.yaml 
b/chart/templates/standalone_statefulset.yaml
index be22873..ed195e8 100644
--- a/chart/templates/standalone_statefulset.yaml
+++ b/chart/templates/standalone_statefulset.yaml
@@ -236,6 +236,109 @@ spec:
             {{- end }}
           {{- end }}
 
+        {{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+        - name: fodc-agent
+          image: {{ .Values.cluster.fodc.agent.image.repository }}:{{ default 
.Values.image.tag .Values.cluster.fodc.agent.image.tag }}
+          imagePullPolicy: {{ .Values.cluster.fodc.agent.image.pullPolicy }}
+          {{- with .Values.cluster.fodc.agent.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
+          command:
+            - sh
+            - -c
+            - |
+              set -euo pipefail
+              echo "Waiting for BanyanDB observability port (2121) to be 
ready..."
+              MAX_ATTEMPTS=60
+              ATTEMPT=0
+              while [ ${ATTEMPT} -lt ${MAX_ATTEMPTS} ]; do
+                if wget -q -T 1 -O- "http://127.0.0.1:2121/metrics"; > 
/dev/null 2>&1; then
+                  echo "BanyanDB observability port is ready, starting FODC 
agent..."
+                  break
+                fi
+                ATTEMPT=$((ATTEMPT + 1))
+                if [ $((ATTEMPT % 5)) -eq 0 ]; then
+                  echo "Waiting for BanyanDB observability port (attempt 
${ATTEMPT}/${MAX_ATTEMPTS})..."
+                fi
+                sleep 2
+              done
+              if [ ${ATTEMPT} -ge ${MAX_ATTEMPTS} ]; then
+                echo "Warning: BanyanDB observability port not ready after 
${MAX_ATTEMPTS} attempts, starting agent anyway..."
+              fi
+              exec /fodc-agent \
+                --proxy-addr={{ template "banyandb.fullname" . 
}}-fodc-proxy-grpc:{{ .Values.cluster.fodc.proxy.grpcSvc.port }} \
+                --node-ip=${POD_NAME}.banyandb.${POD_NAMESPACE} \
+                --node-port={{ .Values.standalone.grpcSvc.port }} \
+                --node-role=standalone \
+                --metrics-endpoint=http://127.0.0.1:2121/metrics \
+                --poll-metrics-interval={{ 
.Values.cluster.fodc.agent.config.scrapeInterval }} \
+                --prometheus-listen-addr=:{{ 
.Values.cluster.fodc.agent.httpPort }} \
+                --max-metrics-memory-usage-percentage={{ 
.Values.cluster.fodc.agent.config.ktmEnabled | ternary 10 5 }} \
+                --heartbeat-interval={{ 
.Values.cluster.fodc.agent.config.heartbeatInterval }} \
+                --reconnect-interval={{ 
.Values.cluster.fodc.agent.config.reconnectInterval }}
+          env:
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: POD_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            {{- range $env := .Values.cluster.fodc.agent.env }}
+            - name: {{ $env.name }}
+              value: {{ $env.value }}
+            {{- end }}
+          ports:
+            - name: fodc-agent-grpc
+              containerPort: {{ .Values.cluster.fodc.agent.grpcPort }}
+            - name: fodc-agent-http
+              containerPort: {{ .Values.cluster.fodc.agent.httpPort }}
+          startupProbe:
+            httpGet:
+              path: /metrics
+              port: {{ .Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.agent.startupProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.agent.startupProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.agent.startupProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.agent.startupProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.agent.startupProbe.failureThreshold }}
+          readinessProbe:
+            httpGet:
+              path: /health
+              port: {{ .Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.agent.readinessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.agent.readinessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.agent.readinessProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.agent.readinessProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.agent.readinessProbe.failureThreshold }}
+          livenessProbe:
+            httpGet:
+              path: /health
+              port: {{ .Values.cluster.fodc.agent.httpPort }}
+            initialDelaySeconds: {{ 
.Values.cluster.fodc.agent.livenessProbe.initialDelaySeconds }}
+            periodSeconds: {{ 
.Values.cluster.fodc.agent.livenessProbe.periodSeconds }}
+            timeoutSeconds: {{ 
.Values.cluster.fodc.agent.livenessProbe.timeoutSeconds }}
+            successThreshold: {{ 
.Values.cluster.fodc.agent.livenessProbe.successThreshold }}
+            failureThreshold: {{ 
.Values.cluster.fodc.agent.livenessProbe.failureThreshold }}
+          {{- with .Values.cluster.fodc.agent.resources }}
+          resources:
+            {{- if .requests }}
+            requests:
+              {{- range $request := .requests }}
+              {{ $request.key }}: {{ $request.value }}
+              {{- end }}
+            {{- end }}
+            {{- if .limits }}
+            limits:
+              {{- range $limit := .limits }}
+              {{ $limit.key }}: {{ $limit.value }}
+              {{- end }}
+            {{- end }}
+          {{- end }}
+        {{- end }}
+
       {{- if or .Values.standalone.tls .Values.auth.enabled }}
       volumes:
         {{- if .Values.standalone.tls }}
diff --git a/chart/values-lifecycle.yaml b/chart/values-lifecycle.yaml
index eb52945..bb4beeb 100644
--- a/chart/values-lifecycle.yaml
+++ b/chart/values-lifecycle.yaml
@@ -383,6 +383,9 @@ cluster:
       annotations: {}
       ## @param cluster.liaison.grpcSvc.port Port number for GRPC service for 
liaison
       port: 17912
+    ## @param cluster.liaison.sidecar Sidecar containers for liaison pods
+    ##
+    sidecar: []
     ## HTTP service settings for liaison
     ##
     httpSvc:
@@ -810,6 +813,199 @@ cluster:
         ## @param cluster.ui.standalone.startupProbe.failureThreshold Failure 
threshold for UI startup probe
         ##
         failureThreshold: 60
+  ## @section Configuration for FODC (First Occurrence Data Collection)
+  ##
+  fodc:
+    ## @param cluster.fodc.enabled Enable FODC (both Agent and Proxy) (boolean)
+    enabled: true
+    ## @section FODC Proxy component
+    ##
+    proxy:
+      ## @param cluster.fodc.proxy.podAnnotations Pod annotations for Proxy
+      podAnnotations: {}
+      ## @param cluster.fodc.proxy.securityContext Security context for Proxy 
pods
+      securityContext: {}
+      ## @param cluster.fodc.proxy.containerSecurityContext Container-level 
security context for Proxy
+      containerSecurityContext: {}
+      ## @param cluster.fodc.proxy.env Environment variables for Proxy pods
+      env: []
+      ## @param cluster.fodc.proxy.priorityClassName Priority class name for 
Proxy pods
+      priorityClassName: ""
+      ## @param cluster.fodc.proxy.podDisruptionBudget Pod disruption budget 
for Proxy
+      podDisruptionBudget: {}
+      ## @param cluster.fodc.proxy.tolerations Tolerations for Proxy pods
+      tolerations: []
+      ## @param cluster.fodc.proxy.nodeSelector Node selector for Proxy pods
+      nodeSelector: []
+      ## @param cluster.fodc.proxy.affinity Affinity rules for Proxy pods
+      affinity: {}
+      ## @param cluster.fodc.proxy.podAffinityPreset Pod affinity preset for 
Proxy
+      podAffinityPreset: ""
+      ## @param cluster.fodc.proxy.podAntiAffinityPreset Pod anti-affinity 
preset for Proxy
+      podAntiAffinityPreset: soft
+      ## Resource requests/limits for Proxy
+      resources:
+        ## @param cluster.fodc.proxy.resources.requests Resource requests for 
Proxy pods
+        requests: {}
+        ## @param cluster.fodc.proxy.resources.limits Resource limits for 
Proxy pods
+        limits: {}
+      image:
+        ## @param cluster.fodc.proxy.image.repository Docker repository for 
FODC Proxy
+        repository: ghcr.io/apache/skywalking-banyandb-fodc-proxy
+        ## @param cluster.fodc.proxy.image.tag Image tag/version for FODC 
Proxy (empty for latest)
+        tag: ""
+        ## @param cluster.fodc.proxy.image.pullPolicy Image pull policy for 
FODC Proxy
+        pullPolicy: IfNotPresent
+      grpcSvc:
+        ## @param cluster.fodc.proxy.grpcSvc.labels Labels for Proxy gRPC 
service
+        labels: {}
+        ## @param cluster.fodc.proxy.grpcSvc.annotations Annotations for Proxy 
gRPC service
+        annotations: {}
+        ## @param cluster.fodc.proxy.grpcSvc.port Port number for Proxy gRPC 
service (Agent connections)
+        port: 17912
+      httpSvc:
+        ## @param cluster.fodc.proxy.httpSvc.labels Labels for Proxy HTTP 
service
+        labels: {}
+        ## @param cluster.fodc.proxy.httpSvc.annotations Annotations for Proxy 
HTTP service
+        annotations: {}
+        ## @param cluster.fodc.proxy.httpSvc.port Port number for Proxy HTTP 
service
+        port: 17913
+        ## @param cluster.fodc.proxy.httpSvc.type Service type for Proxy HTTP 
service (ClusterIP, LoadBalancer, NodePort)
+        type: LoadBalancer
+        ## @param cluster.fodc.proxy.httpSvc.externalIPs External IP addresses 
for Proxy HTTP service
+        externalIPs: []
+        ## @param cluster.fodc.proxy.httpSvc.loadBalancerIP Load balancer IP 
for Proxy HTTP service
+        loadBalancerIP: null
+        ## @param cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges Allowed 
source ranges for Proxy HTTP service
+        loadBalancerSourceRanges: []
+      ingress:
+        ## @param cluster.fodc.proxy.ingress.enabled Enable ingress for Proxy
+        enabled: false
+        ## @param cluster.fodc.proxy.ingress.labels Labels for Proxy ingress
+        labels: {}
+        ## @param cluster.fodc.proxy.ingress.annotations Annotations for Proxy 
ingress
+        annotations: {}
+        ## @param cluster.fodc.proxy.ingress.rules Ingress rules for Proxy
+        rules: []
+        ## @param cluster.fodc.proxy.ingress.tls TLS configuration for Proxy 
ingress
+        tls: []
+      config:
+        ## @param cluster.fodc.proxy.config.agentHeartbeatTimeout Timeout for 
considering agent offline
+        agentHeartbeatTimeout: 30s
+        ## @param cluster.fodc.proxy.config.agentCleanupTimeout Timeout for 
auto-unregistering offline agents
+        agentCleanupTimeout: 5m
+        ## @param cluster.fodc.proxy.config.maxAgents Maximum number of agents 
allowed to register
+        maxAgents: 1000
+        ## @param cluster.fodc.proxy.config.grpcMaxMsgSize Maximum gRPC 
message size in bytes
+        grpcMaxMsgSize: 4194304
+        ## @param cluster.fodc.proxy.config.httpReadTimeout HTTP read timeout
+        httpReadTimeout: 10s
+        ## @param cluster.fodc.proxy.config.httpWriteTimeout HTTP write timeout
+        httpWriteTimeout: 10s
+        ## @param cluster.fodc.proxy.config.heartbeatInterval Default 
heartbeat interval for agents
+        heartbeatInterval: 10s
+      livenessProbe:
+        ## @param cluster.fodc.proxy.livenessProbe.initialDelaySeconds Initial 
delay for Proxy liveness probe
+        initialDelaySeconds: 10
+        ## @param cluster.fodc.proxy.livenessProbe.periodSeconds Probe period 
for Proxy liveness probe
+        periodSeconds: 30
+        ## @param cluster.fodc.proxy.livenessProbe.timeoutSeconds Timeout in 
seconds for Proxy liveness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.proxy.livenessProbe.successThreshold Success 
threshold for Proxy liveness probe
+        successThreshold: 1
+        ## @param cluster.fodc.proxy.livenessProbe.failureThreshold Failure 
threshold for Proxy liveness probe
+        failureThreshold: 5
+      readinessProbe:
+        ## @param cluster.fodc.proxy.readinessProbe.initialDelaySeconds 
Initial delay for Proxy readiness probe
+        initialDelaySeconds: 10
+        ## @param cluster.fodc.proxy.readinessProbe.periodSeconds Probe period 
for Proxy readiness probe
+        periodSeconds: 30
+        ## @param cluster.fodc.proxy.readinessProbe.timeoutSeconds Timeout in 
seconds for Proxy readiness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.proxy.readinessProbe.successThreshold Success 
threshold for Proxy readiness probe
+        successThreshold: 1
+        ## @param cluster.fodc.proxy.readinessProbe.failureThreshold Failure 
threshold for Proxy readiness probe
+        failureThreshold: 5
+      startupProbe:
+        ## @param cluster.fodc.proxy.startupProbe.initialDelaySeconds Initial 
delay for Proxy startup probe
+        initialDelaySeconds: 0
+        ## @param cluster.fodc.proxy.startupProbe.periodSeconds Probe period 
for Proxy startup probe
+        periodSeconds: 10
+        ## @param cluster.fodc.proxy.startupProbe.timeoutSeconds Timeout in 
seconds for Proxy startup probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.proxy.startupProbe.successThreshold Success 
threshold for Proxy startup probe
+        successThreshold: 1
+        ## @param cluster.fodc.proxy.startupProbe.failureThreshold Failure 
threshold for Proxy startup probe
+        failureThreshold: 60
+
+    ## @section FODC Agent sidecar
+    ##
+    agent:
+      image:
+        ## @param cluster.fodc.agent.image.repository Docker repository for 
FODC Agent
+        repository: ghcr.io/apache/skywalking-banyandb-fodc-agent
+        ## @param cluster.fodc.agent.image.tag Image tag/version for FODC 
Agent (defaults to same as main image)
+        tag: ""
+        ## @param cluster.fodc.agent.image.pullPolicy Image pull policy for 
FODC Agent
+        pullPolicy: IfNotPresent
+      ## @param cluster.fodc.agent.env Environment variables for Agent sidecar
+      env: []
+      ## @param cluster.fodc.agent.containerSecurityContext Container-level 
security context for Agent
+      containerSecurityContext: {}
+      resources:
+        ## @param cluster.fodc.agent.resources.requests Resource requests for 
Agent
+        requests: []
+        ## @param cluster.fodc.agent.resources.limits Resource limits for Agent
+        limits: []
+      ## @param cluster.fodc.agent.grpcPort GRPC port for Agent sidecar (not 
used - agent connects outbound to proxy)
+      grpcPort: 17914
+      ## @param cluster.fodc.agent.httpPort HTTP port for Agent sidecar 
(prometheus-listen-addr flag)
+      httpPort: 17915
+      config:
+        ## @param cluster.fodc.agent.config.scrapeInterval Interval for 
scraping BanyanDB metrics (poll-metrics-interval flag)
+        scrapeInterval: 15s
+        ## @param cluster.fodc.agent.config.heartbeatInterval Heartbeat 
interval to Proxy (heartbeat-interval flag)
+        heartbeatInterval: 10s
+        ## @param cluster.fodc.agent.config.reconnectInterval Reconnect 
interval when connection to Proxy is lost (reconnect-interval flag)
+        reconnectInterval: 10s
+        ## @param cluster.fodc.agent.config.ktmEnabled Enable Kernel Telemetry 
Module (affects max-metrics-memory-usage-percentage)
+        ktmEnabled: true
+      ## Liveness probe for Agent
+      livenessProbe:
+        ## @param cluster.fodc.agent.livenessProbe.initialDelaySeconds Initial 
delay for Agent liveness probe
+        initialDelaySeconds: 90
+        ## @param cluster.fodc.agent.livenessProbe.periodSeconds Probe period 
for Agent liveness probe
+        periodSeconds: 30
+        ## @param cluster.fodc.agent.livenessProbe.timeoutSeconds Timeout in 
seconds for Agent liveness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.agent.livenessProbe.successThreshold Success 
threshold for Agent liveness probe
+        successThreshold: 1
+        ## @param cluster.fodc.agent.livenessProbe.failureThreshold Failure 
threshold for Agent liveness probe
+        failureThreshold: 5
+      ## Readiness probe for Agent
+      readinessProbe:
+        ## @param cluster.fodc.agent.readinessProbe.initialDelaySeconds 
Initial delay for Agent readiness probe
+        initialDelaySeconds: 60
+        ## @param cluster.fodc.agent.readinessProbe.periodSeconds Probe period 
for Agent readiness probe
+        periodSeconds: 10
+        ## @param cluster.fodc.agent.readinessProbe.timeoutSeconds Timeout in 
seconds for Agent readiness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.agent.readinessProbe.successThreshold Success 
threshold for Agent readiness probe
+        successThreshold: 1
+        ## @param cluster.fodc.agent.readinessProbe.failureThreshold Failure 
threshold for Agent readiness probe
+        failureThreshold: 12
+      ## Startup probe for Agent
+      startupProbe:
+        ## @param cluster.fodc.agent.startupProbe.initialDelaySeconds Initial 
delay for Agent startup probe
+        initialDelaySeconds: 30
+        ## @param cluster.fodc.agent.startupProbe.periodSeconds Probe period 
for Agent startup probe
+        periodSeconds: 5
+        ## @param cluster.fodc.agent.startupProbe.timeoutSeconds Timeout in 
seconds for Agent startup probe
+        timeoutSeconds: 3
+        ## @param cluster.fodc.agent.startupProbe.successThreshold Success 
threshold for Agent startup probe
+        successThreshold: 1
+        ## @param cluster.fodc.agent.startupProbe.failureThreshold Failure 
threshold for Agent startup probe
+        failureThreshold: 60
 
 ## @section Storage configuration for persistent volumes
 ##
diff --git a/chart/values.yaml b/chart/values.yaml
index 8d87a02..1728895 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -422,6 +422,9 @@ cluster:
       annotations: {}
       ## @param cluster.liaison.grpcSvc.port Port number for GRPC service for 
liaison
       port: 17912
+    ## @param cluster.liaison.sidecar Sidecar containers for liaison pods
+    ##
+    sidecar: []
     ## HTTP service settings for liaison
     ##
     httpSvc:
@@ -832,6 +835,200 @@ cluster:
         ##
         failureThreshold: 60
 
+  ## @section Configuration for FODC (First Occurrence Data Collection)
+  ##
+  fodc:
+    ## @param cluster.fodc.enabled Enable FODC (both Agent and Proxy) (boolean)
+    enabled: true
+    ## @section FODC Proxy component
+    ##
+    proxy:
+      ## @param cluster.fodc.proxy.podAnnotations Pod annotations for Proxy
+      podAnnotations: {}
+      ## @param cluster.fodc.proxy.securityContext Security context for Proxy 
pods
+      securityContext: {}
+      ## @param cluster.fodc.proxy.containerSecurityContext Container-level 
security context for Proxy
+      containerSecurityContext: {}
+      ## @param cluster.fodc.proxy.env Environment variables for Proxy pods
+      env: []
+      ## @param cluster.fodc.proxy.priorityClassName Priority class name for 
Proxy pods
+      priorityClassName: ""
+      ## @param cluster.fodc.proxy.podDisruptionBudget Pod disruption budget 
for Proxy
+      podDisruptionBudget: {}
+      ## @param cluster.fodc.proxy.tolerations Tolerations for Proxy pods
+      tolerations: []
+      ## @param cluster.fodc.proxy.nodeSelector Node selector for Proxy pods
+      nodeSelector: []
+      ## @param cluster.fodc.proxy.affinity Affinity rules for Proxy pods
+      affinity: {}
+      ## @param cluster.fodc.proxy.podAffinityPreset Pod affinity preset for 
Proxy
+      podAffinityPreset: ""
+      ## @param cluster.fodc.proxy.podAntiAffinityPreset Pod anti-affinity 
preset for Proxy
+      podAntiAffinityPreset: soft
+      ## Resource requests/limits for Proxy
+      resources:
+        ## @param cluster.fodc.proxy.resources.requests Resource requests for 
Proxy pods
+        requests: {}
+        ## @param cluster.fodc.proxy.resources.limits Resource limits for 
Proxy pods
+        limits: {}
+      image:
+        ## @param cluster.fodc.proxy.image.repository Docker repository for 
FODC Proxy
+        repository: ghcr.io/apache/skywalking-banyandb-fodc-proxy
+        ## @param cluster.fodc.proxy.image.tag Image tag/version for FODC 
Proxy (empty for latest)
+        tag: ""
+        ## @param cluster.fodc.proxy.image.pullPolicy Image pull policy for 
FODC Proxy
+        pullPolicy: IfNotPresent
+      grpcSvc:
+        ## @param cluster.fodc.proxy.grpcSvc.labels Labels for Proxy gRPC 
service
+        labels: {}
+        ## @param cluster.fodc.proxy.grpcSvc.annotations Annotations for Proxy 
gRPC service
+        annotations: {}
+        ## @param cluster.fodc.proxy.grpcSvc.port Port number for Proxy gRPC 
service (Agent connections)
+        port: 17912
+      httpSvc:
+        ## @param cluster.fodc.proxy.httpSvc.labels Labels for Proxy HTTP 
service
+        labels: {}
+        ## @param cluster.fodc.proxy.httpSvc.annotations Annotations for Proxy 
HTTP service
+        annotations: {}
+        ## @param cluster.fodc.proxy.httpSvc.port Port number for Proxy HTTP 
service
+        port: 17913
+        ## @param cluster.fodc.proxy.httpSvc.type Service type for Proxy HTTP 
service (ClusterIP, LoadBalancer, NodePort)
+        type: LoadBalancer
+        ## @param cluster.fodc.proxy.httpSvc.externalIPs External IP addresses 
for Proxy HTTP service
+        externalIPs: []
+        ## @param cluster.fodc.proxy.httpSvc.loadBalancerIP Load balancer IP 
for Proxy HTTP service
+        loadBalancerIP: null
+        ## @param cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges Allowed 
source ranges for Proxy HTTP service
+        loadBalancerSourceRanges: []
+      ingress:
+        ## @param cluster.fodc.proxy.ingress.enabled Enable ingress for Proxy
+        enabled: false
+        ## @param cluster.fodc.proxy.ingress.labels Labels for Proxy ingress
+        labels: {}
+        ## @param cluster.fodc.proxy.ingress.annotations Annotations for Proxy 
ingress
+        annotations: {}
+        ## @param cluster.fodc.proxy.ingress.rules Ingress rules for Proxy
+        rules: []
+        ## @param cluster.fodc.proxy.ingress.tls TLS configuration for Proxy 
ingress
+        tls: []
+      config:
+        ## @param cluster.fodc.proxy.config.agentHeartbeatTimeout Timeout for 
considering agent offline
+        agentHeartbeatTimeout: 30s
+        ## @param cluster.fodc.proxy.config.agentCleanupTimeout Timeout for 
auto-unregistering offline agents
+        agentCleanupTimeout: 5m
+        ## @param cluster.fodc.proxy.config.maxAgents Maximum number of agents 
allowed to register
+        maxAgents: 1000
+        ## @param cluster.fodc.proxy.config.grpcMaxMsgSize Maximum gRPC 
message size in bytes
+        grpcMaxMsgSize: 4194304
+        ## @param cluster.fodc.proxy.config.httpReadTimeout HTTP read timeout
+        httpReadTimeout: 10s
+        ## @param cluster.fodc.proxy.config.httpWriteTimeout HTTP write timeout
+        httpWriteTimeout: 10s
+        ## @param cluster.fodc.proxy.config.heartbeatInterval Default 
heartbeat interval for agents
+        heartbeatInterval: 10s
+      livenessProbe:
+        ## @param cluster.fodc.proxy.livenessProbe.initialDelaySeconds Initial 
delay for Proxy liveness probe
+        initialDelaySeconds: 10
+        ## @param cluster.fodc.proxy.livenessProbe.periodSeconds Probe period 
for Proxy liveness probe
+        periodSeconds: 30
+        ## @param cluster.fodc.proxy.livenessProbe.timeoutSeconds Timeout in 
seconds for Proxy liveness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.proxy.livenessProbe.successThreshold Success 
threshold for Proxy liveness probe
+        successThreshold: 1
+        ## @param cluster.fodc.proxy.livenessProbe.failureThreshold Failure 
threshold for Proxy liveness probe
+        failureThreshold: 5
+      readinessProbe:
+        ## @param cluster.fodc.proxy.readinessProbe.initialDelaySeconds 
Initial delay for Proxy readiness probe
+        initialDelaySeconds: 10
+        ## @param cluster.fodc.proxy.readinessProbe.periodSeconds Probe period 
for Proxy readiness probe
+        periodSeconds: 30
+        ## @param cluster.fodc.proxy.readinessProbe.timeoutSeconds Timeout in 
seconds for Proxy readiness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.proxy.readinessProbe.successThreshold Success 
threshold for Proxy readiness probe
+        successThreshold: 1
+        ## @param cluster.fodc.proxy.readinessProbe.failureThreshold Failure 
threshold for Proxy readiness probe
+        failureThreshold: 5
+      startupProbe:
+        ## @param cluster.fodc.proxy.startupProbe.initialDelaySeconds Initial 
delay for Proxy startup probe
+        initialDelaySeconds: 0
+        ## @param cluster.fodc.proxy.startupProbe.periodSeconds Probe period 
for Proxy startup probe
+        periodSeconds: 10
+        ## @param cluster.fodc.proxy.startupProbe.timeoutSeconds Timeout in 
seconds for Proxy startup probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.proxy.startupProbe.successThreshold Success 
threshold for Proxy startup probe
+        successThreshold: 1
+        ## @param cluster.fodc.proxy.startupProbe.failureThreshold Failure 
threshold for Proxy startup probe
+        failureThreshold: 60
+
+    ## @section FODC Agent sidecar
+    ##
+    agent:
+      image:
+        ## @param cluster.fodc.agent.image.repository Docker repository for 
FODC Agent
+        repository: ghcr.io/apache/skywalking-banyandb-fodc-agent
+        ## @param cluster.fodc.agent.image.tag Image tag/version for FODC 
Agent (defaults to same as main image)
+        tag: ""
+        ## @param cluster.fodc.agent.image.pullPolicy Image pull policy for 
FODC Agent
+        pullPolicy: IfNotPresent
+      ## @param cluster.fodc.agent.env Environment variables for Agent sidecar
+      env: []
+      ## @param cluster.fodc.agent.containerSecurityContext Container-level 
security context for Agent
+      containerSecurityContext: {}
+      resources:
+        ## @param cluster.fodc.agent.resources.requests Resource requests for 
Agent
+        requests: []
+        ## @param cluster.fodc.agent.resources.limits Resource limits for Agent
+        limits: []
+      ## @param cluster.fodc.agent.grpcPort GRPC port for Agent sidecar (not 
used - agent connects outbound to proxy)
+      grpcPort: 17914
+      ## @param cluster.fodc.agent.httpPort HTTP port for Agent sidecar 
(prometheus-listen-addr flag)
+      httpPort: 17915
+      config:
+        ## @param cluster.fodc.agent.config.scrapeInterval Interval for 
scraping BanyanDB metrics (poll-metrics-interval flag)
+        scrapeInterval: 15s
+        ## @param cluster.fodc.agent.config.heartbeatInterval Heartbeat 
interval to Proxy (heartbeat-interval flag)
+        heartbeatInterval: 10s
+        ## @param cluster.fodc.agent.config.reconnectInterval Reconnect 
interval when connection to Proxy is lost (reconnect-interval flag)
+        reconnectInterval: 10s
+        ## @param cluster.fodc.agent.config.ktmEnabled Enable Kernel Telemetry 
Module (affects max-metrics-memory-usage-percentage)
+        ktmEnabled: true
+      ## Liveness probe for Agent
+      livenessProbe:
+        ## @param cluster.fodc.agent.livenessProbe.initialDelaySeconds Initial 
delay for Agent liveness probe
+        initialDelaySeconds: 90
+        ## @param cluster.fodc.agent.livenessProbe.periodSeconds Probe period 
for Agent liveness probe
+        periodSeconds: 30
+        ## @param cluster.fodc.agent.livenessProbe.timeoutSeconds Timeout in 
seconds for Agent liveness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.agent.livenessProbe.successThreshold Success 
threshold for Agent liveness probe
+        successThreshold: 1
+        ## @param cluster.fodc.agent.livenessProbe.failureThreshold Failure 
threshold for Agent liveness probe
+        failureThreshold: 5
+      ## Readiness probe for Agent
+      readinessProbe:
+        ## @param cluster.fodc.agent.readinessProbe.initialDelaySeconds 
Initial delay for Agent readiness probe
+        initialDelaySeconds: 60
+        ## @param cluster.fodc.agent.readinessProbe.periodSeconds Probe period 
for Agent readiness probe
+        periodSeconds: 10
+        ## @param cluster.fodc.agent.readinessProbe.timeoutSeconds Timeout in 
seconds for Agent readiness probe
+        timeoutSeconds: 5
+        ## @param cluster.fodc.agent.readinessProbe.successThreshold Success 
threshold for Agent readiness probe
+        successThreshold: 1
+        ## @param cluster.fodc.agent.readinessProbe.failureThreshold Failure 
threshold for Agent readiness probe
+        failureThreshold: 12
+      ## Startup probe for Agent
+      startupProbe:
+        ## @param cluster.fodc.agent.startupProbe.initialDelaySeconds Initial 
delay for Agent startup probe
+        initialDelaySeconds: 30
+        ## @param cluster.fodc.agent.startupProbe.periodSeconds Probe period 
for Agent startup probe
+        periodSeconds: 5
+        ## @param cluster.fodc.agent.startupProbe.timeoutSeconds Timeout in 
seconds for Agent startup probe
+        timeoutSeconds: 3
+        ## @param cluster.fodc.agent.startupProbe.successThreshold Success 
threshold for Agent startup probe
+        successThreshold: 1
+        ## @param cluster.fodc.agent.startupProbe.failureThreshold Failure 
threshold for Agent startup probe
+        failureThreshold: 60
+
 ## @section Storage configuration for persistent volumes
 ##
 storage:
diff --git a/doc/parameters.md b/doc/parameters.md
index 120b800..d42185f 100644
--- a/doc/parameters.md
+++ b/doc/parameters.md
@@ -99,7 +99,7 @@ The content of this document describes the parameters that 
can be configured in
 
 | Name                         | Description                     | Value  |
 |------------------------------|---------------------------------|--------|
-| `cluster.nodeDiscovery.mode` | Node discovery mode (etcd, dns) | `etcd` |
+| `cluster.nodeDiscovery.mode` | Node discovery mode (etcd, dns, file) | `dns` 
|
 
 ### DNS Mode Configuration
 
@@ -156,6 +156,7 @@ The content of this document describes the parameters that 
can be configured in
 | `cluster.liaison.grpcSvc.labels`                              | Labels for 
GRPC service for liaison                         | `{}`            |
 | `cluster.liaison.grpcSvc.annotations`                         | Annotations 
for GRPC service for liaison                    | `{}`            |
 | `cluster.liaison.grpcSvc.port`                                | Port number 
for GRPC service for liaison                    | `17912`         |
+| `cluster.liaison.sidecar`                                     | Sidecar 
containers for liaison pods                         | `[]`            |
 | `cluster.liaison.httpSvc.labels`                              | Labels for 
HTTP service for liaison                         | `{}`            |
 | `cluster.liaison.httpSvc.annotations`                         | Annotations 
for HTTP service for liaison                    | `{}`            |
 | `cluster.liaison.httpSvc.port`                                | Port number 
for HTTP service for liaison                    | `17913`         |
@@ -291,6 +292,102 @@ The content of this document describes the parameters 
that can be configured in
 | `cluster.ui.standalone.startupProbe.successThreshold`               | 
Success threshold for UI startup probe          | `1`             |
 | `cluster.ui.standalone.startupProbe.failureThreshold`               | 
Failure threshold for UI startup probe          | `60`            |
 
+### Configuration for FODC (First Occurrence Data Collection) Proxy component
+
+| Name                                                            | 
Description                                                             | Value 
                                            |
+| --------------------------------------------------------------- | 
----------------------------------------------------------------------- | 
------------------------------------------------- |
+| `cluster.fodc.proxy.enabled`                                     | Enable 
FODC Proxy deployment (boolean)                                  | `true`       
                                     |
+| `cluster.fodc.proxy.podAnnotations`                              | Pod 
annotations for Proxy                                               | `{}`      
                                        |
+| `cluster.fodc.proxy.securityContext`                             | Security 
context for Proxy pods                                         | `{}`           
                                   |
+| `cluster.fodc.proxy.containerSecurityContext`                    | 
Container-level security context for Proxy                              | `{}`  
                                            |
+| `cluster.fodc.proxy.env`                                         | 
Environment variables for Proxy pods                                    | `[]`  
                                            |
+| `cluster.fodc.proxy.priorityClassName`                           | Priority 
class name for Proxy pods                                      | `""`           
                                   |
+| `cluster.fodc.proxy.updateStrategy.type`                         | Update 
strategy type for Proxy pods                                     | 
`RollingUpdate`                                   |
+| `cluster.fodc.proxy.updateStrategy.rollingUpdate.maxUnavailable` | Maximum 
unavailable pods during update                                  | `1`           
                                    |
+| `cluster.fodc.proxy.updateStrategy.rollingUpdate.maxSurge`       | Maximum 
surge pods during update                                        | `1`           
                                    |
+| `cluster.fodc.proxy.podDisruptionBudget`                         | Pod 
disruption budget for Proxy                                         | `{}`      
                                        |
+| `cluster.fodc.proxy.tolerations`                                 | 
Tolerations for Proxy pods                                              | `[]`  
                                            |
+| `cluster.fodc.proxy.nodeSelector`                                | Node 
selector for Proxy pods                                            | `[]`       
                                       |
+| `cluster.fodc.proxy.affinity`                                    | Affinity 
rules for Proxy pods                                           | `{}`           
                                   |
+| `cluster.fodc.proxy.podAffinityPreset`                           | Pod 
affinity preset for Proxy                                           | `""`      
                                        |
+| `cluster.fodc.proxy.podAntiAffinityPreset`                       | Pod 
anti-affinity preset for Proxy                                      | `soft`    
                                        |
+| `cluster.fodc.proxy.resources.requests`                          | Resource 
requests for Proxy pods                                        | `[]`           
                                   |
+| `cluster.fodc.proxy.resources.limits`                            | Resource 
limits for Proxy pods                                          | `[]`           
                                   |
+| `cluster.fodc.proxy.image.repository`                            | Docker 
repository for FODC Proxy                                        | 
`ghcr.io/apache/skywalking-banyandb-fodc-proxy` |
+| `cluster.fodc.proxy.image.tag`                                   | Image 
tag/version for FODC Proxy (empty for latest)                     | `""`        
                                      |
+| `cluster.fodc.proxy.image.pullPolicy`                            | Image 
pull policy for FODC Proxy                                        | 
`IfNotPresent`                                    |
+| `cluster.fodc.proxy.grpcSvc.labels`                              | Labels 
for Proxy gRPC service                                           | `{}`         
                                     |
+| `cluster.fodc.proxy.grpcSvc.annotations`                         | 
Annotations for Proxy gRPC service                                      | `{}`  
                                            |
+| `cluster.fodc.proxy.grpcSvc.port`                                | Port 
number for Proxy gRPC service (Agent connections)                  | `17912`    
                                       |
+| `cluster.fodc.proxy.httpSvc.labels`                              | Labels 
for Proxy HTTP service                                           | `{}`         
                                     |
+| `cluster.fodc.proxy.httpSvc.annotations`                         | 
Annotations for Proxy HTTP service                                      | `{}`  
                                            |
+| `cluster.fodc.proxy.httpSvc.port`                                | Port 
number for Proxy HTTP service                                      | `17913`    
                                       |
+| `cluster.fodc.proxy.httpSvc.type`                                | Service 
type for Proxy HTTP service (ClusterIP, LoadBalancer, NodePort) | 
`LoadBalancer`                                    |
+| `cluster.fodc.proxy.httpSvc.externalIPs`                         | External 
IP addresses for Proxy HTTP service                            | `[]`           
                                   |
+| `cluster.fodc.proxy.httpSvc.loadBalancerIP`                      | Load 
balancer IP for Proxy HTTP service                                 | `nil`      
                                       |
+| `cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges`            | Allowed 
source ranges for Proxy HTTP service                            | `[]`          
                                    |
+| `cluster.fodc.proxy.ingress.enabled`                             | Enable 
ingress for Proxy                                                | `false`      
                                     |
+| `cluster.fodc.proxy.ingress.labels`                              | Labels 
for Proxy ingress                                                | `{}`         
                                     |
+| `cluster.fodc.proxy.ingress.annotations`                         | 
Annotations for Proxy ingress                                           | `{}`  
                                            |
+| `cluster.fodc.proxy.ingress.rules`                               | Ingress 
rules for Proxy                                                 | `[]`          
                                    |
+| `cluster.fodc.proxy.ingress.tls`                                 | TLS 
configuration for Proxy ingress                                     | `[]`      
                                        |
+| `cluster.fodc.proxy.config.agentHeartbeatTimeout`                | Timeout 
for considering agent offline                                   | `30s`         
                                    |
+| `cluster.fodc.proxy.config.agentCleanupTimeout`                  | Timeout 
for auto-unregistering offline agents                           | `5m`          
                                    |
+| `cluster.fodc.proxy.config.maxAgents`                            | Maximum 
number of agents allowed to register                            | `1000`        
                                    |
+| `cluster.fodc.proxy.config.grpcMaxMsgSize`                       | Maximum 
gRPC message size in bytes                                      | `4194304`     
                                    |
+| `cluster.fodc.proxy.config.httpReadTimeout`                      | HTTP read 
timeout                                                       | `10s`           
                                  |
+| `cluster.fodc.proxy.config.httpWriteTimeout`                     | HTTP 
write timeout                                                      | `10s`      
                                       |
+| `cluster.fodc.proxy.config.heartbeatInterval`                    | Default 
heartbeat interval for agents                                   | `10s`         
                                    |
+| `cluster.fodc.proxy.livenessProbe.initialDelaySeconds`           | Initial 
delay for Proxy liveness probe                                  | `10`          
                                    |
+| `cluster.fodc.proxy.livenessProbe.periodSeconds`                 | Probe 
period for Proxy liveness probe                                   | `30`        
                                      |
+| `cluster.fodc.proxy.livenessProbe.timeoutSeconds`                | Timeout 
in seconds for Proxy liveness probe                             | `5`           
                                    |
+| `cluster.fodc.proxy.livenessProbe.successThreshold`              | Success 
threshold for Proxy liveness probe                              | `1`           
                                    |
+| `cluster.fodc.proxy.livenessProbe.failureThreshold`              | Failure 
threshold for Proxy liveness probe                              | `5`           
                                    |
+| `cluster.fodc.proxy.readinessProbe.initialDelaySeconds`          | Initial 
delay for Proxy readiness probe                                 | `10`          
                                    |
+| `cluster.fodc.proxy.readinessProbe.periodSeconds`                | Probe 
period for Proxy readiness probe                                  | `30`        
                                      |
+| `cluster.fodc.proxy.readinessProbe.timeoutSeconds`               | Timeout 
in seconds for Proxy readiness probe                            | `5`           
                                    |
+| `cluster.fodc.proxy.readinessProbe.successThreshold`             | Success 
threshold for Proxy readiness probe                             | `1`           
                                    |
+| `cluster.fodc.proxy.readinessProbe.failureThreshold`             | Failure 
threshold for Proxy readiness probe                             | `5`           
                                    |
+| `cluster.fodc.proxy.startupProbe.initialDelaySeconds`            | Initial 
delay for Proxy startup probe                                   | `0`           
                                    |
+| `cluster.fodc.proxy.startupProbe.periodSeconds`                  | Probe 
period for Proxy startup probe                                    | `10`        
                                      |
+| `cluster.fodc.proxy.startupProbe.timeoutSeconds`                 | Timeout 
in seconds for Proxy startup probe                              | `5`           
                                    |
+| `cluster.fodc.proxy.startupProbe.successThreshold`               | Success 
threshold for Proxy startup probe                               | `1`           
                                    |
+| `cluster.fodc.proxy.startupProbe.failureThreshold`               | Failure 
threshold for Proxy startup probe                               | `60`          
                                    |
+
+### Configuration for FODC (First Occurrence Data Collection) Agent sidecar
+
+| Name                                                   | Description         
                                                         | Value                
                             |
+| ------------------------------------------------------ | 
---------------------------------------------------------------------------- | 
------------------------------------------------- |
+| `cluster.fodc.agent.enabled`                            | Enable FODC Agent 
sidecar (boolean)                                          | `true`             
                               |
+| `cluster.fodc.agent.image.repository`                   | Docker repository 
for FODC Agent                                             | 
`ghcr.io/apache/skywalking-banyandb-fodc-agent` |
+| `cluster.fodc.agent.image.tag`                          | Image tag/version 
for FODC Agent (defaults to same as main image)            | `""`               
                               |
+| `cluster.fodc.agent.image.pullPolicy`                   | Image pull policy 
for FODC Agent                                             | `IfNotPresent`     
                               |
+| `cluster.fodc.agent.env`                                | Environment 
variables for Agent sidecar                                      | `[]`         
                                     |
+| `cluster.fodc.agent.containerSecurityContext`           | Container-level 
security context for Agent                                   | `{}`             
                                 |
+| `cluster.fodc.agent.resources.requests`                 | Resource requests 
for Agent                                                  | `[]`               
                               |
+| `cluster.fodc.agent.resources.limits`                   | Resource limits 
for Agent                                                    | `[]`             
                                 |
+| `cluster.fodc.agent.grpcPort`                           | GRPC port for 
Agent sidecar (not used - agent connects outbound to proxy)    | `17914`        
                                   |
+| `cluster.fodc.agent.httpPort`                           | HTTP port for 
Agent sidecar (prometheus-listen-addr flag)                    | `17915`        
                                   |
+| `cluster.fodc.agent.config.scrapeInterval`              | Interval for 
scraping BanyanDB metrics (poll-metrics-interval flag)          | `15s`         
                                    |
+| `cluster.fodc.agent.config.heartbeatInterval`           | Heartbeat interval 
to Proxy (heartbeat-interval flag)                        | `10s`               
                              |
+| `cluster.fodc.agent.config.reconnectInterval`           | Reconnect interval 
when connection to Proxy is lost (reconnect-interval flag) | `10s`              
                               |
+| `cluster.fodc.agent.config.ktmEnabled`                  | Enable Kernel 
Telemetry Module (affects max-metrics-memory-usage-percentage) | `true`         
                                   |
+| `cluster.fodc.agent.livenessProbe.initialDelaySeconds`  | Initial delay for 
Agent liveness probe                                       | `90`               
                               |
+| `cluster.fodc.agent.livenessProbe.periodSeconds`        | Probe period for 
Agent liveness probe                                        | `30`              
                                |
+| `cluster.fodc.agent.livenessProbe.timeoutSeconds`       | Timeout in seconds 
for Agent liveness probe                                  | `5`                 
                              |
+| `cluster.fodc.agent.livenessProbe.successThreshold`     | Success threshold 
for Agent liveness probe                                   | `1`                
                               |
+| `cluster.fodc.agent.livenessProbe.failureThreshold`     | Failure threshold 
for Agent liveness probe                                   | `5`                
                               |
+| `cluster.fodc.agent.readinessProbe.initialDelaySeconds` | Initial delay for 
Agent readiness probe                                      | `60`               
                               |
+| `cluster.fodc.agent.readinessProbe.periodSeconds`       | Probe period for 
Agent readiness probe                                       | `10`              
                                |
+| `cluster.fodc.agent.readinessProbe.timeoutSeconds`      | Timeout in seconds 
for Agent readiness probe                                 | `5`                 
                              |
+| `cluster.fodc.agent.readinessProbe.successThreshold`    | Success threshold 
for Agent readiness probe                                  | `1`                
                               |
+| `cluster.fodc.agent.readinessProbe.failureThreshold`    | Failure threshold 
for Agent readiness probe                                  | `12`               
                               |
+| `cluster.fodc.agent.startupProbe.initialDelaySeconds`   | Initial delay for 
Agent startup probe                                        | `30`               
                               |
+| `cluster.fodc.agent.startupProbe.periodSeconds`         | Probe period for 
Agent startup probe                                         | `5`               
                                |
+| `cluster.fodc.agent.startupProbe.timeoutSeconds`        | Timeout in seconds 
for Agent startup probe                                   | `3`                 
                              |
+| `cluster.fodc.agent.startupProbe.successThreshold`      | Success threshold 
for Agent startup probe                                    | `1`                
                               |
+| `cluster.fodc.agent.startupProbe.failureThreshold`      | Failure threshold 
for Agent startup probe                                    | `60`               
                               |
+
 ### Storage configuration for persistent volumes
 
 | Name                                                        | Description    
                                         | Value                                
                |
diff --git a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml 
b/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
new file mode 100644
index 0000000..4120ca0
--- /dev/null
+++ b/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
@@ -0,0 +1,121 @@
+# 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.
+
+# E2E test for FODC proxy service functionality
+
+setup:
+  env: kind
+  file: kind.yaml
+  init-system-environment: env
+  kind:
+    expose-ports:
+      - namespace: istio-system
+        resource: service/skywalking-ui
+        port: 80
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e/setup-e2e-shell/install.sh swctl
+    - name: install kubectl
+      command: bash test/e2e/setup-e2e-shell/install.sh kubectl
+    - name: install istio
+      command: |
+        bash test/e2e/setup-e2e-shell/install.sh istioctl
+        istioctl install -y --set profile=demo \
+          --set 
meshConfig.defaultConfig.envoyAccessLogService.address=skywalking-oap.istio-system:11800
 \
+          --set meshConfig.enableEnvoyAccessLogService=true
+        kubectl label namespace default istio-injection=enabled
+      wait:
+        - namespace: istio-system
+          resource: pod
+          for: condition=ready
+          label-selector: app=istiod
+    - name: Install helm
+      command: bash test/e2e/setup-e2e-shell/install.sh helm
+    - name: Install dependency
+      command: |
+        helm repo add bitnami https://charts.bitnami.com/bitnami
+        cd chart
+        helm dependency update
+    - name: Install BanyanDB with FODC
+      command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.fodc.yaml
+      wait:
+        - namespace: istio-system
+          resource: pod
+          for: condition=ready
+          label-selector: app.kubernetes.io/name=banyandb
+        - namespace: istio-system
+          resource: deployments/banyandb-fodc-proxy
+          for: condition=available
+    - name: Install SkyWalking
+      command: |
+        helm -n istio-system install --timeout 10m skywalking 
oci://ghcr.io/apache/skywalking-helm/skywalking-helm \
+                       --version "$SW_HELM_VERSION" \
+                       --set fullnameOverride=skywalking \
+                       --set 
oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=k8s-mesh \
+                       --set oap.env.SW_ENVOY_METRIC_ALS_TCP_ANALYSIS=k8s-mesh 
\
+                       --set 
oap.env.K8S_SERVICE_NAME_RULE='e2e::${service.metadata.name}' \
+                       --set oap.env.SW_STORAGE_BANYANDB_USER=admin \
+                       --set oap.env.SW_STORAGE_BANYANDB_PASSWORD=banyandb \
+                       --set oap.replicas=1 \
+                       --set ui.image.repository=$UI_REPO \
+                       --set ui.image.tag=$UI_TAG \
+                       --set oap.image.repository=$OAP_REPO \
+                       --set oap.image.tag=$OAP_TAG \
+                       --set oap.storageType=banyandb \
+                       --set elasticsearch.enabled=false \
+                       --set banyandb.enabled=false \
+                       -f test/e2e/values.yaml
+      wait:
+        - namespace: istio-system
+          resource: deployments/skywalking-oap
+          for: condition=available
+    - name: Deploy demo services
+      command: |
+        kubectl apply -f 
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo.yaml
+        kubectl apply -f 
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/bookinfo-gateway.yaml
+        # Enable TCP services
+        kubectl apply -f 
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
+        kubectl apply -f 
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-db.yaml
+        kubectl apply -f 
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/destination-rule-all.yaml
+        kubectl apply -f 
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/virtual-service-ratings-db.yaml
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
+    - name: Generate traffic
+      path: traffic-gen.yaml
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
+  timeout: 25m
+
+verify:
+  retry:
+    count: 20
+    interval: 15s
+  cases:
+    # Verify FODC proxy is collecting observability data - check services are 
observable
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 service ls
+      expected: expected/service.yml
+    # Verify FODC agent is working - check metrics are available for services
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_sla --service-name=e2e::productpage
+      expected: expected/metrics-has-value.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_cpm --service-name=e2e::productpage
+      expected: expected/metrics-has-value.yml
diff --git a/test/e2e/env b/test/e2e/env
index b390bee..31cf319 100644
--- a/test/e2e/env
+++ b/test/e2e/env
@@ -22,7 +22,7 @@ 
SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
 SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
 SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
 SW_ROVER_COMMIT=79292fe07f17f98f486e0c4471213e1961fb2d1d
-SW_BANYANDB_COMMIT=0f3b90d9b4f628d2de02cb39ef678d636358df44
+SW_BANYANDB_COMMIT=6e926242c5bd28cf00a95034f75818c8850d1045
 SW_AGENT_PHP_COMMIT=d1114e7be5d89881eec76e5b56e69ff844691e35
 SW_PREDICTOR_COMMIT=54a0197654a3781a6f73ce35146c712af297c994
 
diff --git a/test/e2e/values.cluster.yaml b/test/e2e/values.cluster.yaml
index 1fe46d1..b794229 100644
--- a/test/e2e/values.cluster.yaml
+++ b/test/e2e/values.cluster.yaml
@@ -403,6 +403,9 @@ cluster:
         successThreshold: 1
         failureThreshold: 60
 
+  fodc:
+    enabled: false
+
 storage:
   data:
     enabled: true
diff --git a/test/e2e/values.dns.registry.yaml 
b/test/e2e/values.dns.registry.yaml
index 279b5a4..6cf581b 100644
--- a/test/e2e/values.dns.registry.yaml
+++ b/test/e2e/values.dns.registry.yaml
@@ -37,6 +37,8 @@ cluster:
           value: "true"
     roles:
       hot: {}
+  fodc:
+    enabled: false
 
 storage:
   data:
diff --git a/test/e2e/values.lifecycle.yaml b/test/e2e/values.fodc.yaml
similarity index 63%
copy from test/e2e/values.lifecycle.yaml
copy to test/e2e/values.fodc.yaml
index c547c6a..1d49966 100644
--- a/test/e2e/values.lifecycle.yaml
+++ b/test/e2e/values.fodc.yaml
@@ -13,13 +13,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Lifecycle-enabled values for banyandb cluster mode.
-# This is a YAML-formatted file with lifecycle configuration enabled.
+# Default values for banyandb.
+# This is a YAML-formatted file.
 # Declare variables to be passed into your templates.
 
 image:
   repository: ghcr.io/apache/skywalking-banyandb
-  tag: 46083529398b73504e9ca929ef367cd1776aef82
+  tag: 6e926242c5bd28cf00a95034f75818c8850d1045
   pullPolicy: IfNotPresent
 
 cluster:
@@ -44,9 +44,7 @@ cluster:
       chownUser: 1000
       chownGroup: 1000
       image: busybox:1.36
-    env:
-      - name: BYDB_DATA_NODE_SELECTOR
-        value: "type=hot"
+    env: []
     priorityClassName: ""
     podDisruptionBudget: {}
     updateStrategy:
@@ -144,27 +142,17 @@ cluster:
         port: 17912
 
       sidecar: []
-
       backupSidecar:
         enabled: true
         dest: "file:///tmp/backups/data-$(ORDINAL_NUMBER)"
         timeStyle: "daily"
-        schedule: "@hourly"
+        schedule: "@every 10s"
         customFlags: []
         resources: {}
-
-      lifecycleSidecar:
-        enabled: true
-        schedule: "@hourly"
-        progressFile: "/tmp/stream/lifecycle/progress.json"
-        reportDir: "/tmp/stream/lifecycle/reports"
-        resources: {}
-
       restoreInitContainer:
         enabled: true
         customFlags: []
         resources: {}
-
       livenessProbe:
         initialDelaySeconds: 20
         periodSeconds: 5
@@ -185,28 +173,14 @@ cluster:
         timeoutSeconds: 5
         successThreshold: 1
         failureThreshold: 60
-
     roles:
-      hot:
-        lifecycleSidecar:
-          schedule: "@daily"
-          enabled: true
-          progressFile: "/tmp/stream/lifecycle/progress.json"
-          reportDir: "/tmp/stream/lifecycle/reports"
-      warm:
-        lifecycleSidecar:
-          schedule: "@daily"
-          enabled: true
-          progressFile: "/tmp/stream/lifecycle/progress.json"
-          reportDir: "/tmp/stream/lifecycle/reports"
-      cold:
-        replicas: 1
-
+      hot: {}
   ui:
     type: Embedded
     standalone:
       replicas: 1
-      podAnnotations:
+      podAnnotations: # example: banyandb-foo
+
       securityContext: {}
       env: []
       priorityClassName: ""
@@ -224,7 +198,6 @@ cluster:
       resources:
         requests: []
         limits: []
-
       httpSvc:
         labels: {}
         annotations: {}
@@ -240,7 +213,6 @@ cluster:
         annotations: {}
         rules: []
         tls: []
-
       livenessProbe:
         initialDelaySeconds: 20
         periodSeconds: 30
@@ -262,143 +234,148 @@ cluster:
         successThreshold: 1
         failureThreshold: 60
 
+  fodc:
+    enabled: true
+    proxy:
+      podAnnotations: {}
+      securityContext: {}
+      containerSecurityContext: {}
+      env: []
+      priorityClassName: ""
+      updateStrategy:
+        type: RollingUpdate
+        rollingUpdate:
+          maxUnavailable: 1
+          maxSurge: 1
+      podDisruptionBudget: {}
+      tolerations: []
+      nodeSelector: []
+      affinity: {}
+      podAffinityPreset: ""
+      podAntiAffinityPreset: soft
+      resources:
+        requests: {}
+        limits: {}
+      image:
+        repository: ghcr.io/apache/skywalking-banyandb-fodc-proxy
+        tag: "6e926242c5bd28cf00a95034f75818c8850d1045"
+        pullPolicy: IfNotPresent
+      grpcSvc:
+        labels: {}
+        annotations: {}
+        port: 17904
+      httpSvc:
+        labels: {}
+        annotations: {}
+        port: 17905
+        type: LoadBalancer
+        externalIPs: []
+        loadBalancerIP: null
+        loadBalancerSourceRanges: []
+      ingress:
+        enabled: false
+        labels: {}
+        annotations: {}
+        rules: []
+        tls: []
+      config:
+        agentHeartbeatTimeout: 30s
+        agentCleanupTimeout: 5m
+        maxAgents: 1000
+        grpcMaxMsgSize: 4194304
+        httpReadTimeout: 10s
+        httpWriteTimeout: 10s
+        heartbeatInterval: 10s
+      livenessProbe:
+        initialDelaySeconds: 10
+        periodSeconds: 30
+        timeoutSeconds: 5
+        successThreshold: 1
+        failureThreshold: 5
+      readinessProbe:
+        initialDelaySeconds: 10
+        periodSeconds: 30
+        timeoutSeconds: 5
+        successThreshold: 1
+        failureThreshold: 5
+      startupProbe:
+        initialDelaySeconds: 0
+        periodSeconds: 10
+        timeoutSeconds: 5
+        successThreshold: 1
+        failureThreshold: 60
+    
+    agent:
+      image:
+        repository: ghcr.io/apache/skywalking-banyandb-fodc-agent
+        tag: "6e926242c5bd28cf00a95034f75818c8850d1045"
+        pullPolicy: IfNotPresent
+      env: []
+      containerSecurityContext: {}
+      resources:
+        requests: []
+        limits: []
+      grpcPort: 17914
+      httpPort: 17915
+      config:
+        scrapeInterval: 15s
+        heartbeatInterval: 10s
+        ktmEnabled: true
+      livenessProbe:
+        initialDelaySeconds: 90
+        periodSeconds: 30
+        timeoutSeconds: 5
+        successThreshold: 1
+        failureThreshold: 5
+      readinessProbe:
+        initialDelaySeconds: 60
+        periodSeconds: 10
+        timeoutSeconds: 5
+        successThreshold: 1
+        failureThreshold: 12
+      startupProbe:
+        initialDelaySeconds: 30
+        periodSeconds: 5
+        timeoutSeconds: 3
+        successThreshold: 1
+        failureThreshold: 60
+
 storage:
   data:
     enabled: true
     persistentVolumeClaims:
-    - mountTargets: [ "measure" ]
-      nodeRole: hot
-      existingClaimName: null
-      claimName: hot-measure-data
-      size: 50Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "stream" ]
+    - mountTargets: [ "measure", "stream", "property", "trace" ]
       nodeRole: hot
       existingClaimName: null
-      claimName: hot-stream-data
-      size: 50Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "property" ]
-      nodeRole: hot
-      existingClaimName: null
-      claimName: hot-property-data
+      claimName: data
       size: 5Gi
       accessModes:
       - ReadWriteOnce
       storageClass: null
       volumeMode: Filesystem
-    - mountTargets: [ "trace" ]
-      nodeRole: hot
-      existingClaimName: null
-      claimName: hot-trace-data
-      size: 50Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "measure" ]
-      nodeRole: warm
-      existingClaimName: null
-      claimName: warm-measure-data
-      size: 100Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "stream" ]
-      nodeRole: warm
-      existingClaimName: null
-      claimName: warm-stream-data
-      size: 100Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "property" ]
-      nodeRole: warm
-      existingClaimName: null
-      claimName: warm-property-data
-      size: 10Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "trace" ]
-      nodeRole: warm
-      existingClaimName: null
-      claimName: warm-trace-data
-      size: 100Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "measure" ]
-      nodeRole: cold
-      existingClaimName: null
-      claimName: cold-measure-data
-      size: 200Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "stream" ]
-      nodeRole: cold
-      existingClaimName: null
-      claimName: cold-stream-data
-      size: 200Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "property" ]
-      nodeRole: cold
-      existingClaimName: null
-      claimName: cold-property-data
-      size: 20Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
-    - mountTargets: [ "trace" ]
-      nodeRole: cold
-      existingClaimName: null
-      claimName: cold-trace-data
-      size: 200Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
     - mountTargets: [ "backups" ]
       nodeRole: hot
       existingClaimName: null
-      claimName: hot-backups
-      size: 10Gi
+      claimName: backups
+      size: 5Gi
       accessModes:
       - ReadWriteOnce
       storageClass: null
       volumeMode: Filesystem
-
   liaison:
     enabled: true
     persistentVolumeClaims:
-    - mountTargets: [ "measure", "stream" ]
+    - mountTargets: [ "measure", "stream", "trace" ]
       claimName: liaison-data
       size: 10Gi
       accessModes:
       - ReadWriteOnce
       storageClass: null
       volumeMode: Filesystem
-
   standalone:
     enabled: false
     persistentVolumeClaims:
-    - mountTargets: [ "measure", "stream", "property" ]
+    - mountTargets: [ "measure", "stream", "property", "trace" ]
       claimName: standalone-data
       size: 200Gi
       accessModes:
@@ -407,8 +384,12 @@ storage:
       volumeMode: Filesystem
 
 serviceAccount:
+  # Specifies whether a service account should be created
   create: true
+  # Annotations to add to the service account
   annotations: {}
+  # The name of the service account to use.
+  # If not set and create is true, a name is generated using the fullname 
template
   name: ""
 
 etcd:
@@ -429,16 +410,14 @@ etcd:
     token:
       enabled: true
       type: simple
-  livenessProbe:
-    initialDelaySeconds: 10
-  readinessProbe:
-    initialDelaySeconds: 10
-  autoCompactionMode: periodic
-  autoCompactionRetention: "1"
-  defrag:
-    enabled: true
-    cronjob:
-      schedule: "0 0 * * *"
 
 fullnameOverride: ""
 nameOverride: "banyandb"
+
+auth:
+  enabled: true
+  existingSecret: ""
+  credentialsFileKey: "credentials.yaml"
+  users:
+    - username: admin
+      password: banyandb
diff --git a/test/e2e/values.lifecycle.yaml b/test/e2e/values.lifecycle.yaml
index c547c6a..af24ab0 100644
--- a/test/e2e/values.lifecycle.yaml
+++ b/test/e2e/values.lifecycle.yaml
@@ -262,6 +262,9 @@ cluster:
         successThreshold: 1
         failureThreshold: 60
 
+  fodc:
+    enabled: false
+
 storage:
   data:
     enabled: true


Reply via email to