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

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

commit 87ceafcdd511a5c30289a68528743c8a16862de3
Author: mrproliu <[email protected]>
AuthorDate: Mon Feb 2 15:40:01 2026 +0800

    Support difference schema storage and remove etcd dependency
---
 .github/workflows/e2e.ci.yaml                      |   4 +
 chart/Chart.lock                                   |   6 -
 chart/Chart.yaml                                   |   5 -
 chart/templates/_helpers.tpl                       |  75 +++++++++--
 chart/templates/cluster_data_statefulset.yaml      |  49 +------
 chart/templates/cluster_liaison_statefulset.yaml   |  24 +---
 chart/templates/cluster_ui_deployment.yaml         |  24 +---
 chart/values-lifecycle.yaml                        | 145 ++++++++-------------
 chart/values.yaml                                  | 145 ++++++++-------------
 doc/parameters.md                                  |  84 +++++-------
 ....yaml => e2e-banyandb-cluster-schema-etcd.yaml} |  72 +++++++---
 ...l => e2e-banyandb-cluster-schema-property.yaml} |  59 ++++++---
 test/e2e/e2e-banyandb-cluster.yaml                 |  18 ++-
 test/e2e/e2e-banyandb-fodc-proxy-service.yaml      |  18 ++-
 test/e2e/e2e-banyandb-lifecycle.yaml               |  18 ++-
 test/e2e/e2e-banyandb-node-registry-dns.yaml       |   7 +-
 test/e2e/e2e-banyandb-standalone.yaml              |   5 -
 ...gistry.yaml => values.cluster-schema-etcd.yaml} |  63 +++------
 ...ry.yaml => values.cluster-schema-property.yaml} |  56 ++------
 test/e2e/values.cluster.yaml                       |  30 ++---
 test/e2e/values.dns.registry.yaml                  |  32 +----
 test/e2e/values.fodc.yaml                          |  31 ++---
 test/e2e/values.lifecycle.yaml                     |  41 ++----
 test/e2e/values.standalone.yaml                    |   7 +-
 24 files changed, 425 insertions(+), 593 deletions(-)

diff --git a/.github/workflows/e2e.ci.yaml b/.github/workflows/e2e.ci.yaml
index 208b2c7..0f30248 100644
--- a/.github/workflows/e2e.ci.yaml
+++ b/.github/workflows/e2e.ci.yaml
@@ -45,6 +45,10 @@ jobs:
             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: Run Skywalking E2E Test (BanyanDB cluster schema etcd)
+            config: test/e2e/e2e-banyandb-cluster-schema-etcd.yaml
+          - name: Run Skywalking E2E Test (BanyanDB cluster schema property)
+            config: test/e2e/e2e-banyandb-cluster-schema-property.yaml
     name: ${{ matrix.test.name }}
     env:
       OAP_TAG: 79860ca5c76a77bbd93e76ce4861b24707dd5ee3
diff --git a/chart/Chart.lock b/chart/Chart.lock
deleted file mode 100644
index c3b6700..0000000
--- a/chart/Chart.lock
+++ /dev/null
@@ -1,6 +0,0 @@
-dependencies:
-- name: etcd
-  repository: oci://registry-1.docker.io/bitnamicharts
-  version: 12.0.18
-digest: sha256:428d19828d309ec37ac9e569328eda161160b9a42cb7af3b6a3a44c738720fb2
-generated: "2026-01-27T03:26:15.720216575Z"
diff --git a/chart/Chart.yaml b/chart/Chart.yaml
index 30d643c..3cda7ce 100644
--- a/chart/Chart.yaml
+++ b/chart/Chart.yaml
@@ -21,8 +21,3 @@ description: Helm Chart for Apache SkyWalking BanyanDB
 icon: 
https://raw.githubusercontent.com/apache/skywalking-kubernetes/master/logo/sw-logo-for-chart.jpg
 sources:
 - https://github.com/apache/skywalking-banyandb-helm
-dependencies:
-- name: etcd
-  version: 12.0.18
-  repository: oci://registry-1.docker.io/bitnamicharts
-  condition: etcd.enabled
diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl
index 8b44843..88c64fc 100644
--- a/chart/templates/_helpers.tpl
+++ b/chart/templates/_helpers.tpl
@@ -88,16 +88,73 @@ Create the name of the service account to use
 EtcdEndpoints
 */}}
 {{- define "banyandb.etcdEndpoints" -}}
-{{- $endpoints := list }}
-{{- $replicaCount := int .Values.etcd.replicaCount }}
-{{- $releaseName := .Release.Name }}
-{{- $namespace := .Release.Namespace }}
-{{- range $i := until $replicaCount }}
-    {{- $endpoint := printf "%s-etcd-%d.%s-etcd-headless.%s:2379" $releaseName 
$i $releaseName $namespace }}
-    {{- $endpoints = append $endpoints $endpoint }}
-{{- end }}
+{{- $etcdClient := index .Values "etcd-client" | default dict }}
+{{- if $etcdClient.endpoints }}
 - name: BYDB_ETCD_ENDPOINTS
-  value: "{{- $endpoints | join "," -}}"
+  value: "{{- $etcdClient.endpoints | join "," -}}"
+{{- end }}
+{{- end }}
+
+{{/*
+EtcdEnv - injects all etcd-related env vars (endpoints, auth, TLS)
+Only rendered when schema storage mode is "etcd" or node discovery mode is 
"etcd"
+*/}}
+{{- define "banyandb.etcdEnv" -}}
+{{- $schemaMode := (.Values.cluster.schemaStorage).mode | default "property" }}
+{{- $nodeDiscoveryMode := ((.Values.cluster.nodeDiscovery).mode) | default 
"dns" }}
+{{- if or (eq $schemaMode "etcd") (eq $nodeDiscoveryMode "etcd") }}
+{{- $etcdClient := index .Values "etcd-client" | default dict }}
+{{- $auth := $etcdClient.auth | default dict }}
+{{- $tls := $auth.tls | default dict }}
+{{- include "banyandb.etcdEndpoints" . }}
+{{- if $auth.username }}
+- name: BYDB_ETCD_USERNAME
+  value: {{ $auth.username | quote }}
+{{- end }}
+{{- if $auth.password }}
+- name: BYDB_ETCD_PASSWORD
+  value: {{ $auth.password | quote }}
+{{- end }}
+{{- if $tls.enabled }}
+{{- if $tls.secretName }}
+- name: BYDB_ETCD_TLS_CA_FILE
+  value: "/etc/tls/{{ $tls.secretName }}/{{ $tls.caFilename | default "ca.crt" 
}}"
+- name: BYDB_ETCD_TLS_CERT_FILE
+  value: "/etc/tls/{{ $tls.secretName }}/{{ $tls.certFilename | default 
"tls.crt" }}"
+- name: BYDB_ETCD_TLS_KEY_FILE
+  value: "/etc/tls/{{ $tls.secretName }}/{{ $tls.keyFilename | default 
"tls.key" }}"
+{{- end }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+SchemaStorageEnv - injects schema storage env vars
+*/}}
+{{- define "banyandb.schemaStorageEnv" -}}
+{{- $schemaMode := (.Values.cluster.schemaStorage).mode | default "property" }}
+- name: BYDB_METADATA_REGISTRY_MODE
+  value: {{ $schemaMode | quote }}
+{{- end }}
+
+{{/*
+SchemaStoragePropertyEnv - injects property server env vars (data node only)
+*/}}
+{{- define "banyandb.schemaStoragePropertyEnv" -}}
+{{- $schemaMode := (.Values.cluster.schemaStorage).mode | default "property" }}
+{{- if eq $schemaMode "property" }}
+- name: BYDB_METADATA_PROPERTY_SERVER_ENABLED
+  value: "true"
+{{- $property := ((.Values.cluster.schemaStorage).property) | default dict }}
+{{- if $property.serverRepairCron }}
+- name: BYDB_METADATA_PROPERTY_SERVER_REPAIR_TRIGGER_CRON
+  value: {{ $property.serverRepairCron | quote }}
+{{- end }}
+{{- if $property.clientSyncInterval }}
+- name: BYDB_PROPERTY_SCHEMA_SYNC_INTERVAL
+  value: {{ $property.clientSyncInterval | quote }}
+{{- end }}
+{{- end }}
 {{- end }}
 
 {{- define "banyandb.hasDataNodeListValue" -}}
