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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2850db1  Upgrade Elasticsearch dependency to ECK 8.18.8 (#176)
2850db1 is described below

commit 2850db1502283a2d8516146c57cc2b49f1da934b
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Fri Feb 27 09:13:23 2026 +0800

    Upgrade Elasticsearch dependency to ECK 8.18.8 (#176)
    
    ## Upgrade Elasticsearch dependency to ECK 8.18.8
    
    ### Chart changes
    - Replace deprecated `elasticsearch` subchart with ECK (`eck-operator` 
3.3.1 + `eck-elasticsearch` 0.18.1, Elasticsearch 8.18.8)
    - Update `_helpers.tpl` with ECK-aware naming, `wait-for-storage` init 
container, and auth secret handling
    - Rewrite `values.yaml` to use ECK configuration (nodeSets, TLS, auth) 
instead of old master/data/client topology
    - Update `values-my-es.yaml` example for external ES with ECK disabled
    - Update `README.md` with new parameter tables and install examples
    
    ### E2E test improvements
    - Consolidate `env.swck` into a single `test/e2e/env` file
    - Migrate all SWCK e2e tests from fetching remote YAML to local template 
files with configurable image tags
    - Migrate SWCK tests to use BanyanDB helm chart instead of hardcoded images
    - Add local SWCK test resource files (`skywalking-components.yaml`, 
`skywalking-components-elasticsearch.yaml`, 
`skywalking-components-satellite.yaml`)
    - Fix oapserverconfig test timeout caused by shell variable lost across 
separate e2e steps
    - Fix trigger configuration (`times: 0`) for continuous metric generation
    - Fix ECK operator StatefulSet wait logic in ES e2e test
---
 .github/workflows/e2e.ci.yaml                      |  11 +-
 CLAUDE.md                                          | 115 +++++++
 README.md                                          |  22 +-
 chart/skywalking/Chart.yaml                        |   9 +-
 chart/skywalking/README.md                         | 122 ++++---
 chart/skywalking/templates/NOTES.txt               |   9 -
 chart/skywalking/templates/_helpers.tpl            |  26 +-
 chart/skywalking/values-my-es.yaml                 |   5 +-
 chart/skywalking/values.yaml                       | 367 ++++++++-------------
 test/e2e/e2e-elasticsearch.yaml                    |  10 +-
 test/e2e/env                                       |  19 +-
 test/e2e/expected/metrics-has-value.yml            |   2 +-
 .../{env.swck => swck/deploy-elasticsearch.yaml}   |  49 ++-
 test/e2e/swck/oap-agent-adapter-hpa.yaml           |  22 +-
 test/e2e/swck/oap-agent-banyandb.yaml              |  50 +--
 test/e2e/swck/oap-ui-agent-elasticsearch.yaml      |  33 +-
 test/e2e/swck/oap-ui-agent-oapserverconfig.yaml    |  38 ++-
 test/e2e/swck/oap-ui-agent-satellite.yaml          |  20 +-
 .../skywalking-components-elasticsearch.yaml}      |  43 ++-
 test/e2e/swck/skywalking-components-satellite.yaml |  67 ++++
 .../skywalking-components.yaml}                    |  43 ++-
 test/e2e/values.yaml                               |  17 +-
 22 files changed, 667 insertions(+), 432 deletions(-)

diff --git a/.github/workflows/e2e.ci.yaml b/.github/workflows/e2e.ci.yaml
index 7cac01b..0869c4f 100644
--- a/.github/workflows/e2e.ci.yaml
+++ b/.github/workflows/e2e.ci.yaml
@@ -52,15 +52,6 @@ jobs:
           - name: Run SWCK oap-ui-agent-satellite Test
             config: test/e2e/swck/oap-ui-agent-satellite.yaml
     name: ${{ matrix.test.name }}
-    env:
-      OAP_TAG: e6bbebe107096bf50ed79e40a88f230bd1237c3d
-      OAP_REPO: ghcr.io/apache/skywalking/oap
-      UI_TAG: e6bbebe107096bf50ed79e40a88f230bd1237c3d
-      UI_REPO: ghcr.io/apache/skywalking/ui
-      SATELLITE_TAG: v35bfaff6352b4dc351a706772796a1f79b651c14
-      SATELLITE_REPO: ghcr.io/apache/skywalking-satellite/skywalking-satellite
-      BANYANDB_TAG: 27cfc5d0eed6891df69eacdf524611cb9fe241e3
-      BANYANDB_REPO: ghcr.io/apache/skywalking-banyandb
     steps:
       - uses: actions/checkout@v2
       - name: Login to ghcr
@@ -74,7 +65,7 @@ jobs:
         with:
           go-version: '1.24'
       - name: ${{ matrix.test.name }}