diff --git a/chart/templates/cluster_data_statefulset.yaml 
b/chart/templates/cluster_data_statefulset.yaml
index 24283bc..ee1a4ba 100644
--- a/chart/templates/cluster_data_statefulset.yaml
+++ b/chart/templates/cluster_data_statefulset.yaml
@@ -174,28 +174,9 @@ spec:
               value: "/etc/tls/{{ $roleConfig.tls.grpcSecretName }}/tls.crt"
             {{- end }}
             {{- end }}
-            {{- if and $.Values.etcd.auth.rbac.create (not 
$.Values.etcd.auth.rbac.allowNoneAuthentication) }}
-            - name: BYDB_ETCD_USERNAME
-              value: "root"
-            - name: BYDB_ETCD_PASSWORD
-              value: "{{ $.Values.etcd.auth.rbac.rootPassword }}"
-            {{- end }}
-            {{- if $.Values.etcd.auth.client.secureTransport }}
-            - name: BYDB_ETCD_TLS_CA_FILE
-              value: "/etc/tls/{{ $roleConfig.tls.etcdSecretName }}/ca.crt"
-            {{- end }}
-            {{- if $.Values.etcd.auth.client.enableAuthentication }}
-            - name: BYDB_ETCD_TLS_CERT_FILE
-              value: "/etc/tls/{{ $roleConfig.tls.etcdSecretName }}/tls.crt"
-            - name: BYDB_ETCD_TLS_KEY_FILE
-              value: "/etc/tls/{{ $roleConfig.tls.etcdSecretName }}/tls.key"
-            {{- end }}
-            {{- if and (not $.Values.etcd.enabled) 
$.Values.cluster.etcdEndpoints }}
-            - name: BYDB_ETCD_ENDPOINTS
-              value: "{{- $.Values.cluster.etcdEndpoints | join "," -}}"
-            {{- else }}
-            {{- include "banyandb.etcdEndpoints" $ | nindent 12 }}
-            {{- end }}
+            {{- include "banyandb.schemaStorageEnv" $ | nindent 12 }}
+            {{- include "banyandb.schemaStoragePropertyEnv" $ | nindent 12 }}
+            {{- include "banyandb.etcdEnv" $ | nindent 12 }}
             {{- include "banyandb.nodeDiscoveryEnv" (dict "root" $) | nindent 
12 }}
             {{- $mergedEnv := concat $.Values.cluster.data.nodeTemplate.env 
$roleConfig.env }}
             {{- range $env := $mergedEnv }}
@@ -412,28 +393,8 @@ spec:
           env:
             - name: BYDB_NODE_LABELS
               value: "type={{ $roleName }}"
-            {{- if and $.Values.etcd.auth.rbac.create (not 
$.Values.etcd.auth.rbac.allowNoneAuthentication) }}
-            - name: BYDB_ETCD_USERNAME
-              value: "root"
-            - name: BYDB_ETCD_PASSWORD
-              value: "{{ $.Values.etcd.auth.rbac.rootPassword }}"
-            {{- end }}
-            {{- if $.Values.etcd.auth.client.secureTransport }}
-            - name: BYDB_ETCD_TLS_CA_FILE
-              value: "/etc/tls/{{ $roleConfig.tls.etcdSecretName }}/ca.crt"
-            {{- end }}
-            {{- if $.Values.etcd.auth.client.enableAuthentication }}
-            - name: BYDB_ETCD_TLS_CERT_FILE
-              value: "/etc/tls/{{ $roleConfig.tls.etcdSecretName }}/tls.crt"
-            - name: BYDB_ETCD_TLS_KEY_FILE
-              value: "/etc/tls/{{ $roleConfig.tls.etcdSecretName }}/tls.key"
-            {{- end }}
-            {{- if and (not $.Values.etcd.enabled) 
$.Values.cluster.etcdEndpoints }}
-            - name: BYDB_ETCD_ENDPOINTS
-              value: "{{- $.Values.cluster.etcdEndpoints | join "," -}}"
-            {{- else }}
-            {{- include "banyandb.etcdEndpoints" $ | nindent 12 }}
-            {{- end }}
+            {{- include "banyandb.schemaStorageEnv" $ | nindent 12 }}
+            {{- include "banyandb.etcdEnv" $ | nindent 12 }}
             {{- include "banyandb.nodeDiscoveryEnv" (dict "root" $) | nindent 
12 }}
           command:
             - "/lifecycle"
diff --git a/chart/templates/cluster_liaison_statefulset.yaml 
b/chart/templates/cluster_liaison_statefulset.yaml
index f0f0333..e794cc8 100644
--- a/chart/templates/cluster_liaison_statefulset.yaml
+++ b/chart/templates/cluster_liaison_statefulset.yaml
@@ -147,28 +147,8 @@ spec:
               value: "/etc/tls/{{ .Values.cluster.liaison.tls.httpSecretName 
}}/tls.key"
             {{- end }}
             {{- end }}
-            {{- if and .Values.etcd.auth.rbac.create (not 
.Values.etcd.auth.rbac.allowNoneAuthentication) }}
-            - name: BYDB_ETCD_USERNAME
-              value: "root"
-            - name: BYDB_ETCD_PASSWORD
-              value: {{ .Values.etcd.auth.rbac.rootPassword }}
-            {{- end }}
-            {{- if and .Values.cluster.liaison.tls 
.Values.cluster.liaison.tls.etcdSecretName 
.Values.etcd.auth.client.secureTransport }}
-            - name: BYDB_ETCD_TLS_CA_FILE
-              value: "/etc/tls/{{ .Values.cluster.liaison.tls.etcdSecretName 
}}/ca.crt"
-            {{- end }}
-            {{- if and .Values.cluster.liaison.tls 
.Values.cluster.liaison.tls.etcdSecretName 
.Values.etcd.auth.client.enableAuthentication }}
-            - name: BYDB_ETCD_TLS_CERT_FILE
-              value: "/etc/tls/{{ .Values.cluster.liaison.tls.etcdSecretName 
}}/tls.crt"
-            - name: BYDB_ETCD_TLS_KEY_FILE
-              value: "/etc/tls/{{ .Values.cluster.liaison.tls.etcdSecretName 
}}/tls.key"
-            {{- end }}
-            {{- if and (not .Values.etcd.enabled) 
.Values.cluster.etcdEndpoints }}
-            - name: BYDB_ETCD_ENDPOINTS
-              value: "{{- .Values.cluster.etcdEndpoints | join "," -}}"
-            {{- else }}
-            {{- include "banyandb.etcdEndpoints" . | nindent 12 }}
-            {{- end }}
+            {{- include "banyandb.schemaStorageEnv" . | nindent 12 }}
+            {{- include "banyandb.etcdEnv" . | nindent 12 }}
             {{- include "banyandb.nodeDiscoveryEnv" (dict "root" .) | nindent 
12 }}
             {{- if include "banyandb.hasDataNodeListValue" . }}
             - name: BYDB_DATA_NODE_LIST
diff --git a/chart/templates/cluster_ui_deployment.yaml 
b/chart/templates/cluster_ui_deployment.yaml
index 17c32df..184f6e5 100644
--- a/chart/templates/cluster_ui_deployment.yaml
+++ b/chart/templates/cluster_ui_deployment.yaml
@@ -62,28 +62,8 @@ spec:
               value: "/etc/tls/{{ 
.Values.cluster.ui.standalone.tls.httpSecretName }}/tls.key"
             {{- end }}
             {{- end }}
-            {{- if and .Values.etcd.auth.rbac.create (not 
.Values.etcd.auth.rbac.allowNoneAuthentication) }}
-            - name: BYDB_ETCD_USERNAME
-              value: "root"
-            - name: BYDB_ETCD_PASSWORD
-              value: {{ .Values.etcd.auth.rbac.rootPassword }}
-            {{- end }}
-            {{- if .Values.etcd.auth.client.secureTransport }}
-            - name: BYDB_ETCD_TLS_CA_FILE
-              value: "/etc/tls/{{ 
.Values.cluster.ui.standalone.tls.etcdSecretName }}/ca.crt"
-            {{- end }}
-            {{- if .Values.etcd.auth.client.enableAuthentication }}
-            - name: BYDB_ETCD_TLS_CERT_FILE
-              value: "/etc/tls/{{ 
.Values.cluster.ui.standalone.tls.etcdSecretName }}/tls.crt"
-            - name: BYDB_ETCD_TLS_KEY_FILE
-              value: "/etc/tls/{{ 
.Values.cluster.ui.standalone.tls.etcdSecretName }}/tls.key"
-            {{- end }}
-            {{- if and (not .Values.etcd.enabled) 
.Values.cluster.etcdEndpoints }}
-            - name: BYDB_ETCD_ENDPOINTS
-              value: "{{- .Values.cluster.etcdEndpoints | join "," -}}"
-            {{- else }}
-            {{- include "banyandb.etcdEndpoints" . | nindent 12 }}
-            {{- end }}
+            {{- include "banyandb.schemaStorageEnv" . | nindent 12 }}
+            {{- include "banyandb.etcdEnv" . | nindent 12 }}
           args:
             - liaison
           ports:
diff --git a/chart/values-lifecycle.yaml b/chart/values-lifecycle.yaml
index 23d839b..130a943 100644
--- a/chart/values-lifecycle.yaml
+++ b/chart/values-lifecycle.yaml
@@ -40,7 +40,7 @@ image:
   ##
   pullPolicy: IfNotPresent
 
-## @section Etcd Client Configuration for Node Discovery
+## @section Etcd Client Configuration
 ##
 etcd-client:
   ## @param etcd-client.namespace Namespace in etcd for node registration
@@ -58,6 +58,39 @@ etcd-client:
   ##
   fullSyncInterval: "30m"
 
+  ## @param etcd-client.endpoints List of external etcd endpoints
+  ## e.g. ["etcd-0.etcd-headless.ns:2379"]
+  ##
+  endpoints: []
+
+  ## @section Etcd Client Authentication
+  ##
+  auth:
+    ## @param etcd-client.auth.username Username for etcd authentication
+    ##
+    username: ""
+    ## @param etcd-client.auth.password Password for etcd authentication
+    ##
+    password: ""
+    ## @section Etcd Client TLS Configuration
+    ##
+    tls:
+      ## @param etcd-client.auth.tls.enabled Enable TLS for etcd client
+      ##
+      enabled: false
+      ## @param etcd-client.auth.tls.secretName K8s secret name containing TLS 
certs
+      ##
+      secretName: ""
+      ## @param etcd-client.auth.tls.caFilename CA certificate filename
+      ##
+      caFilename: "ca.crt"
+      ## @param etcd-client.auth.tls.certFilename Client certificate filename
+      ##
+      certFilename: "tls.crt"
+      ## @param etcd-client.auth.tls.keyFilename Client key filename
+      ##
+      keyFilename: "tls.key"
+
 ## @section Configuration for standalone deployment
 ##
 standalone:
@@ -222,9 +255,25 @@ cluster:
   ## @param cluster.enabled Enable cluster mode (boolean)
   ##
   enabled: true
-  ## @param cluster.etcdEndpoints List of etcd endpoints
+
+  ## @section Schema Storage Configuration
   ##
-  etcdEndpoints: []
+  schemaStorage:
+    ## @param cluster.schemaStorage.mode Schema storage mode ("property" or 
"etcd")
+    ## Default: property
+    ##
+    mode: "property"
+    ## @section Property Mode Configuration
+    ##
+    property:
+      ## @param cluster.schemaStorage.property.serverRepairCron Cron schedule 
for metadata property server repair trigger
+      ## Default: "* 2 * * *"
+      ##
+      serverRepairCron: "* 2 * * *"
+      ## @param cluster.schemaStorage.property.clientSyncInterval Interval for 
property schema synchronization
+      ## Default: "20s"
+      ##
+      clientSyncInterval: "20s"
 
   ## @section Node Discovery Configuration for Service Discovery
   ##
@@ -1154,93 +1203,3 @@ serviceAccount:
   ##
   name: ""
 
-## @section Etcd configuration for cluster state management
-##
-etcd:
-  ## @param etcd.enabled Enable etcd (boolean)
-  ##
-  enabled: true
-  ## @param etcd.replicaCount Number of etcd replicas
-  ##
-  replicaCount: 1
-  ## @param etcd.image.repository Docker repository for etcd
-  ##
-  image:
-    repository: bitnamilegacy/etcd
-  ## @section Authentication configuration for etcd
-  ##
-  auth:
-    ## @section RBAC configuration for etcd
-    ##
-    rbac:
-      ## @param etcd.auth.rbac.create Create RBAC roles (boolean)
-      ##
-      create: true
-      ## @param etcd.auth.rbac.allowNoneAuthentication Allow unauthenticated 
access (boolean)
-      ##
-      allowNoneAuthentication: false
-      ## @param etcd.auth.rbac.rootPassword Root user password
-      ##
-      rootPassword: banyandb
-    ## @section Client TLS configuration
-    ##
-    client:
-      ## @param etcd.auth.client.secureTransport Enable TLS for client 
communication (boolean)
-      ##
-      secureTransport: false
-      ## @param etcd.auth.client.existingSecret Existing secret containing TLS 
certs
-      ##
-      existingSecret: ""
-      ## @param etcd.auth.client.enableAuthentication Enable client 
authentication (boolean)
-      ##
-      enableAuthentication: false
-      ## @param etcd.auth.client.certFilename Client certificate filename
-      ##
-      certFilename: tls.crt
-      ## @param etcd.auth.client.certKeyFilename Client certificate key 
filename
-      ##
-      certKeyFilename: tls.key
-      ## @param etcd.auth.client.caFilename CA certificate filename for TLS
-      ##
-      caFilename: ""
-    ## Authentication token
-    ## ref: 
https://etcd.io/docs/latest/learning/design-auth-v3/#two-types-of-tokens-simple-and-jwt
-    ##
-    token:
-      ## @param auth.token.enabled Enables token authentication
-      ##
-      enabled: true
-      ## @param auth.token.type Authentication token type. Allowed values: 
'simple' or 'jwt'
-      ## ref: https://etcd.io/docs/latest/op-guide/configuration/#--auth-token
-      ##
-      type: simple
-  ## @section Liveness probe configuration for etcd
-  ##
-  livenessProbe:
-    ## @param etcd.livenessProbe.initialDelaySeconds Initial delay for 
liveness probe
-    ##
-    initialDelaySeconds: 10
-  ## @section Readiness probe configuration for etcd
-  ##
-  readinessProbe:
-    ## @param etcd.readinessProbe.initialDelaySeconds Initial delay for 
readiness probe
-    ##
-    initialDelaySeconds: 10
-  ## @param etcd.autoCompactionMode Auto-compaction mode (periodic, revision)
-  ##
-  autoCompactionMode: periodic
-  ## @param etcd.autoCompactionRetention Auto-compaction retention period
-  ##
-  autoCompactionRetention: "1"
-  ## @extra etcd.defrag Configuration for defragmentation
-  ##
-  defrag:
-    ## @param etcd.defrag.enabled Enable defragmentation (boolean)
-    ##
-    enabled: true
-    ## @extra etcd.defrag.cronjob Cron job configuration for defragmentation
-    ##
-    cronjob:
-      ## @param etcd.defrag.cronjob.schedule Cron schedule for defragmentation
-      ##
-      schedule: "0 0 * * *"
diff --git a/chart/values.yaml b/chart/values.yaml
index 9fb5aa8..27aaa3f 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -74,7 +74,7 @@ auth:
   ##
   users: []
 