-        uses: 
apache/skywalking-infra-e2e@7e4b5b68716fdb7b79b21fa8908f9db497e1b115
+        uses: 
apache/skywalking-infra-e2e@8c21e43e241a32a54bdf8eeceb9099eb27e5e9b4
         with:
           e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }}
       - if: ${{ failure() }}
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..764f0f5
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,115 @@
+# CLAUDE.md
+
+## Project Overview
+
+Apache SkyWalking Helm Charts — Helm 3 charts for deploying SkyWalking and 
related components on Kubernetes.
+
+## Repository Structure
+
+```
+chart/
+  skywalking/          # Main SkyWalking chart (OAP, UI, Satellite)
+    Chart.yaml         # Chart metadata and dependencies
+    values.yaml        # Default values
+    values-my-es.yaml  # Example values for external Elasticsearch
+    templates/
+      _helpers.tpl     # Shared template helpers (naming, env vars, init 
containers)
+      oap-*.yaml       # OAP server templates
+      ui-*.yaml        # UI templates
+      satellite-*.yaml # Satellite templates
+      NOTES.txt        # Post-install notes
+  adapter/             # SWCK Adapter chart
+  operator/            # SWCK Operator chart
+test/e2e/              # E2E test configs (skywalking-infra-e2e format)
+  e2e-elasticsearch.yaml
+  e2e-banyandb-*.yaml
+  values.yaml          # Test-specific value overrides
+  swck/                # SWCK-specific e2e tests
+.github/workflows/
+  e2e.ci.yaml          # CI pipeline running all e2e tests
+```
+
+## Chart Dependencies
+
+Defined in `chart/skywalking/Chart.yaml`:
+- **eck-operator** (3.3.1) — ECK operator, condition: `eckOperator.enabled`
+- **eck-elasticsearch** (0.18.1, alias: `elasticsearch`) — ECK-managed ES, 
condition: `elasticsearch.enabled`
+- **postgresql** (12.1.2) — Bitnami PostgreSQL, condition: `postgresql.enabled`
+- **skywalking-banyandb-helm** (alias: `banyandb`) — BanyanDB, condition: 
`banyandb.enabled`
+
+## Key Conventions
+
+### Template Helpers (`_helpers.tpl`)
+- `skywalking.fullname` — base name for all resources
+- `skywalking.oap.fullname` / `skywalking.ui.fullname` / 
`skywalking.satellite.fullname` — component names
+- `skywalking.elasticsearch.fullname` — ECK Elasticsearch resource name 
(service is `{name}-es-http`)
+- `skywalking.containers.wait-for-storage` — init container that waits for the 
configured storage backend
+- `skywalking.oap.envs.storage` — storage-specific environment variables for 
OAP
+
+### Storage Pattern
+Each storage backend (elasticsearch, postgresql, banyandb) follows the same 
pattern:
+- `*.enabled` — deploy the backend as a subchart
+- `*.config.*` — connection settings for external instances (when `enabled: 
false`)
+- `_helpers.tpl` handles both embedded and external modes in 
`wait-for-storage` and `oap.envs.storage`
+
+### ECK Elasticsearch
+- ECK auto-generates an auth secret: `{fullname}-es-elastic-user` with key 
`elastic`
+- HTTP TLS is disabled by default (`http.tls.selfSignedCertificate.disabled: 
true`) for OAP connectivity
+- Node topology is configured via `elasticsearch.nodeSets[]` (count, config, 
podTemplate, volumeClaimTemplates)
+
+## Common Commands
+
+```shell
+# Update chart dependencies
+helm dep up chart/skywalking
+
+# Template rendering (for validation)
+helm template test chart/skywalking \
+  --set oap.image.tag=10.3.0 \
+  --set oap.storageType=elasticsearch \
+  --set ui.image.tag=10.3.0
+
+# Template with external ES (no ECK)
+helm template test chart/skywalking \
+  --set oap.image.tag=10.3.0 \
+  --set oap.storageType=elasticsearch \
+  --set ui.image.tag=10.3.0 \
+  --set elasticsearch.enabled=false \
+  --set eckOperator.enabled=false
+
+# Package chart
+make package
+
+# Clean build artifacts
+make clean
+```
+
+## Required Values
+
+These must be set explicitly for any deployment:
+- `oap.image.tag`
+- `oap.storageType` (`elasticsearch`, `postgresql`, or `banyandb`)
+- `ui.image.tag`
+
+## E2E Tests
+
+Tests use 
[skywalking-infra-e2e](https://github.com/apache/skywalking-infra-e2e). Each 
`.yaml` file under `test/e2e/` defines setup steps, triggers, and verification 
queries. The CI workflow is in `.github/workflows/e2e.ci.yaml`.
+
+## Docs to Keep in Sync
+
+When modifying chart configuration, update all of:
+1. `chart/skywalking/values.yaml` — default values
+2. `chart/skywalking/README.md` — parameter tables
+3. `README.md` — install examples and user-facing docs
+4. `chart/skywalking/values-my-es.yaml` — external ES example (if ES-related)
+5. `test/e2e/values.yaml` — test overrides (if defaults change)
+
+## Git Workflow
+
+- **Do not push directly to master.** Always create a feature branch and open 
a PR.
+- Branch naming example: `upgrade-elasticsearch-eck-8.18.8`
+- **Do not add Claude as co-author** in commit messages.
+
+## License
+
+All files must include the Apache 2.0 license header.
diff --git a/README.md b/README.md
index 8240d1f..d1519dc 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,7 @@ helm install "${SKYWALKING_RELEASE_NAME}" \
   --set oap.image.tag=10.3.0 \
   --set oap.storageType=banyandb \
   --set ui.image.tag=10.3.0 \
+  --set eckOperator.enabled=false \
   --set elasticsearch.enabled=false \
   --set banyandb.enabled=true \
   --set banyandb.image.tag=0.9.0
@@ -138,19 +139,22 @@ helm install "${SKYWALKING_RELEASE_NAME}" 
${REPO}/skywalking -n "${SKYWALKING_RE
   --set ui.image.tag=10.3.0
 ```
 
-Because ElasticSearch recommends to use the corresponding Helm Chart version 
of the ElasticSearch version,
-if you want to use a specific version of ElasticSearch, you have to change the 
ElasticSearch Helm Chart version in
-`dependencies` section in `Chart.yaml` file, which requires you to install 
from the source codes.
-Or you should deploy the desired ElasticSearch version first by yourself, and 
then deploy SkyWalking to use the
-existing ElasticSearch by setting the following section:
+Elasticsearch is now deployed via [ECK (Elastic Cloud on 
Kubernetes)](https://github.com/elastic/cloud-on-k8s).
+By default, the chart deploys the ECK operator and an Elasticsearch 8.18.8 
cluster.
+If you already have the ECK operator installed, set 
`eckOperator.enabled=false`.
+
+To use an existing external Elasticsearch instead, disable the embedded 
deployment:
 
 ```yaml
+eckOperator:
+  enabled: false
+
 elasticsearch:
-  enabled: true
-  config:               # For users of an existing elasticsearch cluster,takes 
effect when `elasticsearch.enabled` is false
+  enabled: false
+  config:
+    host: elasticsearch-es-http
     port:
       http: 9200
-    host: elasticsearch # es service on kubernetes or host
     user: "xxx"         # [optional]
     password: "xxx"     # [optional]
 ```
@@ -183,7 +187,7 @@ helm install "${SKYWALKING_RELEASE_NAME}" 
${REPO}/skywalking -n "${SKYWALKING_RE
 
 ## Install a specific version of SkyWalking with an existing database
 
-If you want to use a specific version of ElasticSearch as storage solution, 
for instance, modify the connection information to the existing ElasticSearch 
cluster in file [`values-my-es.yaml`](chart/skywalking/values-my-es.yaml).
+If you want to use an existing Elasticsearch cluster as storage solution, 
modify the connection information in file 
[`values-my-es.yaml`](chart/skywalking/values-my-es.yaml).
 
 ```shell script
 helm install "${SKYWALKING_RELEASE_NAME}" ${REPO}/skywalking -n 
"${SKYWALKING_RELEASE_NAMESPACE}" \
diff --git a/chart/skywalking/Chart.yaml b/chart/skywalking/Chart.yaml
index 049cdc6..65660da 100644
--- a/chart/skywalking/Chart.yaml
+++ b/chart/skywalking/Chart.yaml
@@ -30,8 +30,13 @@ maintainers:
   email: [email protected]
 
 dependencies:
-- name: elasticsearch
-  version: ~7.17.1
+- name: eck-operator
+  version: 3.3.1
+  repository: https://helm.elastic.co/
+  condition: eckOperator.enabled
+- name: eck-elasticsearch
+  alias: elasticsearch
+  version: 0.18.1
   repository: https://helm.elastic.co/
   condition: elasticsearch.enabled
 - name: postgresql
diff --git a/chart/skywalking/README.md b/chart/skywalking/README.md
index dc48fa8..27b0053 100644
--- a/chart/skywalking/README.md
+++ b/chart/skywalking/README.md
@@ -97,68 +97,6 @@ The following table lists the configurable parameters of the 
Skywalking chart an
 | `oapInit.nodeSelector`                 | OAP init job labels for master pod 
assignment                                                                      
                                                                                
                                                                                
                                        | `{}`                                  
                                                                                
   |
 | `oapInit.tolerations`                  | OAP init job tolerations            
                                                                                
                                                                                
                                                                                
                                       | `[]`                                   
                                                                                
  |
 | `oapInit.extraPodLabels`               | OAP init job metadata labels        
                                                                                
                                                                                
                                                                                
                                       | `[]`                                   
                                                                                
  |
-| `elasticsearch.enabled`                | Spin up a new elasticsearch cluster 
for SkyWalking                                                                  
                                                                                
                                                                                
                                       | `true`                                 
                                                                                
  |
-| `elasticsearch.clusterName`            | This will be used as the 
Elasticsearch 
[cluster.name](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.name.html)
 and should be unique per cluster in the namespace                              
                                                                                
                   | `elasticsearch`                                            
                                                              |
-| `elasticsearch.nodeGroup`              | This is the name that will be used 
for each group of nodes in the cluster. The name will be 
`clusterName-nodeGroup-X`                                                       
                                                                                
                                                               | `master`       
                                                                                
                          |
-| `elasticsearch.masterService`          | Optional. The service name used to 
connect to the masters. You only need to set this if your master `nodeGroup` is 
set to something other than `master`. See [Clustering and Node 
Discovery](#clustering-and-node-discovery) for more information.                
                                                         | ``                   
                                                                                
                    |
-| `elasticsearch.roles`                  | A hash map with the [specific 
roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html)
 for the node group                                                             
                                                                                
                                    | `master: true`<br>`data: 
true`<br>`ingest: true`                                                         
                |
-| `elasticsearch.replicas`               | Kubernetes replica count for the 
statefulset (i.e. how many pods)                                                
                                                                                
                                                                                
                                          | `3`                                 
                                                                                
     |
-| `elasticsearch.minimumMasterNodes`     | The value for 
[discovery.zen.minimum_master_nodes](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/discovery-settings.html#minimum_master_nodes).
 Should be set to `(master_eligible_nodes / 2) + 1`. Ignored in Elasticsearch 
versions >= 7.                                                                  
| `2`                                                                           
                                           |
-| `elasticsearch.esMajorVersion`         | Used to set major version specific 
configuration. If you are using a custom image and not running the default 
Elasticsearch version you will need to set this to the version you are running 
(e.g. `esMajorVersion: 6`)                                                      
                                              | `""`                            
                                                                                
         |
-| `elasticsearch.esConfig`               | Allows you to add any config files 
in `/usr/share/elasticsearch/config/` such as `elasticsearch.yml` and 
`log4j2.properties`. See [values.yaml](./values.yaml) for an example of the 
formatting.                                                                     
                                                      | `{}`                    
                                                                                
                 |
-| `elasticsearch.extraEnvs`              | Extra [environment 
variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#using-environment-variables-inside-of-your-config)
 which will be appended to the `env:` definition for the container              
                                                           | `[]`               
                                                                                
                      |
-| `elasticsearch.extraVolumes`           | Templatable string of additional 
volumes to be passed to the `tpl` function                                      
                                                                                
                                                                                
                                          | `""`                                
                                                                                
     |
-| `elasticsearch.extraVolumeMounts`      | Templatable string of additional 
volumeMounts to be passed to the `tpl` function                                 
                                                                                
                                                                                
                                          | `""`                                
                                                                                
     |
-| `elasticsearch.extraInitContainers`    | Templatable string of additional 
init containers to be passed to the `tpl` function                              
                                                                                
                                                                                
                                          | `""`                                
                                                                                
     |
-| `elasticsearch.secretMounts`           | Allows you easily mount a secret as 
a file inside the statefulset. Useful for mounting certificates and other 
secrets. See [values.yaml](./values.yaml) for an example                        
                                                                                
                                             | `[]`                             
                                                                                
        |
-| `elasticsearch.image`                  | The Elasticsearch docker image      
                                                                                
                                                                                
                                                                                
                                       | 
`docker.elastic.co/elasticsearch/elasticsearch`                                 
                                         |
-| `elasticsearch.imageTag`               | The Elasticsearch docker image tag  
                                                                                
                                                                                
                                                                                
                                       | `7.5.1`                                
                                                                                
  |
-| `elasticsearch.imagePullPolicy`        | The Kubernetes 
[imagePullPolicy](https://kubernetes.io/docs/concepts/containers/images/#updating-images)
 value                                                                          
                                                                                
                                                   | `IfNotPresent`             
                                                                                
              |
-| `elasticsearch.podAnnotations`         | Configurable 
[annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)
 applied to all Elasticsearch pods                                              
                                                                                
                                                 | `{}`                         
                                                                                
            |
-| `elasticsearch.labels`                 | Configurable 
[label](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)
 applied to all Elasticsearch pods                                              
                                                                                
                                                            | `{}`              
                                                                                
                       |
-| `elasticsearch.esJavaOpts`             | [Java 
options](https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html)
 for Elasticsearch. This is where you should configure the [jvm heap 
size](https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html)
                                                                 | `-Xmx1g 
-Xms1g`                                                                         
                                 |
-| `elasticsearch.resources`              | Allows you to set the 
[resources](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
 for the statefulset                                                            
                                                                                
                                   | `requests.cpu: 100m`<br>`requests.memory: 
2Gi`<br>`limits.cpu: 1000m`<br>`limits.memory: 2Gi`                            |
-| `elasticsearch.initResources`          | Allows you to set the 
[resources](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
 for the initContainer in the statefulset                                       
                                                                                
                                   | {}                                         
                                                                              |
-| `elasticsearch.sidecarResources`       | Allows you to set the 
[resources](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
 for the sidecar containers in the statefulset                                  
                                                                                
                                   | {}                                         
                                                                              |
-| `elasticsearch.networkHost`            | Value for the [network.host 
Elasticsearch 
setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/network.host.html)
                                                                                
                                                                                
                      | `0.0.0.0`                                               
                                                                 |
-| `elasticsearch.volumeClaimTemplate`    | Configuration for the 
[volumeClaimTemplate for 
statefulsets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-storage).
 You will want to adjust the storage (default `30Gi`) and the 
`storageClassName` if you are using a different storage class                   
                         | `accessModes: [ "ReadWriteOnce" 
]`<br>`resources.requests.storage: 30Gi`                                        
         |
-| `elasticsearch.persistence.annotations` | Additional persistence annotations 
for the `volumeClaimTemplate`                                                   
                                                                                
                                                                                
                                        | `{}`                                  
                                                                                
   |
-| `elasticsearch.persistence.enabled`    | Enables a persistent volume for 
Elasticsearch data. Can be disabled for nodes that only have 
[roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html)
 which don't require persistent data.                                           
                                                    | `true`                    
                                                                                
               |
-| `elasticsearch.priorityClassName`      | The [name of the 
PriorityClass](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass).
 No default is supplied as the PriorityClass must be created first.             
                                                                                
                                 | `""`                                         
                                                                            |
-| `elasticsearch.antiAffinityTopologyKey` | The [anti-affinity topology 
key](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).
 By default this will prevent multiple Elasticsearch nodes from running on the 
same Kubernetes node                                                            
                            | `kubernetes.io/hostname`                          
                                                                       |
-| `elasticsearch.antiAffinity`           | Setting this to hard enforces the 
[anti-affinity 
rules](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).
 If it is set to soft it will be done "best effort". Other values will be 
ignored.                                                                        
          | `hard`                                                              
                                                     |
-| `elasticsearch.nodeAffinity`           | Value for the [node affinity 
settings](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature)
                                                                                
                                                                                
                      | `{}`                                                    
                                                                 |
-| `elasticsearch.podManagementPolicy`    | By default Kubernetes [deploys 
statefulsets 
serially](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies).
 This deploys them in parallel so that they can discover eachother              
                                                                                
     | `Parallel`                                                               
                                                |
-| `elasticsearch.protocol`               | The protocol that will be used for 
the readinessProbe. Change this to `https` if you have 
`xpack.security.http.ssl.enabled` set                                           
                                                                                
                                                                 | `http`       
                                                                                
                            |
-| `elasticsearch.httpPort`               | The http port that Kubernetes will 
use for the healthchecks and the service. If you change this you will also need 
to set 
[http.port](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#_settings)
 in `extraEnvs`                                                                 
         | `9200`                                                               
                                                    |
-| `elasticsearch.transportPort`          | The transport port that Kubernetes 
will use for the service. If you change this you will also need to set 
[transport port 
configuration](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html#_transport_settings)
 in `extraEnvs`                                                        | `9300` 
                                                                                
                                  |
-| `elasticsearch.service.labels`         | Labels to be added to non-headless 
service                                                                         
                                                                                
                                                                                
                                        | `{}`                                  
                                                                                
   |
-| `elasticsearch.service.labelsHeadless` | Labels to be added to headless 
service                                                                         
                                                                                
                                                                                
                                            | `{}`                              
                                                                                
       |
-| `elasticsearch.service.type`           | Type of elasticsearch service. 
[Service 
Types](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
                                                                                
                                                                                
         | `ClusterIP`                                                          
                                                    |
-| `elasticsearch.service.nodePort`       | Custom 
[nodePort](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)
 port that can be set if you are using `service.type: nodePort`.                
                                                                                
                                                               | ``             
                                                                                
                          |
-| `elasticsearch.service.annotations`    | Annotations that Kubernetes will 
use for the service. This will configure load balancer if `service.type` is 
`LoadBalancer` 
[Annotations](https://kubernetes.io/docs/concepts/services-networking/service/#ssl-support-on-aws)
                                                                                
             | `{}`                                                             
                                                        |
-| `elasticsearch.service.httpPortName`   | The name of the http port within 
the service                                                                     
                                                                                
                                                                                
                                          | `http`                              
                                                                                
     |
-| `elasticsearch.service.transportPortName` | The name of the transport port 
within the service                                                              
                                                                                
                                                                                
                                            | `transport`                       
                                                                                
       |
-| `elasticsearch.updateStrategy`         | The 
[updateStrategy](https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets)
 for the statefulset. By default Kubernetes will wait for the cluster to be 
green after upgrading each pod. Setting this to `OnDelete` will allow you to 
manually delete each pod during upgrades | `RollingUpdate`                      
                                                                                
    |
-| `elasticsearch.maxUnavailable`         | The 
[maxUnavailable](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget)
 value for the pod disruption budget. By default this will prevent Kubernetes 
from having more than 1 unhealthy pod in the node group                         
                                       | `1`                                    
                                                                                
  |
-| `elasticsearch.fsGroup (DEPRECATED)`   | The Group ID (GID) for 
[securityContext.fsGroup](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
 so that the Elasticsearch user can read from the persistent volume             
                                                                                
                               | ``                                             
                                                                          |
-| `elasticsearch.podSecurityContext`     | Allows you to set the 
[securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod)
 for the pod                                                                    
                                                                                
     | `fsGroup: 1000`<br>`runAsUser: 1000`                                     
                                                |
-| `elasticsearch.securityContext`        | Allows you to set the 
[securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container)
 for the container                                                              
                                                                               
| `capabilities.drop:[ALL]`<br>`runAsNonRoot: true`<br>`runAsUser: 1000`        
                                           |
-| `elasticsearch.terminationGracePeriod` | The 
[terminationGracePeriod](https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods)
 in seconds used when trying to stop the pod                                    
                                                                                
                                                  | `120`                       
                                                                                
             |
-| `elasticsearch.sysctlInitContainer.enabled` | Allows you to disable the 
sysctlInitContainer if you are setting vm.max_map_count with another method     
                                                                                
                                                                                
                                                 | `true`                       
                                                                                
            |
-| `elasticsearch.sysctlVmMaxMapCount`    | Sets the [sysctl 
vm.max_map_count](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html#vm-max-map-count)
 needed for Elasticsearch                                                       
                                                                                
                 | `262144`                                                     
                                                            |
-| `elasticsearch.readinessProbe`         | Configuration fields for the 
[readinessProbe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/)
                                                                                
                                                                                
               | `failureThreshold: 3`<br>`initialDelaySeconds: 
10`<br>`periodSeconds: 10`<br>`successThreshold: 3`<br>`timeoutSeconds: 5` |
-| `elasticsearch.clusterHealthCheckParams` | The [Elasticsearch cluster health 
status 
params](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html#request-params)
 that will be used by readinessProbe command                                    
                                                                                
       | `wait_for_status=green&timeout=1s`                                     
                                                  |
-| `elasticsearch.imagePullSecrets`       | Configuration for 
[imagePullSecrets](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-pod-that-uses-your-secret)
 so that you can use a private registry for your image                          
                                                                             | 
`[]`                                                                            
                                         |
-| `elasticsearch.nodeSelector`           | Configurable 
[nodeSelector](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector)
 so that you can target specific nodes for your Elasticsearch cluster           
                                                                                
                                               | `{}`                           
                                                                                
          |
-| `elasticsearch.tolerations`            | Configurable 
[tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
                                                                                
                                                                                
                                                        | `[]`                  
                                                                                
                   |
-| `elasticsearch.ingress`                | Configurable 
[ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) to 
expose the Elasticsearch service. See [`values.yaml`](./values.yaml) for an 
example                                                                         
                                                                   | `enabled: 
false`                                                                          
                               |
-| `elasticsearch.schedulerName`          | Name of the [alternate 
scheduler](https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/#specify-schedulers-for-pods)
                                                                                
                                                                                
          | `nil`                                                               
                                                     |
-| `elasticsearch.masterTerminationFix`   | A workaround needed for 
Elasticsearch < 7.2 to prevent master status being lost during restarts 
[#63](https://github.com/elastic/helm-charts/issues/63)                         
                                                                                
                                                           | `false`            
                                                                                
                      |
-| `elasticsearch.lifecycle`              | Allows you to add lifecycle 
configuration. See [values.yaml](./values.yaml) for an example of the 
formatting.                                                                     
                                                                                
                                                         | `{}`                 
                                                                                
                    |
-| `elasticsearch.keystore`               | Allows you map Kubernetes secrets 
into the keystore. See the [config 
example](/elasticsearch/examples/config/values.yaml) and [how to use the 
keystore](#how-to-use-the-keystore)                                             
                                                                                
             | `[]`                                                             
                                                        |
-| `elasticsearch.rbac`                   | Configuration for creating a role, 
role binding and service account as part of this helm chart with `create: 
true`. Also can be used to reference an external service account with 
`serviceAccountName: "externalServiceAccountName"`.                             
                                                        | `create: 
false`<br>`serviceAccountName: ""`                                              
                                |
-| `elasticsearch.podSecurityPolicy`      | Configuration for create a pod 
security policy with minimal permissions to run this Helm chart with `create: 
true`. Also can be used to reference an external pod security policy with 
`name: "externalPodSecurityPolicy"`                                             
                                                    | `create: false`<br>`name: 
""`                                                                             
               |
 | `satellite.name`                       | Satellite deployment name           
                                                                                
                                                                                
                                                                                
                                       | `satellite`                            
                                                                                
  |
 | `satellite.replicas`                   | Satellite k8s deployment replicas   
                                                                                
                                                                                
                                                                                
                                       | `1`                                    
                                                                                
  |
 | `satellite.enabled`                    | Is enable Satellite                 
                                                                                
                                                                                
                                                                                
                                       | `false`                                
                                                                                
  |
@@ -177,6 +115,66 @@ The following table lists the configurable parameters of 
the Skywalking chart an
 | `satellite.env`                        | Satellite environment variables     
                                                                                
                                                                                
                                                                                
                                       | `[]`                                   
                                                                                
  |
 | `satellite.securityContext`            | Allows you to set the 
[securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod)
 for the pod                                                                    
                                                                                
     | `fsGroup: 1000`<br>`runAsUser: 1000`                                     
                                                |
 
+### Elasticsearch (ECK)
+
+Elasticsearch is deployed via [ECK (Elastic Cloud on 
Kubernetes)](https://github.com/elastic/cloud-on-k8s).
+The chart includes the ECK operator and an `eck-elasticsearch` subchart. Set 
`eckOperator.enabled=false` if the ECK operator is already installed in your 
cluster.
+
+#### Top-level parameters
+
+| Parameter | Description | Default |
+|---|---|---|
+| `eckOperator.enabled` | Deploy the ECK operator | `true` |
+| `elasticsearch.enabled` | Deploy an ECK-managed Elasticsearch cluster | 
`true` |
+| `elasticsearch.version` | Elasticsearch version to deploy | `8.18.8` |
+| `elasticsearch.fullnameOverride` | Override the Elasticsearch resource name. 
The ECK service will be `{name}-es-http` | `""` |
+| `elasticsearch.labels` | Labels applied to the Elasticsearch resource | `{}` 
|
+| `elasticsearch.annotations` | Annotations applied to the Elasticsearch 
resource | `{}` |
+| `elasticsearch.http` | HTTP layer settings. TLS is disabled by default for 
OAP connectivity | `tls.selfSignedCertificate.disabled: true` |
+| `elasticsearch.secureSettings` | [Secure 
settings](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-es-secure-settings.html)
 to inject from Kubernetes secrets | `[]` |
+| `elasticsearch.updateStrategy` | [Update 
strategy](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-update-strategy.html)
 controlling simultaneous changes | `{}` |
+| `elasticsearch.volumeClaimDeletePolicy` | Policy for PVC deletion on 
scale-down or cluster deletion | `""` |
+| `elasticsearch.ingress.enabled` | Enable ingress to expose Elasticsearch 
externally | `false` |
+
+#### External Elasticsearch (when `elasticsearch.enabled` is `false`)
+
+| Parameter | Description | Default |
+|---|---|---|
+| `elasticsearch.config.host` | Elasticsearch host | `elasticsearch` |
+| `elasticsearch.config.port.http` | Elasticsearch HTTP port | `9200` |
+| `elasticsearch.config.user` | Elasticsearch user (optional) | `""` |
+| `elasticsearch.config.password` | Elasticsearch password (optional) | `""` |
+
+#### Node sets (`elasticsearch.nodeSets[]`)
+
+ECK [node 
sets](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-node-configuration.html)
 define the topology of the Elasticsearch cluster. Each entry in the list 
creates a group of Elasticsearch nodes.
+
+| Parameter | Description | Default |
+|---|---|---|
+| `nodeSets[].name` | Name of the node set | `default` |
+| `nodeSets[].count` | Number of Elasticsearch nodes in this set | `3` |
+| `nodeSets[].config` | Elasticsearch configuration (e.g. 
`node.store.allow_mmap`, `node.roles`) | `node.store.allow_mmap: false` |
+| `nodeSets[].volumeClaimTemplates` | Persistent storage for Elasticsearch 
data | `[]` (ECK default: EmptyDir) |
+
+#### Pod template (`elasticsearch.nodeSets[].podTemplate`)
+
+The pod template follows standard Kubernetes Pod spec nested under 
`podTemplate.spec`. This controls scheduling, resources, init containers, etc.
+
+| Parameter | Description | Default |
+|---|---|---|
+| `podTemplate.metadata.annotations` | Pod annotations (e.g. 
`iam.amazonaws.com/role`) | `{}` |
+| `podTemplate.metadata.labels` | Extra pod labels | `{}` |
+| `podTemplate.spec.affinity` | Pod 
[affinity](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-advanced-node-scheduling.html)
 rules | not set |
+| `podTemplate.spec.nodeSelector` | Node selector for pod assignment | not set 
|
+| `podTemplate.spec.tolerations` | Pod tolerations | not set |
+| `podTemplate.spec.imagePullSecrets` | Image pull secrets | not set |
+| `podTemplate.spec.priorityClassName` | Priority class name | not set |
+| `podTemplate.spec.terminationGracePeriodSeconds` | Grace period for pod 
termination | not set |
+| `podTemplate.spec.initContainers` | Init containers (e.g. sysctl 
`vm.max_map_count`) | not set |
+| `podTemplate.spec.containers[].resources` | Container resource requests & 
limits | `requests: 100m cpu, 2Gi mem` <br> `limits: 2Gi mem` |
+| `podTemplate.spec.containers[].env` | Environment variables (e.g. 
`ES_JAVA_OPTS`) | not set |
+| `podTemplate.spec.containers[].securityContext` | Container-level security 
context | not set (ECK managed) |
+
 Specify each parameter using the `--set key=value[,key=value]` argument to 
`helm install`. For example,
 
 ```console
diff --git a/chart/skywalking/templates/NOTES.txt 
b/chart/skywalking/templates/NOTES.txt
index 0f0370d..1da5c4d 100644
--- a/chart/skywalking/templates/NOTES.txt
+++ b/chart/skywalking/templates/NOTES.txt
@@ -46,12 +46,3 @@ Get the UI URL by running these commands:
   kubectl port-forward svc/{{ include "skywalking.ui.fullname" . }} 8080:{{ 
.Values.ui.service.externalPort }} --namespace {{ .Release.Namespace }}
 {{- end }}
 
-{{- if .Values.elasticsearch.enabled }}
-{{- if .Values.elasticsearch.persistence.enabled }}
-{{- else }}
-#################################################################################
-######   WARNING: Persistence is disabled!!! You will lose your data when   
#####
-######            the SkyWalking's storage ES pod is terminated.            
#####
-#################################################################################
-{{- end }}
-{{- end }}
diff --git a/chart/skywalking/templates/_helpers.tpl 
b/chart/skywalking/templates/_helpers.tpl
index d23a7cf..1e71ccb 100644
--- a/chart/skywalking/templates/_helpers.tpl
+++ b/chart/skywalking/templates/_helpers.tpl
@@ -89,13 +89,25 @@ Create the name of the service account to use for the 
satellite cluster
 {{ default (include "skywalking.satellite.fullname" .) 
.Values.serviceAccounts.satellite }}
 {{- end -}}
 
+{{/*
+Expand the fullname of the ECK-managed Elasticsearch resource.
+The ECK operator creates a service named {fullname}-es-http.
+*/}}
+{{- define "skywalking.elasticsearch.fullname" -}}
+{{- if .Values.elasticsearch.fullnameOverride -}}
+{{- .Values.elasticsearch.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-elasticsearch" .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+
 {{- define "skywalking.containers.wait-for-storage" -}}
 {{- if eq .Values.oap.storageType "elasticsearch" }}
 - name: wait-for-elasticsearch
   image: {{ .Values.initContainer.image }}:{{ .Values.initContainer.tag }}
   imagePullPolicy: IfNotPresent
     {{- if .Values.elasticsearch.enabled }}
-  command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 {{ 
.Values.elasticsearch.clusterName }}-{{ .Values.elasticsearch.nodeGroup }} {{ 
.Values.elasticsearch.httpPort }} && exit 0 || sleep 5; done; exit 1']
+  command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 {{ include 
"skywalking.elasticsearch.fullname" . }}-es-http 9200 && exit 0 || sleep 5; 
done; exit 1']
     {{- else }}
   command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 {{ 
.Values.elasticsearch.config.host }} {{ .Values.elasticsearch.config.port.http 
}} && exit 0 || sleep 5; done; exit 1']
     {{- end }}
@@ -134,11 +146,19 @@ Create the name of the service account to use for the 
satellite cluster
 {{- if eq .Values.oap.storageType "elasticsearch" }}
 - name: SW_STORAGE_ES_CLUSTER_NODES
   {{- if .Values.elasticsearch.enabled }}
-  value: "{{ .Values.elasticsearch.clusterName }}-{{ 
.Values.elasticsearch.nodeGroup }}:{{ .Values.elasticsearch.httpPort }}"
+  value: "{{ include "skywalking.elasticsearch.fullname" . }}-es-http:9200"
   {{- else }}
   value: "{{ .Values.elasticsearch.config.host }}:{{ 
.Values.elasticsearch.config.port.http }}"
   {{- end }}
-  {{- if not .Values.elasticsearch.enabled }}
+  {{- if .Values.elasticsearch.enabled }}
+- name: SW_ES_USER
+  value: "elastic"
+- name: SW_ES_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ include "skywalking.elasticsearch.fullname" . }}-es-elastic-user
+      key: elastic
+  {{- else }}
     {{- if .Values.elasticsearch.config.user }}
 - name: SW_ES_USER
   value: "{{ .Values.elasticsearch.config.user }}"
diff --git a/chart/skywalking/values-my-es.yaml 
b/chart/skywalking/values-my-es.yaml
index c2a785f..3bd18a6 100644
--- a/chart/skywalking/values-my-es.yaml
+++ b/chart/skywalking/values-my-es.yaml
@@ -26,9 +26,12 @@ ui:
   image:
     tag: 10.0.0
 
+eckOperator:
+  enabled: false
+
 elasticsearch:
   enabled: false
-  config:               # For users of an existing elasticsearch cluster,takes 
effect when `elasticsearch.enabled` is false
+  config:               # For users of an existing elasticsearch cluster, 
takes effect when `elasticsearch.enabled` is false
     host: elasticsearch-es-http
     port:
       http: 9200
diff --git a/chart/skywalking/values.yaml b/chart/skywalking/values.yaml
index e9f14ce..497b34f 100644
--- a/chart/skywalking/values.yaml
+++ b/chart/skywalking/values.yaml
@@ -194,251 +194,156 @@ oapInit:
   extraPodLabels: {}
   # sidecar.istio.io/inject: false
 
+# ECK Operator settings
+# Set eckOperator.enabled to false if the ECK operator is already installed in 
your cluster
+eckOperator:
+  enabled: true
+
+# Elasticsearch managed by ECK (eck-elasticsearch chart)
+# ref: https://github.com/elastic/cloud-on-k8s
 elasticsearch:
   enabled: true
+  version: 8.18.8
+  fullnameOverride: ""
+
+  # For users of an existing elasticsearch cluster, takes effect when 
`elasticsearch.enabled` is false
   config:
-    # For users of an existing elasticsearch cluster,takes effect when 
`elasticsearch.enabled` is false
+    host: elasticsearch # es service on kubernetes or host
     port:
       http: 9200
-    host: elasticsearch # es service on kubernetes or host
-    user: "xxx" # [optional]
-    password: "xxx" # [optional]
-  clusterName: "elasticsearch"
-  nodeGroup: "master"
-
-  # The service that non master groups will try to connect to when joining the 
cluster
-  # This should be set to clusterName + "-" + nodeGroup for your master group
-  masterService: ""
-
-  # Elasticsearch roles that will be applied to this nodeGroup
-  # These will be set as environment variables. E.g. node.master=true
-  roles:
-    master: "true"
-    ingest: "true"
-    data: "true"
-
-  replicas: 3
-  minimumMasterNodes: 2
-
-  esMajorVersion: ""
-
-  # Allows you to add any config files in /usr/share/elasticsearch/config/
-  # such as elasticsearch.yml and log4j2.properties
-  esConfig: {}
-  #  elasticsearch.yml: |
-  #    key:
-  #      nestedkey: value
-  #  log4j2.properties: |
-  #    key = value
-
-  # Extra environment variables to append to this nodeGroup
-  # This will be appended to the current 'env:' key. You can use any of the 
kubernetes env
-  # syntax here
-  extraEnvs: []
-  #  - name: MY_ENVIRONMENT_VAR
-  #    value: the_value_goes_here
-
-  # A list of secrets and their paths to mount inside the pod
-  # This is useful for mounting certificates for security and for mounting
-  # the X-Pack license
-  secretMounts: []
-  #  - name: elastic-certificates
-  #    secretName: elastic-certificates
-  #    path: /usr/share/elasticsearch/config/certs
-
-  podAnnotations: {}
-  # iam.amazonaws.com/role: es-cluster
+    user: "" # [optional]
+    password: "" # [optional]
 
-  # additionals labels
+  # Labels that will be applied to the Elasticsearch resource
   labels: {}
 
-  esJavaOpts: "-Xmx1g -Xms1g"
-
-  resources:
-    requests:
-      cpu: "100m"
-      memory: "2Gi"
-    limits:
-      cpu: "1000m"
-      memory: "2Gi"
-
-  initResources: {}
-  # limits:
-  #   cpu: "25m"
-  #   # memory: "128Mi"
-  # requests:
-  #   cpu: "25m"
-  #   memory: "128Mi"
-
-  sidecarResources: {}
-  # limits:
-  #   cpu: "25m"
-  #   # memory: "128Mi"
-  # requests:
-  #   cpu: "25m"
-  #   memory: "128Mi"
-
-  networkHost: "0.0.0.0"
-
-  volumeClaimTemplate:
-    accessModes: [ "ReadWriteOnce" ]
-    resources:
-      requests:
-        storage: 30Gi
-
-  rbac:
-    create: false
-    serviceAccountName: ""
-
-  podSecurityPolicy:
-    create: false
-    name: ""
-    spec:
-      privileged: true
-      fsGroup:
-        rule: RunAsAny
-      runAsUser:
-        rule: RunAsAny
-      seLinux:
-        rule: RunAsAny
-      supplementalGroups:
-        rule: RunAsAny
-      volumes:
-      - secret
-      - configMap
-      - persistentVolumeClaim
-
-  persistence:
-    enabled: false
-    annotations: {}
-
-  extraVolumes: ""
-  # - name: extras
-  #   emptyDir: {}
-
-  extraVolumeMounts: ""
-  # - name: extras
-  #   mountPath: /usr/share/extras
-  #   readOnly: true
-
-  extraInitContainers: ""
-  # - name: do-something
-  #   image: busybox
-  #   command: ['do', 'something']
-
-  # This is the PriorityClass settings as defined in
-  # 
https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
-  priorityClassName: ""
-
-  # By default this will make sure two pods don't end up on the same node
-  # Changing this to a region would allow you to spread pods across regions
-  antiAffinityTopologyKey: "kubernetes.io/hostname"
-
-  # Hard means that by default pods will only be scheduled if there are enough 
nodes for them
-  # and that they will never end up on the same node. Setting this to soft 
will do this "best effort"
-  antiAffinity: "hard"
-
-  # This is the node affinity settings as defined in
-  # 
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature
-  nodeAffinity: {}
-
-  # The default is to deploy all pods serially. By setting this to parallel 
all pods are started at
-  # the same time when bootstrapping the cluster
-  podManagementPolicy: "Parallel"
-
-  protocol: http
-  httpPort: 9200
-  transportPort: 9300
-
-  service:
-    labels: {}
-    labelsHeadless: {}
-    type: ClusterIP
-    nodePort: ""
-    annotations: {}
-    httpPortName: http
-    transportPortName: transport
-
-  updateStrategy: RollingUpdate
-
-  # This is the max unavailable setting for the pod disruption budget
-  # The default value of 1 will make sure that kubernetes won't allow more 
than 1
-  # of your pods to be unavailable during maintenance
-  maxUnavailable: 1
-
-  podSecurityContext:
-    fsGroup: 1000
-    runAsUser: 1000
-
-  # The following value is deprecated,
-  # please use the above podSecurityContext.fsGroup instead
-  fsGroup: ""
-
-  securityContext:
-    capabilities:
-      drop:
-      - ALL
-    # readOnlyRootFilesystem: true
-    runAsNonRoot: true
-    runAsUser: 1000
-
-  # How long to wait for elasticsearch to stop gracefully
-  terminationGracePeriod: 120
-
-  sysctlVmMaxMapCount: 262144
-
-  readinessProbe:
-    failureThreshold: 3
-    initialDelaySeconds: 10
-    periodSeconds: 10
-    successThreshold: 3
-    timeoutSeconds: 5
-
-  # 
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html#request-params
 wait_for_status
-  clusterHealthCheckParams: "wait_for_status=green&timeout=1s"
-
-  ## Use an alternate scheduler.
-  ## ref: 
https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-  ##
-  schedulerName: ""
-
-  imagePullSecrets: []
-  nodeSelector: {}
-  tolerations: []
-
-  # Enabling this will publically expose your Elasticsearch instance.
-  # Only enable this if you have security enabled on your cluster
+  # Annotations that will be applied to the Elasticsearch resource
+  annotations: {}
+
+  # Settings to control how Elasticsearch will be accessed
+  # ref: 
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-accessing-elastic-services.html
+  http:
+    # Disable TLS on HTTP layer so OAP can connect without certificate trust 
configuration.
+    # To re-enable TLS, remove the tls section or set disabled to false,
+    # and configure OAP to trust the self-signed certificate.
+    tls:
+      selfSignedCertificate:
+        disabled: true
+    # service:
+    #   spec:
+    #     type: LoadBalancer
+
+  # Control Elasticsearch Secure Settings
+  # ref: 
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-es-secure-settings.html
+  secureSettings: []
+  #  - secretName: one-secure-settings-secret
+
+  # Settings for limiting the number of simultaneous changes to an 
Elasticsearch resource
+  # ref: 
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-update-strategy.html
+  updateStrategy: {}
+  #  changeBudget:
+  #    maxSurge: 3
+  #    maxUnavailable: 1
+
+  # VolumeClaimDeletePolicy sets the policy for handling deletion of 
PersistentVolumeClaims for all NodeSets.
+  # Possible values are DeleteOnScaledownOnly and 
DeleteOnScaledownAndClusterDeletion.
+  volumeClaimDeletePolicy: ""
+
+  # Node configuration settings
+  # ref: 
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-node-configuration.html
+  nodeSets:
+  - name: default
+    count: 3
+    config:
+      # For production workloads, it is strongly recommended to increase the 
kernel setting
+      # vm.max_map_count to 262144 via an initContainer and leave 
node.store.allow_mmap unset.
+      # ref: 
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-virtual-memory.html
+      node.store.allow_mmap: false
+    # Persistent storage for Elasticsearch data
+    # volumeClaimTemplates:
+    # - metadata:
+    #     name: elasticsearch-data
+    #   spec:
+    #     accessModes:
+    #     - ReadWriteOnce
+    #     resources:
+    #       requests:
+    #         storage: 30Gi
+    #     # storageClassName: standard
+    podTemplate:
+      metadata: {}
+        # annotations:
+        #   iam.amazonaws.com/role: es-cluster
+        # labels:
+        #   my-label: my-value
+      spec:
+        # Pod scheduling constraints
+        # ref: 
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-advanced-node-scheduling.html
+
+        # affinity:
+        #   nodeAffinity:
+        #     requiredDuringSchedulingIgnoredDuringExecution:
+        #       nodeSelectorTerms:
+        #       - matchExpressions:
+        #         - key: topology.kubernetes.io/zone
+        #           operator: In
+        #           values:
+        #           - us-east-1a
+
+        # nodeSelector: {}
+
+        # tolerations: []
+
+        # imagePullSecrets: []
+
+        # priorityClassName: ""
+
+        # terminationGracePeriodSeconds: 120
+
+        # Init containers (e.g. to set vm.max_map_count or install plugins)
+        # initContainers:
+        # - command:
+        #   - sh
+        #   - "-c"
+        #   - sysctl -w vm.max_map_count=262144
+        #   name: sysctl
+        #   securityContext:
+        #     privileged: true
+        #     runAsUser: 0
+
+        containers:
+        - name: elasticsearch
+          resources:
+            requests:
+              cpu: 100m
+              memory: 2Gi
+            limits:
+              memory: 2Gi
+          # Environment variables (replaces the old extraEnvs and esJavaOpts)
+          # env:
+          # - name: ES_JAVA_OPTS
+          #   value: "-Xms1g -Xmx1g"
+
+          # Container-level security context (typically set by ECK 
automatically)
+          # securityContext:
+          #   capabilities:
+          #     drop:
+          #     - ALL
+          #   runAsNonRoot: true
+          #   runAsUser: 1000
+
+  # Ingress configuration for exposing Elasticsearch externally
   ingress:
     enabled: false
     annotations: {}
     # kubernetes.io/ingress.class: nginx
     # kubernetes.io/tls-acme: "true"
-    path: /
     hosts:
-    - chart-example.local
-    tls: []
-    #  - secretName: chart-example-tls
-    #    hosts:
-    #      - chart-example.local
-
-  nameOverride: ""
-  fullnameOverride: ""
-
-  # https://github.com/elastic/helm-charts/issues/63
-  masterTerminationFix: false
-
-  lifecycle: {}
-  # preStop:
-  #   exec:
-  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > 
/usr/share/message"]
-  # postStart:
-  #   exec:
-  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > 
/usr/share/message"]
-
-  sysctlInitContainer:
-    enabled: true
-
-  keystore: []
+    - host: chart-example.local
+      path: /
+    tls:
+      enabled: false
+      # secretName: chart-example-tls
 
 postgresql:
   enabled: false # Whether to start a demo postgresql deployment, don't use 
this for production.
diff --git a/test/e2e/e2e-elasticsearch.yaml b/test/e2e/e2e-elasticsearch.yaml
index 9e735fb..26e8cfe 100644
--- a/test/e2e/e2e-elasticsearch.yaml
+++ b/test/e2e/e2e-elasticsearch.yaml
@@ -40,13 +40,17 @@ setup:
         kubectl label namespace default istio-injection=enabled
     - name: Install helm
       command: bash test/e2e/setup-e2e-shell/install.sh helm
-    - name: Install SkyWalking
+    - name: Install ECK operator
       command: |
         helm dep up chart/skywalking
+        helm -n istio-system install eck-operator 
chart/skywalking/charts/eck-operator-3.3.1.tgz \
+                       --create-namespace
+        kubectl -n istio-system rollout status --watch --timeout=120s 
statefulset/elastic-operator
+    - name: Install SkyWalking
+      command: |
         helm -n istio-system install skywalking chart/skywalking \
                        --set fullnameOverride=skywalking \
-                       --set elasticsearch.replicas=1 \
-                       --set elasticsearch.minimumMasterNodes=1 \
+                       --set eckOperator.enabled=false \
                        --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}' \
diff --git a/test/e2e/env b/test/e2e/env
index 373a447..2d3ff73 100644
--- a/test/e2e/env
+++ b/test/e2e/env
@@ -13,13 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_AGENT_JAVA_COMMIT=f0245864e4388a388fe7445b56b6ce7cedc94aaf
-SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
-SW_AGENT_NODEJS_COMMIT=4f9a91dad3dfd8cfe5ba8f7bd06b39e11eb5e65e
-SW_AGENT_GO_COMMIT=154de50628e82e590941585411299459e352317d
-SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
-SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
-SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
-SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
-
-SW_CTL_COMMIT=7bbac156e74e8fdc0c5bd6f377be9f0b30420176
+OAP_TAG=a0cec0ca237792497d2da0b65757d11f58c3f342
+OAP_REPO=ghcr.io/apache/skywalking/oap
+UI_TAG=a0cec0ca237792497d2da0b65757d11f58c3f342
+UI_REPO=ghcr.io/apache/skywalking/ui
+SATELLITE_TAG=v35bfaff6352b4dc351a706772796a1f79b651c14
+SATELLITE_REPO=ghcr.io/apache/skywalking-satellite/skywalking-satellite
+BANYANDB_TAG=4b9ac7545a7084514bdaea7f0b8b5b7b13b745a5
+BANYANDB_REPO=ghcr.io/apache/skywalking-banyandb
+SW_CTL_COMMIT=9a1beab08413ce415a00a8547a238a14691c5655
diff --git a/test/e2e/expected/metrics-has-value.yml 
b/test/e2e/expected/metrics-has-value.yml
index 37b19de..cae6688 100644
--- a/test/e2e/expected/metrics-has-value.yml
+++ b/test/e2e/expected/metrics-has-value.yml
@@ -22,7 +22,7 @@ results:
     values:
       {{- contains .values }}
       - id: {{ notEmpty .id }}
-        value: {{ .value }}
+        value: {{ notEmpty .value }}
         owner: null
         traceid: null
       - id: {{ notEmpty .id }}
diff --git a/test/e2e/env.swck b/test/e2e/swck/deploy-elasticsearch.yaml
similarity index 54%
rename from test/e2e/env.swck
rename to test/e2e/swck/deploy-elasticsearch.yaml
index fd128cc..bc3180c 100644
--- a/test/e2e/env.swck
+++ b/test/e2e/swck/deploy-elasticsearch.yaml
@@ -13,14 +13,41 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_AGENT_JAVA_COMMIT=fbdfc42b4d825ba33205d646ddaaaad20c005cb8
-SW_AGENT_SATELLITE_COMMIT=1f3c08a5af19f8522f2a40d9339c45fa816bfe07
-SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
-SW_AGENT_NODEJS_COMMIT=e755659c7f308d3b5589619778c8360308cb14f8
-SW_AGENT_GO_COMMIT=4af380c2db6243106b0fc650b6003ce3b3eb82a0
-SW_AGENT_PYTHON_COMMIT=50388c55428d742d73d9733278f04173585de80d
-SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
-SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
-SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
-
-SW_CTL_COMMIT=9d2d0edccda2afe5cf24f1e632142f40e80e8fa4
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: es
+spec:
+  serviceName: es
+  replicas: 1
+  selector:
+    matchLabels:
+      app: es
+  template:
+    metadata:
+      labels:
+        app: es
+    spec:
+      containers:
+      - name: es
+        image: docker.elastic.co/elasticsearch/elasticsearch:8.18.8
+        env:
+        - name: discovery.type
+          value: single-node
+        - name: xpack.security.enabled
+          value: "false"
+        ports:
+        - containerPort: 9200
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: es-out
+spec:
+  type: ClusterIP
+  selector:
+    app: es
+  ports:
+  - port: 9200
+    targetPort: 9200
+    protocol: TCP
diff --git a/test/e2e/swck/oap-agent-adapter-hpa.yaml 
b/test/e2e/swck/oap-agent-adapter-hpa.yaml
index b3c30cf..3bea0e0 100644
--- a/test/e2e/swck/oap-agent-adapter-hpa.yaml
+++ b/test/e2e/swck/oap-agent-adapter-hpa.yaml
@@ -16,7 +16,7 @@
 setup:
   env: kind
   file: ../kind.yaml
-  init-system-environment: ../env.swck
+  init-system-environment: ../env
   kind:
     expose-ports:
       - namespace: skywalking-system
@@ -63,10 +63,26 @@ setup:
         - namespace: skywalking-swck-system
           resource: deployment/skywalking-swck-operator
           for: condition=Available
-    - name: Setup oapserver and ui
+    - name: Setup BanyanDB
+      command: |
+        export BANYANDB_VERSION=$(yq e '.dependencies[] | select(.name == 
"skywalking-banyandb-helm") | .version' chart/skywalking/Chart.yaml)
+        helm install banyandb 
oci://registry-1.docker.io/apache/skywalking-banyandb-helm \
+                       --version ${BANYANDB_VERSION} \
+                       --set fullnameOverride=banyandb \
+                       --set image.repository=$BANYANDB_REPO \
+                       --set image.tag=$BANYANDB_TAG \
+                       --set standalone.enabled=true \
+                       --set cluster.enabled=false \
+                       --set etcd.enabled=false
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
+    - name: Setup oapserver
       command: |
         kubectl create namespace skywalking-system
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/skywalking-components.yaml
 | grep -B20 "\-\-\-" | kubectl apply -f -
+        sed 
"s#OAP_IMAGE_PLACEHOLDER#${OAP_REPO}:${OAP_TAG}#g;s#UI_IMAGE_PLACEHOLDER#${UI_REPO}:${UI_TAG}#g;s#PLACEHOLDER#latest#g"
 \
+          test/e2e/swck/skywalking-components.yaml | grep -B30 "\-\-\-" | 
kubectl apply -f -
       wait:
         - namespace: skywalking-system
           resource: OAPServer/skywalking-system
diff --git a/test/e2e/swck/oap-agent-banyandb.yaml 
b/test/e2e/swck/oap-agent-banyandb.yaml
index aa3ccd5..45038e0 100644
--- a/test/e2e/swck/oap-agent-banyandb.yaml
+++ b/test/e2e/swck/oap-agent-banyandb.yaml
@@ -16,18 +16,15 @@
 setup:
   env: kind
   file: ../kind.yaml
-  init-system-environment: ../env.swck
+  init-system-environment: ../env
   kind:
     expose-ports:
       - namespace: skywalking-system
         resource: service/demo
         port: 8085
-      - namespace: default
-        resource: service/default-oap
+      - namespace: skywalking-system
+        resource: service/skywalking-system-oap
         port: 12800
-      - namespace: default
-        resource: service/banyandb-test-banyandb-grpc
-        port: 17912
   steps:
     - name: Install yq
       command: bash test/e2e/setup-e2e-shell/install.sh yq
@@ -54,22 +51,29 @@ setup:
         - namespace: skywalking-swck-system
           resource: deployment/skywalking-swck-operator
           for: condition=Available
-    - name: label control plane for banyandb affinity test
-      command: |
-        kubectl label nodes kind-control-plane storage=banyandb
-    - name: remove taint on control plane and enable schedule
-      command: |
-        kubectl taint nodes kind-control-plane node-role.kubernetes.io/master-
-    - name: Install banyandb
+    - name: Setup BanyanDB
       command: |
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/deploy-banyandb.yaml
 | kubectl apply -f -
+        export BANYANDB_VERSION=$(yq e '.dependencies[] | select(.name == 
"skywalking-banyandb-helm") | .version' chart/skywalking/Chart.yaml)
+        helm install banyandb 
oci://registry-1.docker.io/apache/skywalking-banyandb-helm \
+                       --version ${BANYANDB_VERSION} \
+                       --set fullnameOverride=banyandb \
+                       --set image.repository=$BANYANDB_REPO \
+                       --set image.tag=$BANYANDB_TAG \
+                       --set standalone.enabled=true \
+                       --set cluster.enabled=false \
+                       --set etcd.enabled=false
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
     - name: setup oapserver and ui
       command: |
         kubectl create namespace skywalking-system
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/skywalking-components-with-banyandb.yaml
 | kubectl apply -f -
+        sed 
"s#OAP_IMAGE_PLACEHOLDER#${OAP_REPO}:${OAP_TAG}#g;s#UI_IMAGE_PLACEHOLDER#${UI_REPO}:${UI_TAG}#g;s#PLACEHOLDER#latest#g"
 \
+          test/e2e/swck/skywalking-components.yaml | kubectl apply -f -
       wait:
-        - namespace: default
-          resource: OAPServer/default
+        - namespace: skywalking-system
+          resource: OAPServer/skywalking-system
           for: condition=Available
         - namespace: skywalking-system
           resource: UI/skywalking-system
@@ -77,7 +81,7 @@ setup:
     - name: Setup java agent demo
       command: |
         kubectl label namespace skywalking-system swck-injection=enabled
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/demo.yaml
 | sed 's/oap-service/default-oap.default/' | kubectl apply -f -
+        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/demo.yaml
 | sed 's/oap-service/skywalking-system-oap.skywalking-system/' | kubectl apply 
-f -
       wait:
         - namespace: skywalking-system
           resource: deployment/demo
@@ -91,7 +95,7 @@ cleanup:
 trigger:
   action: http
   interval: 10s
-  times: 5
+  times: 0
   url: http://${service_demo_host}:${service_demo_8085}/hello
   method: GET
 
@@ -103,11 +107,11 @@ verify:
     # the interval between two attempts, e.g. 10s, 1m.
     interval: 10s
   cases:
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 service ls
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 service ls
       expected: ../expected/swck-demo-service.yaml
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 metrics linear --name service_cpm --service-name Your_ApplicationName | yq e 
'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 metrics linear --name service_cpm --service-name Your_ApplicationName | yq e 
'to_entries' -
       expected: ../expected/metrics.yaml
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 endpoint list --keyword=hello --service-name Your_ApplicationName
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 endpoint list --keyword=hello --service-name Your_ApplicationName
       expected: ../expected/endpoint.yaml
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 metrics linear --name endpoint_cpm --endpoint-name GET:/hello --service-name 
Your_ApplicationName | yq e 'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 metrics linear --name endpoint_cpm --endpoint-name GET:/hello --service-name 
Your_ApplicationName | yq e 'to_entries' -
       expected: ../expected/metrics.yaml
diff --git a/test/e2e/swck/oap-ui-agent-elasticsearch.yaml 
b/test/e2e/swck/oap-ui-agent-elasticsearch.yaml
index 85e4e6a..81f4b60 100644
--- a/test/e2e/swck/oap-ui-agent-elasticsearch.yaml
+++ b/test/e2e/swck/oap-ui-agent-elasticsearch.yaml
@@ -16,18 +16,15 @@
 setup:
   env: kind
   file: ../kind.yaml
-  init-system-environment: ../env.swck
+  init-system-environment: ../env
   kind:
     expose-ports:
       - namespace: skywalking-system
         resource: service/demo
         port: 8085
-      - namespace: default
-        resource: service/default-oap
+      - namespace: skywalking-system
+        resource: service/skywalking-system-oap
         port: 12800
-      - namespace: default
-        resource: service/es-out
-        port: 9200
   steps:
     - name: Install yq
       command: bash test/e2e/setup-e2e-shell/install.sh yq
@@ -56,18 +53,16 @@ setup:
           for: condition=Available
     - name: setup elasticsearch
       command: |
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/deploy-elasticsearch.yaml
 | kubectl apply -f -
+        kubectl apply -f test/e2e/swck/deploy-elasticsearch.yaml
         kubectl rollout status --watch --timeout=120s statefulset/es
-    - name: setup storage(use the external type)
-      command: |
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/external-storage.yaml
 | kubectl apply -f -
     - name: setup oapserver and ui
       command: |
         kubectl create namespace skywalking-system
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/skywalking-components-with-storage.yaml
 | kubectl apply -f -
+        sed 
"s#OAP_IMAGE_PLACEHOLDER#${OAP_REPO}:${OAP_TAG}#g;s#UI_IMAGE_PLACEHOLDER#${UI_REPO}:${UI_TAG}#g;s#PLACEHOLDER#latest#g"
 \
+          test/e2e/swck/skywalking-components-elasticsearch.yaml | kubectl 
apply -f -
       wait:
-        - namespace: default
-          resource: OAPServer/default
+        - namespace: skywalking-system
+          resource: OAPServer/skywalking-system
           for: condition=Available
         - namespace: skywalking-system
           resource: UI/skywalking-system
@@ -75,7 +70,7 @@ setup:
     - name: Setup java agent demo
       command: |
         kubectl label namespace skywalking-system swck-injection=enabled
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/demo.yaml
 | sed 's/oap-service/default-oap.default/' | kubectl apply -f -
+        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/demo.yaml
 | sed 's/oap-service/skywalking-system-oap.skywalking-system/' | kubectl apply 
-f -
       wait:
         - namespace: skywalking-system
           resource: deployment/demo
@@ -89,7 +84,7 @@ cleanup:
 trigger:
   action: http
   interval: 10s
-  times: 5
+  times: 0
   url: http://${service_demo_host}:${service_demo_8085}/hello
   method: GET
 
@@ -101,11 +96,11 @@ verify:
     # the interval between two attempts, e.g. 10s, 1m.
     interval: 10s
   cases:
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 service ls
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 service ls
       expected: ../expected/swck-demo-service.yaml
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 metrics linear --name service_cpm --service-name Your_ApplicationName | yq e 
'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 metrics linear --name service_cpm --service-name Your_ApplicationName | yq e 
'to_entries' -
       expected: ../expected/metrics.yaml
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 endpoint list --keyword=hello --service-name Your_ApplicationName
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 endpoint list --keyword=hello --service-name Your_ApplicationName
       expected: ../expected/endpoint.yaml
-    - query: swctl --display yaml 
--base-url=http://${service_default_oap_host}:${service_default_oap_12800}/graphql
 metrics linear --name endpoint_cpm --endpoint-name GET:/hello --service-name 
Your_ApplicationName | yq e 'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql
 metrics linear --name endpoint_cpm --endpoint-name GET:/hello --service-name 
Your_ApplicationName | yq e 'to_entries' -
       expected: ../expected/metrics.yaml
diff --git a/test/e2e/swck/oap-ui-agent-oapserverconfig.yaml 
b/test/e2e/swck/oap-ui-agent-oapserverconfig.yaml
index 88db1b3..ae837da 100644
--- a/test/e2e/swck/oap-ui-agent-oapserverconfig.yaml
+++ b/test/e2e/swck/oap-ui-agent-oapserverconfig.yaml
@@ -16,7 +16,7 @@
 setup:
   env: kind
   file: ../kind.yaml
-  init-system-environment: ../env.swck
+  init-system-environment: ../env
   kind:
     expose-ports:
       - namespace: skywalking-system
@@ -54,10 +54,26 @@ setup:
         - namespace: skywalking-swck-system
           resource: deployment/skywalking-swck-operator
           for: condition=Available
+    - name: Setup BanyanDB
+      command: |
+        export BANYANDB_VERSION=$(yq e '.dependencies[] | select(.name == 
"skywalking-banyandb-helm") | .version' chart/skywalking/Chart.yaml)
+        helm install banyandb 
oci://registry-1.docker.io/apache/skywalking-banyandb-helm \
+                       --version ${BANYANDB_VERSION} \
+                       --set fullnameOverride=banyandb \
+                       --set image.repository=$BANYANDB_REPO \
+                       --set image.tag=$BANYANDB_TAG \
+                       --set standalone.enabled=true \
+                       --set cluster.enabled=false \
+                       --set etcd.enabled=false
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
     - name: setup oapserver and ui
-      command: | 
+      command: |
         kubectl create namespace skywalking-system
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/skywalking-components.yaml
 | kubectl apply -f -
+        sed 
"s#OAP_IMAGE_PLACEHOLDER#${OAP_REPO}:${OAP_TAG}#g;s#UI_IMAGE_PLACEHOLDER#${UI_REPO}:${UI_TAG}#g;s#PLACEHOLDER#latest#g"
 \
+          test/e2e/swck/skywalking-components.yaml | kubectl apply -f -
       wait:
         - namespace: skywalking-system
           resource: OAPServer/skywalking-system
@@ -73,13 +89,13 @@ setup:
         - namespace: skywalking-system
           resource: deployment/demo
           for: condition=Available
-    - name: setup oapserverconfig(static configuration)
-      command: |
-        export oap_podname=$(kubectl get pod -lapp=oap -n skywalking-system -o 
jsonpath='{.items[*].metadata.name}')
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/oapserverconfig-demo.yaml
 | kubectl apply -f -
-    - name: wait the old pod teminated
+    - name: setup oapserverconfig(static configuration) and wait for pod 
restart
       command: |
-        while kubectl get pod $oap_podname -n skywalking-system > /dev/null; \
+        oap_podname=$(kubectl get pod -lapp=oap -n skywalking-system -o 
jsonpath='{.items[*].metadata.name}')
+        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/oapserverconfig-demo.yaml
 | \
+          sed '/env:/a\    - name: SW_STORAGE\n      value: banyandb\n    - 
name: SW_STORAGE_BANYANDB_TARGETS\n      value: banyandb-grpc.default:17912' | \
+          kubectl apply -f -
+        while kubectl get pod $oap_podname -n skywalking-system > /dev/null 
2>&1; \
         do \
           sleep 0.1; \
         done
@@ -89,7 +105,7 @@ setup:
       wait:
         - namespace: skywalking-system
           resource: deployment/songs-deployment
-          for: condition=Available 
+          for: condition=Available
     - name: setup oapserverdynamicconfig(dynamic configuration)
       command: |
         curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/oapserverdynamicconfig-demo.yaml
 | sed 's/default: 0.1/default: 500/' | kubectl apply -f -
@@ -102,7 +118,7 @@ cleanup:
 trigger:
   action: http
   interval: 5s
-  times: 5
+  times: 0
   url: http://${service_demo_host}:${service_demo_8085}/hello
   method: GET
 
diff --git a/test/e2e/swck/oap-ui-agent-satellite.yaml 
b/test/e2e/swck/oap-ui-agent-satellite.yaml
index 0526dec..e5294c1 100644
--- a/test/e2e/swck/oap-ui-agent-satellite.yaml
+++ b/test/e2e/swck/oap-ui-agent-satellite.yaml
@@ -16,7 +16,7 @@
 setup:
   env: kind
   file: ../kind.yaml
-  init-system-environment: ../env.swck
+  init-system-environment: ../env
   kind:
     expose-ports:
       - namespace: skywalking-system
@@ -51,10 +51,26 @@ setup:
         - namespace: skywalking-swck-system
           resource: deployment/skywalking-swck-operator
           for: condition=Available
+    - name: Setup BanyanDB
+      command: |
+        export BANYANDB_VERSION=$(yq e '.dependencies[] | select(.name == 
"skywalking-banyandb-helm") | .version' chart/skywalking/Chart.yaml)
+        helm install banyandb 
oci://registry-1.docker.io/apache/skywalking-banyandb-helm \
+                       --version ${BANYANDB_VERSION} \
+                       --set fullnameOverride=banyandb \
+                       --set image.repository=$BANYANDB_REPO \
+                       --set image.tag=$BANYANDB_TAG \
+                       --set standalone.enabled=true \
+                       --set cluster.enabled=false \
+                       --set etcd.enabled=false
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
     - name: setup oapserver and ui
       command: |
         kubectl create namespace skywalking-system
-        curl 
https://raw.githubusercontent.com/apache/skywalking-swck/v0.9.0/test/e2e/skywalking-components-with-satellite.yaml
 | kubectl apply -f -
+        sed 
"s#OAP_IMAGE_PLACEHOLDER#${OAP_REPO}:${OAP_TAG}#g;s#UI_IMAGE_PLACEHOLDER#${UI_REPO}:${UI_TAG}#g;s#SATELLITE_IMAGE_PLACEHOLDER#${SATELLITE_REPO}:${SATELLITE_TAG}#g;s#PLACEHOLDER#latest#g"
 \
+          test/e2e/swck/skywalking-components-satellite.yaml | kubectl apply 
-f -
       wait:
         - namespace: skywalking-system
           resource: OAPServer/skywalking-system
diff --git a/test/e2e/values.yaml 
b/test/e2e/swck/skywalking-components-elasticsearch.yaml
similarity index 50%
copy from test/e2e/values.yaml
copy to test/e2e/swck/skywalking-components-elasticsearch.yaml
index 19b9bae..9df8ef3 100644
--- a/test/e2e/values.yaml
+++ b/test/e2e/swck/skywalking-components-elasticsearch.yaml
@@ -13,14 +13,37 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-oap:
+# OAPServer with Elasticsearch storage
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: OAPServer
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: OAP_IMAGE_PLACEHOLDER
+  service:
+    template:
+      type: ClusterIP
   config:
-    metadata-service-mapping.yaml: |
-      serviceName: e2e::${LABELS."service.istio.io/canonical-name"}
-      serviceInstanceName: ${NAME}
-elasticsearch:
-  esConfig:
-    elasticsearch.yml: |
-      cluster.routing.allocation.disk.watermark.low: 90%
-      cluster.routing.allocation.disk.watermark.high: 99%
-      cluster.routing.allocation.disk.watermark.flood_stage: 99%
+    - name: SW_STORAGE
+      value: elasticsearch
+    - name: SW_STORAGE_ES_CLUSTER_NODES
+      value: es-out.default:9200
+---
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: UI
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: UI_IMAGE_PLACEHOLDER
+  OAPServerAddress: http://skywalking-system-oap.skywalking-system:12800
+  service:
+    template:
+      type: ClusterIP
+    ingress:
+      host: demo.ui.skywalking
diff --git a/test/e2e/swck/skywalking-components-satellite.yaml 
b/test/e2e/swck/skywalking-components-satellite.yaml
new file mode 100644
index 0000000..7b8f4c6
--- /dev/null
+++ b/test/e2e/swck/skywalking-components-satellite.yaml
@@ -0,0 +1,67 @@
+# 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.
+
+# OAPServer with BanyanDB storage and satellite meter config
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: OAPServer
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: OAP_IMAGE_PLACEHOLDER
+  config:
+    - name: SW_STORAGE
+      value: banyandb
+    - name: SW_STORAGE_BANYANDB_TARGETS
+      value: banyandb-grpc.default:17912
+    - name: SW_METER_ANALYZER_ACTIVE_FILES
+      value: satellite
+  service:
+    template:
+      type: ClusterIP
+---
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: Satellite
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: SATELLITE_IMAGE_PLACEHOLDER
+  config:
+    - name: SATELLITE_TELEMETRY_EXPORT_TYPE
+      value: metrics_service
+  service:
+    template:
+      type: ClusterIP
+---
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: UI
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: UI_IMAGE_PLACEHOLDER
+  OAPServerAddress: http://skywalking-system-oap.skywalking-system:12800
+  service:
+    template:
+      type: ClusterIP
+    ingress:
+      host: demo.ui.skywalking
diff --git a/test/e2e/values.yaml b/test/e2e/swck/skywalking-components.yaml
similarity index 50%
copy from test/e2e/values.yaml
copy to test/e2e/swck/skywalking-components.yaml
index 19b9bae..63ad62f 100644
--- a/test/e2e/values.yaml
+++ b/test/e2e/swck/skywalking-components.yaml
@@ -13,14 +13,37 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-oap:
+# OAPServer with BanyanDB storage
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: OAPServer
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: OAP_IMAGE_PLACEHOLDER
+  service:
+    template:
+      type: ClusterIP
   config:
-    metadata-service-mapping.yaml: |
-      serviceName: e2e::${LABELS."service.istio.io/canonical-name"}
-      serviceInstanceName: ${NAME}
-elasticsearch:
-  esConfig:
-    elasticsearch.yml: |
-      cluster.routing.allocation.disk.watermark.low: 90%
-      cluster.routing.allocation.disk.watermark.high: 99%
-      cluster.routing.allocation.disk.watermark.flood_stage: 99%
+    - name: SW_STORAGE
+      value: banyandb
+    - name: SW_STORAGE_BANYANDB_TARGETS
+      value: banyandb-grpc.default:17912
+---
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: UI
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  version: PLACEHOLDER
+  instances: 1
+  image: UI_IMAGE_PLACEHOLDER
+  OAPServerAddress: http://skywalking-system-oap.skywalking-system:12800
+  service:
+    template:
+      type: ClusterIP
+    ingress:
+      host: demo.ui.skywalking
diff --git a/test/e2e/values.yaml b/test/e2e/values.yaml
index 19b9bae..ebbd206 100644
--- a/test/e2e/values.yaml
+++ b/test/e2e/values.yaml
@@ -19,8 +19,21 @@ oap:
       serviceName: e2e::${LABELS."service.istio.io/canonical-name"}
       serviceInstanceName: ${NAME}
 elasticsearch:
-  esConfig:
-    elasticsearch.yml: |
+  nodeSets:
+  - name: default
+    count: 1
+    config:
+      node.store.allow_mmap: false
       cluster.routing.allocation.disk.watermark.low: 90%
       cluster.routing.allocation.disk.watermark.high: 99%
       cluster.routing.allocation.disk.watermark.flood_stage: 99%
+    podTemplate:
+      spec:
+        containers:
+        - name: elasticsearch
+          resources:
+            limits:
+              memory: 2Gi
+            requests:
+              cpu: 100m
+              memory: 2Gi


Reply via email to