-## @section Etcd Client Configuration for Node Discovery
+## @section Etcd Client Configuration
 ##
 etcd-client:
   ## @param etcd-client.namespace Namespace in etcd for node registration
@@ -92,6 +92,39 @@ etcd-client:
   ##
   fullSyncInterval: "30m"
 
+  ## @param etcd-client.endpoints List of external etcd endpoints
+  ## e.g. ["etcd-0.etcd-headless.ns:2379"]
+  ##
+  endpoints: []
+
+  ## @section Etcd Client Authentication
+  ##
+  auth:
+    ## @param etcd-client.auth.username Username for etcd authentication
+    ##
+    username: ""
+    ## @param etcd-client.auth.password Password for etcd authentication
+    ##
+    password: ""
+    ## @section Etcd Client TLS Configuration
+    ##
+    tls:
+      ## @param etcd-client.auth.tls.enabled Enable TLS for etcd client
+      ##
+      enabled: false
+      ## @param etcd-client.auth.tls.secretName K8s secret name containing TLS 
certs
+      ##
+      secretName: ""
+      ## @param etcd-client.auth.tls.caFilename CA certificate filename
+      ##
+      caFilename: "ca.crt"
+      ## @param etcd-client.auth.tls.certFilename Client certificate filename
+      ##
+      certFilename: "tls.crt"
+      ## @param etcd-client.auth.tls.keyFilename Client key filename
+      ##
+      keyFilename: "tls.key"
+
 ## @section Configuration for standalone deployment
 ##
 standalone:
@@ -263,9 +296,25 @@ cluster:
   ## @param cluster.enabled Enable cluster mode (boolean)
   ##
   enabled: true
-  ## @param cluster.etcdEndpoints List of etcd endpoints
+
+  ## @section Schema Storage Configuration
   ##
-  etcdEndpoints: []
+  schemaStorage:
+    ## @param cluster.schemaStorage.mode Schema storage mode ("property" or 
"etcd")
+    ## Default: property
+    ##
+    mode: "property"
+    ## @section Property Mode Configuration
+    ##
+    property:
+      ## @param cluster.schemaStorage.property.serverRepairCron Cron schedule 
for metadata property server repair trigger
+      ## Default: "@every 10m"
+      ##
+      serverRepairCron: "@every 10m"
+      ## @param cluster.schemaStorage.property.clientSyncInterval Interval for 
property schema client synchronization
+      ## Default: "20s"
+      ##
+      clientSyncInterval: "20s"
 
   ## @section Node Discovery Configuration for Service Discovery
   ##
@@ -1178,93 +1227,3 @@ serviceAccount:
   ##
   name: ""
 
-## @section Etcd configuration for cluster state management
-##
-etcd:
-  ## @param etcd.enabled Enable etcd (boolean)
-  ##
-  enabled: true
-  ## @param etcd.replicaCount Number of etcd replicas
-  ##
-  replicaCount: 1
-  ## @param etcd.image.repository Docker repository for etcd
-  ##
-  image:
-    repository: bitnamilegacy/etcd
-  ## @section Authentication configuration for etcd
-  ##
-  auth:
-    ## @section RBAC configuration for etcd
-    ##
-    rbac:
-      ## @param etcd.auth.rbac.create Create RBAC roles (boolean)
-      ##
-      create: true
-      ## @param etcd.auth.rbac.allowNoneAuthentication Allow unauthenticated 
access (boolean)
-      ##
-      allowNoneAuthentication: false
-      ## @param etcd.auth.rbac.rootPassword Root user password
-      ##
-      rootPassword: banyandb
-    ## @section Client TLS configuration
-    ##
-    client:
-      ## @param etcd.auth.client.secureTransport Enable TLS for client 
communication (boolean)
-      ##
-      secureTransport: false
-      ## @param etcd.auth.client.existingSecret Existing secret containing TLS 
certs
-      ##
-      existingSecret: ""
-      ## @param etcd.auth.client.enableAuthentication Enable client 
authentication (boolean)
-      ##
-      enableAuthentication: false
-      ## @param etcd.auth.client.certFilename Client certificate filename
-      ##
-      certFilename: tls.crt
-      ## @param etcd.auth.client.certKeyFilename Client certificate key 
filename
-      ##
-      certKeyFilename: tls.key
-      ## @param etcd.auth.client.caFilename CA certificate filename for TLS
-      ##
-      caFilename: ""
-    ## Authentication token
-    ## ref: 
https://etcd.io/docs/latest/learning/design-auth-v3/#two-types-of-tokens-simple-and-jwt
-    ##
-    token:
-      ## @param etcd.auth.token.enabled Enables token authentication
-      ##
-      enabled: true
-      ## @param etcd.auth.token.type Authentication token type. Allowed 
values: 'simple' or 'jwt'
-      ## ref: https://etcd.io/docs/latest/op-guide/configuration/#--auth-token
-      ##
-      type: simple
-  ## @section Liveness probe configuration for etcd
-  ##
-  livenessProbe:
-    ## @param etcd.livenessProbe.initialDelaySeconds Initial delay for 
liveness probe
-    ##
-    initialDelaySeconds: 10
-  ## @section Readiness probe configuration for etcd
-  ##
-  readinessProbe:
-    ## @param etcd.readinessProbe.initialDelaySeconds Initial delay for 
readiness probe
-    ##
-    initialDelaySeconds: 10
-  ## @param etcd.autoCompactionMode Auto-compaction mode (periodic, revision)
-  ##
-  autoCompactionMode: periodic
-  ## @param etcd.autoCompactionRetention Auto-compaction retention period
-  ##
-  autoCompactionRetention: "1"
-  ## @extra etcd.defrag Configuration for defragmentation
-  ##
-  defrag:
-    ## @param etcd.defrag.enabled Enable defragmentation (boolean)
-    ##
-    enabled: true
-    ## @extra etcd.defrag.cronjob Cron job configuration for defragmentation
-    ##
-    cronjob:
-      ## @param etcd.defrag.cronjob.schedule Cron schedule for defragmentation
-      ##
-      schedule: "0 0 * * *"
diff --git a/doc/parameters.md b/doc/parameters.md
index 507b483..e8bcba8 100644
--- a/doc/parameters.md
+++ b/doc/parameters.md
@@ -28,13 +28,31 @@ The content of this document describes the parameters that 
can be configured in
 | `auth.credentialsFileKey` | Key name in the Secret that stores the           
        | `credentials.yaml` |
 | `auth.users`              | List of users to configure when not using 
existingSecret | `[]`               |
 
-### Etcd Client Configuration for Node Discovery
+### Etcd Client Configuration
 
 | Name                               | Description                             
| Value      |
 
|------------------------------------|-----------------------------------------|------------|
 | `etcd-client.namespace`            | Namespace in etcd for node registration 
| `banyandb` |
 | `etcd-client.nodeDiscoveryTimeout` | Timeout for node discovery              
| `2m`       |
 | `etcd-client.fullSyncInterval`     | Interval for full state synchronization 
| `30m`      |
+| `etcd-client.endpoints`            | List of external etcd endpoints         
| `[]`       |
+
+### Etcd Client Authentication
+
+| Name                            | Description                          | 
Value   |
+|---------------------------------|--------------------------------------|---------|
+| `etcd-client.auth.username`     | Username for etcd authentication     | 
`""`    |
+| `etcd-client.auth.password`     | Password for etcd authentication     | 
`""`    |
+
+### Etcd Client TLS Configuration
+
+| Name                              | Description                              
| Value     |
+|-----------------------------------|------------------------------------------|-----------|
+| `etcd-client.auth.tls.enabled`    | Enable TLS for etcd client               
| `false`   |
+| `etcd-client.auth.tls.secretName` | K8s secret name containing TLS certs     
| `""`      |
+| `etcd-client.auth.tls.caFilename` | CA certificate filename                  
| `ca.crt`  |
+| `etcd-client.auth.tls.certFilename` | Client certificate filename            
| `tls.crt` |
+| `etcd-client.auth.tls.keyFilename` | Client key filename                     
| `tls.key` |
 
 ### Configuration for standalone deployment
 
@@ -90,10 +108,17 @@ The content of this document describes the parameters that 
can be configured in
 
 ### Cluster mode configuration
 
-| Name                    | Description                   | Value  |
-|-------------------------|-------------------------------|--------|
-| `cluster.enabled`       | Enable cluster mode (boolean) | `true` |
-| `cluster.etcdEndpoints` | List of etcd endpoints        | `[]`   |
+| Name              | Description                   | Value  |
+|-------------------|-------------------------------|--------|
+| `cluster.enabled` | Enable cluster mode (boolean) | `true` |
+
+### Schema Storage Configuration
+
+| Name                                              | Description              
                                | Value        |
+|---------------------------------------------------|----------------------------------------------------------|--------------|
+| `cluster.schemaStorage.mode`                      | Schema storage mode 
("property" or "etcd")               | `property`   |
+| `cluster.schemaStorage.property.serverRepairCron` | Cron schedule for 
metadata property server repair trigger | `@every 10m` |
+| `cluster.schemaStorage.property.clientSyncInterval`     | Interval for 
property schema client synchronization  | `20s`        |
 
 ### Node Discovery Configuration for Service Discovery
 
@@ -450,52 +475,3 @@ The content of this document describes the parameters that 
can be configured in
 | `serviceAccount.annotations` | Annotations for the service account | `{}`   |
 | `serviceAccount.name`        | Name of the service account         | `""`   |
 
-### Etcd configuration for cluster state management
-
-| Name                    | Description                | Value                |
-| ----------------------- | -------------------------- | -------------------- |
-| `etcd.enabled`          | Enable etcd (boolean)      | `true`               |
-| `etcd.replicaCount`     | Number of etcd replicas    | `1`                  |
-| `etcd.image.repository` | Docker repository for etcd | `bitnamilegacy/etcd` |
-
-### Authentication configuration for etcd
-
-
-### RBAC configuration for etcd
-
-| Name                                     | Description                       
     | Value      |
-| ---------------------------------------- | 
-------------------------------------- | ---------- |
-| `etcd.auth.rbac.create`                  | Create RBAC roles (boolean)       
     | `true`     |
-| `etcd.auth.rbac.allowNoneAuthentication` | Allow unauthenticated access 
(boolean) | `false`    |
-| `etcd.auth.rbac.rootPassword`            | Root user password                
     | `banyandb` |
-
-### Client TLS configuration
-
-| Name                                    | Description                        
                          | Value     |
-| --------------------------------------- | 
------------------------------------------------------------ | --------- |
-| `etcd.auth.client.secureTransport`      | Enable TLS for client 
communication (boolean)                | `false`   |
-| `etcd.auth.client.existingSecret`       | Existing secret containing TLS 
certs                         | `""`      |
-| `etcd.auth.client.enableAuthentication` | Enable client authentication 
(boolean)                       | `false`   |
-| `etcd.auth.client.certFilename`         | Client certificate filename        
                          | `tls.crt` |
-| `etcd.auth.client.certKeyFilename`      | Client certificate key filename    
                          | `tls.key` |
-| `etcd.auth.client.caFilename`           | CA certificate filename for TLS    
                          | `""`      |
-| `etcd.auth.token.enabled`               | Enables token authentication       
                          | `true`    |
-| `etcd.auth.token.type`                  | Authentication token type. Allowed 
values: 'simple' or 'jwt' | `simple`  |
-
-### Liveness probe configuration for etcd
-
-| Name                                     | Description                      
| Value |
-| ---------------------------------------- | -------------------------------- 
| ----- |
-| `etcd.livenessProbe.initialDelaySeconds` | Initial delay for liveness probe 
| `10`  |
-
-### Readiness probe configuration for etcd
-
-| Name                                      | Description                      
          | Value       |
-| ----------------------------------------- | 
------------------------------------------ | ----------- |
-| `etcd.readinessProbe.initialDelaySeconds` | Initial delay for readiness 
probe          | `10`        |
-| `etcd.autoCompactionMode`                 | Auto-compaction mode (periodic, 
revision)  | `periodic`  |
-| `etcd.autoCompactionRetention`            | Auto-compaction retention period 
          | `1`         |
-| `etcd.defrag`                             | Configuration for 
defragmentation          |             |
-| `etcd.defrag.enabled`                     | Enable defragmentation (boolean) 
          | `true`      |
-| `etcd.defrag.cronjob`                     | Cron job configuration for 
defragmentation |             |
-| `etcd.defrag.cronjob.schedule`            | Cron schedule for 
defragmentation          | `0 0 * * *` |
diff --git a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml 
b/test/e2e/e2e-banyandb-cluster-schema-etcd.yaml
similarity index 56%
copy from test/e2e/e2e-banyandb-fodc-proxy-service.yaml
copy to test/e2e/e2e-banyandb-cluster-schema-etcd.yaml
index 4120ca0..52e06c1 100644
--- a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
+++ b/test/e2e/e2e-banyandb-cluster-schema-etcd.yaml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# E2E test for FODC proxy service functionality
+# E2E test for BanyanDB cluster with etcd schema storage mode
 
 setup:
   env: kind
@@ -40,28 +40,32 @@ setup:
           --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
+    - name: Install etcd
       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
+        helm -n istio-system install etcd bitnami/etcd \
+          --set replicaCount=1 \
+          --set auth.rbac.create=true \
+          --set auth.rbac.allowNoneAuthentication=false \
+          --set auth.rbac.rootPassword=banyandb \
+          --set auth.client.secureTransport=false \
+          --set auth.client.enableAuthentication=false \
+          --set auth.token.enabled=true \
+          --set auth.token.type=simple
       wait:
         - namespace: istio-system
           resource: pod
           for: condition=ready
-          label-selector: app.kubernetes.io/name=banyandb
+          label-selector: app.kubernetes.io/name=etcd
+    - name: Install BanyanDB
+      command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.cluster-schema-etcd.yaml
+      wait:
         - namespace: istio-system
-          resource: deployments/banyandb-fodc-proxy
-          for: condition=available
+          resource: pod
+          for: condition=ready
+          label-selector: app.kubernetes.io/name=banyandb
     - name: Install SkyWalking
       command: |
         helm -n istio-system install --timeout 10m skywalking 
oci://ghcr.io/apache/skywalking-helm/skywalking-helm \
@@ -111,11 +115,47 @@ verify:
     count: 20
     interval: 15s
   cases:
-    # Verify FODC proxy is collecting observability data - check services are 
observable
+    # service list
     - 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
+    # service instance list
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 instance list --service-name=e2e::productpage
+      expected: expected/service-instance.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 instance list --service-name=e2e::reviews
+      expected: expected/service-instance.yml
+    # service endpoint
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 endpoint list --service-name=e2e::productpage
+      expected: expected/service-endpoint-productpage.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 endpoint list --service-name=e2e::reviews
+      expected: expected/service-endpoint-reviews.yml
+
+    # service metrics: e2e::productpage
     - 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
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_resp_time --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_apdex --service-name=e2e::productpage
+      expected: expected/metrics-has-value.yml
+    # service metrics: e2e::reviews
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_sla --service-name=e2e::reviews
+      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::reviews
+      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_resp_time --service-name=e2e::reviews
+      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_apdex --service-name=e2e::reviews
+      expected: expected/metrics-has-value.yml
+
+    # dependency service
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 dependency service --service-name=e2e::productpage
+      expected: expected/dependency-services-productpage.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 dependency service --service-name=e2e::reviews
+      expected: expected/dependency-services-reviews.yml
+
+    # service relation metrics
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_relation_client_cpm  
--service-name=e2e::productpage --dest-service-name=e2e::reviews
+      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_relation_server_cpm  
--service-name=e2e::productpage --dest-service-name=e2e::reviews
+      expected: expected/metrics-has-value.yml
diff --git a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml 
b/test/e2e/e2e-banyandb-cluster-schema-property.yaml
similarity index 58%
copy from test/e2e/e2e-banyandb-fodc-proxy-service.yaml
copy to test/e2e/e2e-banyandb-cluster-schema-property.yaml
index 4120ca0..a3dd515 100644
--- a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
+++ b/test/e2e/e2e-banyandb-cluster-schema-property.yaml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# E2E test for FODC proxy service functionality
+# E2E test for BanyanDB cluster with property schema storage mode (no etcd)
 
 setup:
   env: kind
@@ -40,28 +40,15 @@ setup:
           --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
+    - name: Install BanyanDB
+      command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.cluster-schema-property.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 \
@@ -111,11 +98,47 @@ verify:
     count: 20
     interval: 15s
   cases:
-    # Verify FODC proxy is collecting observability data - check services are 
observable
+    # service list
     - 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
+    # service instance list
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 instance list --service-name=e2e::productpage
+      expected: expected/service-instance.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 instance list --service-name=e2e::reviews
+      expected: expected/service-instance.yml
+    # service endpoint
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 endpoint list --service-name=e2e::productpage
+      expected: expected/service-endpoint-productpage.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 endpoint list --service-name=e2e::reviews
+      expected: expected/service-endpoint-reviews.yml
+
+    # service metrics: e2e::productpage
     - 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
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_resp_time --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_apdex --service-name=e2e::productpage
+      expected: expected/metrics-has-value.yml
+    # service metrics: e2e::reviews
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_sla --service-name=e2e::reviews
+      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::reviews
+      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_resp_time --service-name=e2e::reviews
+      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_apdex --service-name=e2e::reviews
+      expected: expected/metrics-has-value.yml
+
+    # dependency service
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 dependency service --service-name=e2e::productpage
+      expected: expected/dependency-services-productpage.yml
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 dependency service --service-name=e2e::reviews
+      expected: expected/dependency-services-reviews.yml
+
+    # service relation metrics
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics exec --expression=service_relation_client_cpm  
--service-name=e2e::productpage --dest-service-name=e2e::reviews
+      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_relation_server_cpm  
--service-name=e2e::productpage --dest-service-name=e2e::reviews
+      expected: expected/metrics-has-value.yml
diff --git a/test/e2e/e2e-banyandb-cluster.yaml 
b/test/e2e/e2e-banyandb-cluster.yaml
index 73c743a..840929c 100644
--- a/test/e2e/e2e-banyandb-cluster.yaml
+++ b/test/e2e/e2e-banyandb-cluster.yaml
@@ -42,11 +42,23 @@ setup:
         kubectl label namespace default istio-injection=enabled
     - name: Install helm
       command: bash test/e2e/setup-e2e-shell/install.sh helm
-    - name: Install dependency
+    - name: Install etcd
       command: |
         helm repo add bitnami https://charts.bitnami.com/bitnami
-        cd chart
-        helm dependency update
+        helm -n istio-system install etcd bitnami/etcd \
+          --set replicaCount=1 \
+          --set auth.rbac.create=true \
+          --set auth.rbac.allowNoneAuthentication=false \
+          --set auth.rbac.rootPassword=banyandb \
+          --set auth.client.secureTransport=false \
+          --set auth.client.enableAuthentication=false \
+          --set auth.token.enabled=true \
+          --set auth.token.type=simple
+      wait:
+        - namespace: istio-system
+          resource: pod
+          for: condition=ready
+          label-selector: app.kubernetes.io/name=etcd
     - name: Install BanyanDB
       command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.cluster.yaml
       wait:
diff --git a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml 
b/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
index 4120ca0..6e70d33 100644
--- a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
+++ b/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
@@ -47,11 +47,23 @@ setup:
           label-selector: app=istiod
     - name: Install helm
       command: bash test/e2e/setup-e2e-shell/install.sh helm
-    - name: Install dependency
+    - name: Install etcd
       command: |
         helm repo add bitnami https://charts.bitnami.com/bitnami
-        cd chart
-        helm dependency update
+        helm -n istio-system install etcd bitnami/etcd \
+          --set replicaCount=1 \
+          --set auth.rbac.create=true \
+          --set auth.rbac.allowNoneAuthentication=false \
+          --set auth.rbac.rootPassword=banyandb \
+          --set auth.client.secureTransport=false \
+          --set auth.client.enableAuthentication=false \
+          --set auth.token.enabled=true \
+          --set auth.token.type=simple
+      wait:
+        - namespace: istio-system
+          resource: pod
+          for: condition=ready
+          label-selector: app.kubernetes.io/name=etcd
     - name: Install BanyanDB with FODC
       command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.fodc.yaml
       wait:
diff --git a/test/e2e/e2e-banyandb-lifecycle.yaml 
b/test/e2e/e2e-banyandb-lifecycle.yaml
index ba39ce4..c19b45a 100644
--- a/test/e2e/e2e-banyandb-lifecycle.yaml
+++ b/test/e2e/e2e-banyandb-lifecycle.yaml
@@ -42,11 +42,23 @@ setup:
         kubectl label namespace default istio-injection=enabled
     - name: Install helm
       command: bash test/e2e/setup-e2e-shell/install.sh helm
-    - name: Install dependency
+    - name: Install etcd
       command: |
         helm repo add bitnami https://charts.bitnami.com/bitnami
-        cd chart
-        helm dependency update
+        helm -n istio-system install etcd bitnami/etcd \
+          --set replicaCount=1 \
+          --set auth.rbac.create=true \
+          --set auth.rbac.allowNoneAuthentication=false \
+          --set auth.rbac.rootPassword=banyandb \
+          --set auth.client.secureTransport=false \
+          --set auth.client.enableAuthentication=false \
+          --set auth.token.enabled=true \
+          --set auth.token.type=simple
+      wait:
+        - namespace: istio-system
+          resource: pod
+          for: condition=ready
+          label-selector: app.kubernetes.io/name=etcd
     - name: Install BanyanDB with lifecycle features
       command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.lifecycle.yaml
       wait:
diff --git a/test/e2e/e2e-banyandb-node-registry-dns.yaml 
b/test/e2e/e2e-banyandb-node-registry-dns.yaml
index 205dfdd..257e933 100644
--- a/test/e2e/e2e-banyandb-node-registry-dns.yaml
+++ b/test/e2e/e2e-banyandb-node-registry-dns.yaml
@@ -44,12 +44,7 @@ setup:
       command: bash test/e2e/setup-e2e-shell/install.sh kubectl
     - 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 lifecycle features
+    - name: Install BanyanDB with DNS node registry
       command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.dns.registry.yaml --create-namespace
       wait:
         - namespace: istio-system
diff --git a/test/e2e/e2e-banyandb-standalone.yaml 
b/test/e2e/e2e-banyandb-standalone.yaml
index 8788128..2af596e 100644
--- a/test/e2e/e2e-banyandb-standalone.yaml
+++ b/test/e2e/e2e-banyandb-standalone.yaml
@@ -42,11 +42,6 @@ setup:
         kubectl label namespace default istio-injection=enabled
     - 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
       command: helm -n istio-system install banyandb chart/ -f 
test/e2e/values.standalone.yaml
       wait:
diff --git a/test/e2e/values.dns.registry.yaml 
b/test/e2e/values.cluster-schema-etcd.yaml
similarity index 61%
copy from test/e2e/values.dns.registry.yaml
copy to test/e2e/values.cluster-schema-etcd.yaml
index 6cf581b..fb4eca2 100644
--- a/test/e2e/values.dns.registry.yaml
+++ b/test/e2e/values.cluster-schema-etcd.yaml
@@ -13,18 +13,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Default values for banyandb.
-# This is a YAML-formatted file.
-# Declare variables to be passed into your templates.
+# Values for BanyanDB cluster with etcd schema storage mode and DNS node 
discovery.
 
 image:
-  repository: ghcr.io/apache/skywalking-banyandb
-  tag: 8a880f51df7a9f843803b84ca8b6e9ff9d2acfca
+  repository: mrproliu/skywalking-banyandb
+  tag: property-schema1
   pullPolicy: IfNotPresent
 
 cluster:
   enabled: true
-  etcdEndpoints: []
+  schemaStorage:
+    mode: "etcd"
   nodeDiscovery:
     mode: "dns"
   liaison:
@@ -32,14 +31,18 @@ cluster:
   data:
     nodeTemplate:
       replicas: 2
-      env:
-        - name: BYDB_PROPERTY_REPAIR_ENABLED
-          value: "true"
     roles:
       hot: {}
   fodc:
     enabled: false
 
+etcd-client:
+  endpoints:
+    - "etcd-0.etcd-headless.istio-system:2379"
+  auth:
+    username: "root"
+    password: "banyandb"
+
 storage:
   data:
     enabled: true
@@ -53,15 +56,6 @@ storage:
       - ReadWriteOnce
       storageClass: null
       volumeMode: Filesystem
-    - mountTargets: [ "backups" ]
-      nodeRole: hot
-      existingClaimName: null
-      claimName: backups
-      size: 5Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
   liaison:
     enabled: true
     persistentVolumeClaims:
@@ -84,38 +78,17 @@ 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:
-  enabled: true
-  replicaCount: 1
-  auth:
-    rbac:
-      create: true
-      allowNoneAuthentication: false
-      rootPassword: banyandb
-    client:
-      secureTransport: false
-      existingSecret: ""
-      enableAuthentication: false
-      certFilename: tls.crt
-      certKeyFilename: tls.key
-      caFilename: ""
-      # extraEnvVars:
-      #   - name: ETCDCTL_CACERT
-      #     value: /opt/bitnami/etcd/certs/client/ca.crt
-    token:
-      enabled: true
-      type: simple
-
 fullnameOverride: ""
 nameOverride: "banyandb"
 
 auth:
-  enabled: false
+  enabled: true
+  existingSecret: ""
+  credentialsFileKey: "credentials.yaml"
+  users:
+    - username: admin
+      password: banyandb
diff --git a/test/e2e/values.dns.registry.yaml 
b/test/e2e/values.cluster-schema-property.yaml
similarity index 61%
copy from test/e2e/values.dns.registry.yaml
copy to test/e2e/values.cluster-schema-property.yaml
index 6cf581b..e247128 100644
--- a/test/e2e/values.dns.registry.yaml
+++ b/test/e2e/values.cluster-schema-property.yaml
@@ -13,18 +13,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Default values for banyandb.
-# This is a YAML-formatted file.
-# Declare variables to be passed into your templates.
+# Values for BanyanDB cluster with property schema storage mode (no etcd 
needed).
 
 image:
-  repository: ghcr.io/apache/skywalking-banyandb
-  tag: 8a880f51df7a9f843803b84ca8b6e9ff9d2acfca
+  repository: mrproliu/skywalking-banyandb
+  tag: property-schema1
   pullPolicy: IfNotPresent
 
 cluster:
   enabled: true
-  etcdEndpoints: []
+  schemaStorage:
+    mode: "property"
   nodeDiscovery:
     mode: "dns"
   liaison:
@@ -32,9 +31,6 @@ cluster:
   data:
     nodeTemplate:
       replicas: 2
-      env:
-        - name: BYDB_PROPERTY_REPAIR_ENABLED
-          value: "true"
     roles:
       hot: {}
   fodc:
@@ -53,15 +49,6 @@ storage:
       - ReadWriteOnce
       storageClass: null
       volumeMode: Filesystem
-    - mountTargets: [ "backups" ]
-      nodeRole: hot
-      existingClaimName: null
-      claimName: backups
-      size: 5Gi
-      accessModes:
-      - ReadWriteOnce
-      storageClass: null
-      volumeMode: Filesystem
   liaison:
     enabled: true
     persistentVolumeClaims:
@@ -84,38 +71,17 @@ 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:
-  enabled: true
-  replicaCount: 1
-  auth:
-    rbac:
-      create: true
-      allowNoneAuthentication: false
-      rootPassword: banyandb
-    client:
-      secureTransport: false
-      existingSecret: ""
-      enableAuthentication: false
-      certFilename: tls.crt
-      certKeyFilename: tls.key
-      caFilename: ""
-      # extraEnvVars:
-      #   - name: ETCDCTL_CACERT
-      #     value: /opt/bitnami/etcd/certs/client/ca.crt
-    token:
-      enabled: true
-      type: simple
-
 fullnameOverride: ""
 nameOverride: "banyandb"
 
 auth:
-  enabled: false
+  enabled: true
+  existingSecret: ""
+  credentialsFileKey: "credentials.yaml"
+  users:
+    - username: admin
+      password: banyandb
diff --git a/test/e2e/values.cluster.yaml b/test/e2e/values.cluster.yaml
index b794229..a1c2f6d 100644
--- a/test/e2e/values.cluster.yaml
+++ b/test/e2e/values.cluster.yaml
@@ -24,7 +24,10 @@ image:
 
 cluster:
   enabled: true
-  etcdEndpoints: []
+  schemaStorage:
+    mode: "etcd"
+  nodeDiscovery:
+    mode: "etcd"
   liaison:
     replicas: 2
     podAnnotations:
@@ -458,27 +461,12 @@ serviceAccount:
   # If not set and create is true, a name is generated using the fullname 
template
   name: ""
 
-etcd:
-  enabled: true
-  replicaCount: 1
+etcd-client:
+  endpoints:
+    - "etcd-0.etcd-headless.istio-system:2379"
   auth:
-    rbac:
-      create: true
-      allowNoneAuthentication: false
-      rootPassword: banyandb
-    client:
-      secureTransport: false
-      existingSecret: ""
-      enableAuthentication: false
-      certFilename: tls.crt
-      certKeyFilename: tls.key
-      caFilename: ""
-      # extraEnvVars:
-      #   - name: ETCDCTL_CACERT
-      #     value: /opt/bitnami/etcd/certs/client/ca.crt
-    token:
-      enabled: true
-      type: simple
+    username: "root"
+    password: "banyandb"
 
 fullnameOverride: ""
 nameOverride: "banyandb"
diff --git a/test/e2e/values.dns.registry.yaml 
b/test/e2e/values.dns.registry.yaml
index 6cf581b..2a2a207 100644
--- a/test/e2e/values.dns.registry.yaml
+++ b/test/e2e/values.dns.registry.yaml
@@ -18,13 +18,17 @@
 # Declare variables to be passed into your templates.
 
 image:
-  repository: ghcr.io/apache/skywalking-banyandb
-  tag: 8a880f51df7a9f843803b84ca8b6e9ff9d2acfca
+  repository: mrproliu/skywalking-banyandb
+  tag: property-schema1
   pullPolicy: IfNotPresent
 
 cluster:
   enabled: true
-  etcdEndpoints: []
+  schemaStorage:
+    mode: "property"
+    property:
+      cron: "* 2 * * *"
+      syncInterval: "20s"
   nodeDiscovery:
     mode: "dns"
   liaison:
@@ -92,28 +96,6 @@ serviceAccount:
   # If not set and create is true, a name is generated using the fullname 
template
   name: ""
 
-etcd:
-  enabled: true
-  replicaCount: 1
-  auth:
-    rbac:
-      create: true
-      allowNoneAuthentication: false
-      rootPassword: banyandb
-    client:
-      secureTransport: false
-      existingSecret: ""
-      enableAuthentication: false
-      certFilename: tls.crt
-      certKeyFilename: tls.key
-      caFilename: ""
-      # extraEnvVars:
-      #   - name: ETCDCTL_CACERT
-      #     value: /opt/bitnami/etcd/certs/client/ca.crt
-    token:
-      enabled: true
-      type: simple
-
 fullnameOverride: ""
 nameOverride: "banyandb"
 
diff --git a/test/e2e/values.fodc.yaml b/test/e2e/values.fodc.yaml
index a67efd8..8d32253 100644
--- a/test/e2e/values.fodc.yaml
+++ b/test/e2e/values.fodc.yaml
@@ -18,13 +18,16 @@
 # Declare variables to be passed into your templates.
 
 image:
-  repository: ghcr.io/apache/skywalking-banyandb
-  tag: 67cb3eaa71d1b2ba9a56dddc17050fd69da78593
+  repository: mrproliu/skywalking-banyandb
+  tag: property-schema1
   pullPolicy: IfNotPresent
 
 cluster:
   enabled: true
-  etcdEndpoints: []
+  schemaStorage:
+    mode: "etcd"
+  nodeDiscovery:
+    mode: "etcd"
   liaison:
     replicas: 2
     podAnnotations:
@@ -407,24 +410,12 @@ serviceAccount:
   # If not set and create is true, a name is generated using the fullname 
template
   name: ""
 
-etcd:
-  enabled: true
-  replicaCount: 1
+etcd-client:
+  endpoints:
+    - "etcd-0.etcd-headless.istio-system:2379"
   auth:
-    rbac:
-      create: true
-      allowNoneAuthentication: false
-      rootPassword: banyandb
-    client:
-      secureTransport: false
-      existingSecret: ""
-      enableAuthentication: false
-      certFilename: tls.crt
-      certKeyFilename: tls.key
-      caFilename: ""
-    token:
-      enabled: true
-      type: simple
+    username: "root"
+    password: "banyandb"
 
 fullnameOverride: ""
 nameOverride: "banyandb"
diff --git a/test/e2e/values.lifecycle.yaml b/test/e2e/values.lifecycle.yaml
index 7d811f3..d7c9ee9 100644
--- a/test/e2e/values.lifecycle.yaml
+++ b/test/e2e/values.lifecycle.yaml
@@ -18,13 +18,16 @@
 # Declare variables to be passed into your templates.
 
 image:
-  repository: ghcr.io/apache/skywalking-banyandb
-  tag: 46083529398b73504e9ca929ef367cd1776aef82
+  repository: mrproliu/skywalking-banyandb
+  tag: property-schema1
   pullPolicy: IfNotPresent
 
 cluster:
   enabled: true
-  etcdEndpoints: []
+  schemaStorage:
+    mode: "etcd"
+  nodeDiscovery:
+    mode: "etcd"
   liaison:
     replicas: 2
     podAnnotations:
@@ -436,34 +439,12 @@ serviceAccount:
   annotations: {}
   name: ""
 
-etcd:
-  enabled: true
-  replicaCount: 1
+etcd-client:
+  endpoints:
+    - "etcd-0.etcd-headless.istio-system:2379"
   auth:
-    rbac:
-      create: true
-      allowNoneAuthentication: false
-      rootPassword: banyandb
-    client:
-      secureTransport: false
-      existingSecret: ""
-      enableAuthentication: false
-      certFilename: tls.crt
-      certKeyFilename: tls.key
-      caFilename: ""
-    token:
-      enabled: true
-      type: simple
-  livenessProbe:
-    initialDelaySeconds: 10
-  readinessProbe:
-    initialDelaySeconds: 10
-  autoCompactionMode: periodic
-  autoCompactionRetention: "1"
-  defrag:
-    enabled: true
-    cronjob:
-      schedule: "0 0 * * *"
+    username: "root"
+    password: "banyandb"
 
 fullnameOverride: ""
 nameOverride: "banyandb"
diff --git a/test/e2e/values.standalone.yaml b/test/e2e/values.standalone.yaml
index 0839a30..38c84df 100644
--- a/test/e2e/values.standalone.yaml
+++ b/test/e2e/values.standalone.yaml
@@ -20,12 +20,9 @@
 cluster:
   enabled: false
 
-etcd:
-  enabled: false
-
 image:
-  repository: ghcr.io/apache/skywalking-banyandb
-  tag: 46083529398b73504e9ca929ef367cd1776aef82
+  repository: mrproliu/skywalking-banyandb
+  tag: property-schema1
   pullPolicy: IfNotPresent
 
 standalone:

Reply via email to