You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2023/03/25 12:24:16 UTC

[skywalking-showcase] branch helm created (now d1eb146)

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

kezhenxu94 pushed a change to branch helm
in repository https://gitbox.apache.org/repos/asf/skywalking-showcase.git


      at d1eb146  Migrate to Helm Chart

This branch includes the following new commits:

     new d1eb146  Migrate to Helm Chart

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking-showcase] 01/01: Migrate to Helm Chart

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d1eb146e5f123010774887fc1f63811d8a8d37d1
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Sat Mar 25 20:24:05 2023 +0800

    Migrate to Helm Chart
---
 .gitignore                                         |   5 +
 deploy/platform/docker/Makefile.in                 |   2 +-
 ...ysql.yaml => docker-compose.mysql-monitor.yaml} |   0
 ...yaml => docker-compose.postgresql-monitor.yaml} |   0
 ...pose.vm.yaml => docker-compose.vm-monitor.yaml} |   0
 deploy/platform/kubernetes/Chart.yaml              |  54 ++++
 deploy/platform/kubernetes/Makefile                | 145 +++++++---
 deploy/platform/kubernetes/Makefile.in             |   5 +-
 .../kubernetes/feature-cluster/permissions.yaml    |  57 ----
 .../kubernetes/feature-cluster/resources.yaml      | 310 ---------------------
 .../feature-elasticsearch/resources.yaml           |  65 -----
 .../kubernetes/feature-satellite/permissions.yaml  |  48 ----
 .../kubernetes/feature-satellite/resources.yaml    |  75 -----
 .../feature-single-node/permissions.yaml           |  52 ----
 .../kubernetes/feature-single-node/resources.yaml  | 221 ---------------
 deploy/platform/kubernetes/features.mk             | 104 +------
 deploy/platform/kubernetes/templates/NOTES.txt     |  56 ++++
 deploy/platform/kubernetes/templates/_helpers.tpl  |  35 +++
 .../{ => templates}/feature-agent/resources.yaml   |  87 ++++--
 .../feature-apisix-monitor/permissions.yaml        |   6 +-
 .../feature-apisix-monitor/resources.yaml          |   4 +-
 .../{ => templates}/feature-event/permissions.yaml |   5 +-
 .../{ => templates}/feature-event/resources.yaml   |  36 +--
 .../{ => templates}/feature-event/scaler.yaml      |  11 +-
 .../{ => templates}/feature-function/resource.yaml |  13 +-
 .../feature-istiod-monitor/open-telemetry.yaml     |   4 +-
 .../feature-istiod-monitor/permissions.yaml        |   6 +-
 .../feature-kubernetes-monitor/open-telemetry.yaml |   6 +-
 .../feature-kubernetes-monitor/permissions.yaml    |   5 +-
 .../feature-mysql-monitor}/fluent-bit.yaml         |   6 +-
 .../feature-mysql-monitor}/mysql.yaml              |   2 +
 .../feature-mysql-monitor}/open-telemetry.yaml     |   2 +
 .../feature-mysql-monitor}/permissions.yaml        |   6 +-
 .../feature-postgresql-monitor}/fluent-bit.yaml    |   5 +-
 .../open-telemetry.yaml                            |   3 +
 .../feature-postgresql-monitor}/permissions.yaml   |   6 +-
 .../feature-postgresql-monitor}/psql.yaml          |   3 +
 .../feature-promql/configmaps.yaml}                |  17 +-
 .../{ => templates}/feature-promql/resources.yaml  |  21 +-
 .../{ => templates}/feature-rover/permissions.yaml |   6 +-
 .../{ => templates}/feature-rover/profiling.yaml   |  21 +-
 .../{ => templates}/feature-rover/resources.yaml   |  18 +-
 .../feature-so11y/open-telemetry.yaml              |   3 +
 .../{ => templates}/feature-so11y/permissions.yaml |   6 +-
 .../feature-trace-profiling/profiling.yaml         |   9 +-
 .../feature-vm-monitor}/open-telemetry.yaml        |   3 +
 .../feature-vm-monitor}/permissions.yaml           |   6 +-
 .../feature-vm-monitor}/vm.yaml                    |   3 +
 deploy/platform/kubernetes/values.yaml             | 259 +++++++++++++++++
 docs/readme.md                                     |   8 +-
 scripts/wait-cert-manager-ready.sh                 |  59 ----
 51 files changed, 744 insertions(+), 1145 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6388ee9..49fe0f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,3 +60,8 @@ out/
 
 ### VS Code ###
 .vscode/
+
+deploy/platform/kubernetes/Chart.lock
+deploy/platform/kubernetes/charts/
+
+deploy/platform/kubernetes/generated
diff --git a/deploy/platform/docker/Makefile.in b/deploy/platform/docker/Makefile.in
index a0bea00..6c8ef8f 100644
--- a/deploy/platform/docker/Makefile.in
+++ b/deploy/platform/docker/Makefile.in
@@ -17,4 +17,4 @@
 #
 
 .EXPORT_ALL_VARIABLES:
-FEATURE_FLAGS ?= agent,cluster,so11y,vm,event,mysql,apisix-monitor,promql
+FEATURE_FLAGS ?= agent,cluster,so11y,vm-monitor,event,mysql-monitor,apisix-monitor,promql
diff --git a/deploy/platform/docker/docker-compose.mysql.yaml b/deploy/platform/docker/docker-compose.mysql-monitor.yaml
similarity index 100%
rename from deploy/platform/docker/docker-compose.mysql.yaml
rename to deploy/platform/docker/docker-compose.mysql-monitor.yaml
diff --git a/deploy/platform/docker/docker-compose.postgresql.yaml b/deploy/platform/docker/docker-compose.postgresql-monitor.yaml
similarity index 100%
rename from deploy/platform/docker/docker-compose.postgresql.yaml
rename to deploy/platform/docker/docker-compose.postgresql-monitor.yaml
diff --git a/deploy/platform/docker/docker-compose.vm.yaml b/deploy/platform/docker/docker-compose.vm-monitor.yaml
similarity index 100%
rename from deploy/platform/docker/docker-compose.vm.yaml
rename to deploy/platform/docker/docker-compose.vm-monitor.yaml
diff --git a/deploy/platform/kubernetes/Chart.yaml b/deploy/platform/kubernetes/Chart.yaml
new file mode 100644
index 0000000..612daf4
--- /dev/null
+++ b/deploy/platform/kubernetes/Chart.yaml
@@ -0,0 +1,54 @@
+# 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.
+
+apiVersion: v2
+name: skywalking-showcase
+home: https://skywalking.apache.org
+version: 0.0.0
+description: Apache SkyWalking showcase
+icon: https://raw.githubusercontent.com/apache/skywalking-kubernetes/master/logo/sw-logo-for-chart.jpg
+sources:
+  - https://github.com/apache/skywalking-showcase
+dependencies:
+  - name: skywalking-helm
+    version: 0.0.0-8cf4be873ca693340408b854d128d97fd088614e
+    repository: oci://ghcr.io/apache/skywalking-kubernetes
+
+    # @feature: java-agent-injector; the java agent injector is a component of the swck operator, so we need to deploy the swck operator firstly
+  - name: skywalking-helm-swck-operator
+    version: 0.0.0-8cf4be873ca693340408b854d128d97fd088614e
+    repository: oci://ghcr.io/apache/skywalking-kubernetes
+    condition: agentInjector.enabled
+
+    # @feature: function; install open function resources
+  - name: openfunction
+    version: 0.5.0
+    repository: https://openfunction.github.io/charts
+    condition: openfunction.enabled
+
+  - name: kube-state-metrics
+    version: 5.0.1
+    repository: https://prometheus-community.github.io/helm-charts
+    condition: kube-state-metrics.enabled
+
+  - name: base
+    version: 1.14.4
+    repository: https://istio-release.storage.googleapis.com/charts
+    condition: istio.enabled
+
+  - name: istiod
+    version: 1.14.4
+    repository: https://istio-release.storage.googleapis.com/charts
+    condition: istio.enabled
diff --git a/deploy/platform/kubernetes/Makefile b/deploy/platform/kubernetes/Makefile
index e7c1565..e3d456b 100644
--- a/deploy/platform/kubernetes/Makefile
+++ b/deploy/platform/kubernetes/Makefile
@@ -26,47 +26,118 @@ ifneq (,$(findstring satellite,$(features)))
 	BACKEND_SERVICE := satellite
 endif
 
-# Deploy
-deploy_features := $(foreach r,$(features),deploy.$(r))
-.PHONY: $(deploy_features)
-$(deploy_features): %: %.resources
-
-deploy_resources := $(foreach r,$(deploy_features),$(r).resources)
-.PHONY: $(deploy_resources)
-$(deploy_resources): deploy.%.resources: %
-	$(eval resources := $(wildcard $(shell pwd)/$</*))
-	@$(foreach resource, $(resources), docker run --rm -v "$(pwd)/$(resource)":/input \
-		$(foreach v,$(EXPORTED_VARS),-e $(v)) \
-		bhgedigital/envsubst sh -c "envsubst < /input" | kubectl -n $(NAMESPACE) apply -f - ; \
-	)
-
-.PHONY: deploy
-deploy: $(deploy_features)
-ifneq ($(SHOW_TIPS),false)
-	@echo
-	@echo "Now wait the Pods to be ready and use the following command to expose the port of SkyWalking UI"
-	@echo
-	@echo "  $$ kubectl port-forward svc/ui 8080:8080 --namespace $(NAMESPACE)"
-	@echo
-	@echo "Then open your browser and navigate to http://localhost:8080"
-	@echo
+DEBUG ?= false
+HELM_OPTIONS := --set skywalking-helm.fullnameOverride=$(RELEASE)
+ifeq ($(DEBUG),true)
+	HELM_OPTIONS := $(HELM_OPTIONS) --dry-run
 endif
 
-# Undeploy
-undeploy_features := $(foreach r,$(features),undeploy.$(r))
-.PHONY: $(undeploy_features)
-$(undeploy_features): %: %.resources
+.PHONY: helm
+helm:
+	@helm version >/dev/null 2>&1 || (echo "No helm in PATH, please make sure helm is available in PATH."; exit 1)
+
+# @feature: java-agent-injector; use the java agent injector to inject the java agent more natively
+.PHONY: feature-java-agent-injector
+feature-java-agent-injector:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set agentInjector.enabled=true)
+
+.PHONY: feature-single-node
+feature-single-node:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set skywalking-helm.oap.replicas=1)
+
+.PHONY: feature-cluster
+feature-cluster:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set skywalking-helm.oap.replicas=2)
+
+.PHONY: feature-elasticsearch
+feature-elasticsearch:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set skywalking-helm.oap.storageType=elasticsearch)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set skywalking-helm.elasticsearch.enabled=true)
+
+.PHONY: feature-postgresql
+feature-postgresql:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set skywalking-helm.oap.storageType=postgresql)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set skywalking-helm.postgresql.enabled=true)
+
+.PHONY: feature-so11y
+feature-so11y:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.so11y.enabled=true)
+
+.PHONY: feature-vm-monitor
+feature-vm-monitor:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.vmMonitor.enabled=true)
+
+.PHONY: feature-event
+feature-event:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.event.enabled=true)
+
+.PHONY: feature-istiod-monitor
+feature-istiod-monitor:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.istiodMonitor.enabled=true)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set istio.enabled=true --set istiod.global.istioNamespace=$(NAMESPACE) --set base.global.istioNamespace=$(NAMESPACE))
+
+.PHONY: feature-als
+feature-als:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.als.enabled=true)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set istio.enabled=true)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set istiod.meshConfig.defaultConfig.tracing.zipkin.address=$(RELEASE)-oap.$(NAMESPACE).svc:9411)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set istiod.meshConfig.defaultConfig.envoyMetricsService.address=$(RELEASE)-oap.$(NAMESPACE).svc:11800)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set istiod.meshConfig.defaultConfig.envoyAccessLogService.address=$(RELEASE)-oap.$(NAMESPACE).svc:11800)
 
-undeploy_resources := $(foreach r,$(undeploy_features),$(r).resources)
-.PHONY: $(undeploy_resources)
-$(undeploy_resources): undeploy.%.resources: %
-	$(eval resources := $(wildcard $(shell pwd)/$</*))
-	@$(foreach resource, $(resources), docker run --rm -v "$(pwd)/$(resource)":/input \
-		$(foreach v,$(EXPORTED_VARS),-e $(v)) \
-		bhgedigital/envsubst sh -c "envsubst < /input" | kubectl -n $(NAMESPACE) delete --ignore-not-found -f - ; \
-	)
+.PHONY: feature-satellite
+feature-satellite:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.satellite.enabled=true)
+
+.PHONY: feature-rover
+feature-rover:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.rover.enabled=true)
+
+.PHONY: feature-trace-profiling
+feature-trace-profiling:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.traceProfiling.enabled=true)
+
+.PHONY: feature-mysql-monitor
+feature-mysql-monitor:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.mysqlMonitor.enabled=true)
+
+.PHONY: feature-postgresql-monitor
+feature-postgresql-monitor:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.postgresqlMonitor.enabled=true)
+
+.PHONY: feature-apisix-monitor
+feature-apisix-monitor:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.apisixMonitor.enabled=true)
+
+# @feature: kubernetes-monitor; extra resources to install for kubernetes monitoring, standard kube-state-metrics
+.PHONY: feature-kubernetes-monitor
+feature-kubernetes-monitor:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.kubernetesMonitor.enabled=true)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set kube-state-metrics.enabled=true)
+
+.PHONY: feature-function
+feature-function:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.function.enabled=true)
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set openfunction.enabled=true)
+
+.PHONY: feature-promql
+feature-promql:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.promql.enabled=true)
+	@mkdir -p ./generated/promql-configs/
+	@cp ../config/promql/dashboards/*.json ./generated/promql-configs/
+
+.PHONY: feature-mesh-with-agent
+feature-mesh-with-agent:
+	$(eval HELM_OPTIONS := $(HELM_OPTIONS) --set features.meshWithAgent.enabled=true)
+
+.PHONY: deploy
+deploy: $(features)
+	helm dep up .
+	helm -n $(NAMESPACE) upgrade --install $(RELEASE) . --create-namespace $(HELM_OPTIONS) \
+	--set sampleServices.hub=ghcr.io/apache/skywalking-showcase \
+	--set sampleServices.tag=f36d4b4
 
 .PHONY: undeploy
-undeploy: $(undeploy_features)
+undeploy:
+	helm -n $(NAMESPACE) delete $(RELEASE)
 
 include features.mk
diff --git a/deploy/platform/kubernetes/Makefile.in b/deploy/platform/kubernetes/Makefile.in
index 6ddc6e6..67beb61 100644
--- a/deploy/platform/kubernetes/Makefile.in
+++ b/deploy/platform/kubernetes/Makefile.in
@@ -18,8 +18,9 @@
 
 .EXPORT_ALL_VARIABLES:
 
-NAMESPACE ?= default
+NAMESPACE ?= skywalking-showcase
+RELEASE ?= demo
 AGENTLESS ?= false
 BACKEND_SERVICE ?= oap
 
-FEATURE_FLAGS ?= java-agent-injector,cluster,elasticsearch,kubernetes-monitor,so11y,vm,als,event,istiod-monitor,satellite,rover,trace-profiling,mysql,apisix-monitor,promql
+FEATURE_FLAGS ?= java-agent-injector,cluster,elasticsearch,kubernetes-monitor,so11y,vm-monitor,als,event,istiod-monitor,satellite,rover,trace-profiling,mysql-monitor,postgresql-monitor,apisix-monitor,promql
diff --git a/deploy/platform/kubernetes/feature-cluster/permissions.yaml b/deploy/platform/kubernetes/feature-cluster/permissions.yaml
deleted file mode 100644
index dad1c9d..0000000
--- a/deploy/platform/kubernetes/feature-cluster/permissions.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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.
-#
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: skywalking-oap-sa-cluster
-
----
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: skywalking-oap-sa-cluster-role
-rules:
-  - apiGroups: [ "" ]
-    resources:
-      - "pods" # @feature: cluster; OAP needs to read other OAP Pods information to form a cluster
-               # @feature: als; OAP needs to read Pods metadata to analyze the access logs
-      - "pods/log" # @feature: on-demand-pod-logs; in feature on demand Pod logs, OAP needs to read pods logs
-      - "services" # @feature: als; OAP needs to read services metadata to analyze the access logs
-      - "endpoints" # @feature: als; OAP needs to read endpoints metadata to analyze the access logs
-      - "nodes" # @feature: als; OAP needs to read nodes metadata to analyze the access logs
-      - "configmaps"
-    verbs: [ "get", "watch", "list" ]
-  - apiGroups: [ "batch" ]
-    resources:
-      - "jobs" # @feature: cluster; OAP needs to wait for the init job to complete
-    verbs: [ "get", "watch", "list" ]
-
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: skywalking-oap-sa-cluster-role-binding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: skywalking-oap-sa-cluster-role
-subjects:
-  - kind: ServiceAccount
-    name: skywalking-oap-sa-cluster
-    namespace: ${NAMESPACE}
diff --git a/deploy/platform/kubernetes/feature-cluster/resources.yaml b/deploy/platform/kubernetes/feature-cluster/resources.yaml
deleted file mode 100644
index 0fc9099..0000000
--- a/deploy/platform/kubernetes/feature-cluster/resources.yaml
+++ /dev/null
@@ -1,310 +0,0 @@
-# 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.
-#
-
----
-apiVersion: v1
-data:
-  metadata-service-mapping.yaml: |
-    serviceName: mesh-svr::${LABELS."service.istio.io/canonical-name",LABELS."app.kubernetes.io/name",LABELS.app}
-    serviceInstanceName: ${NAME,NAME} # Just to skip the "envsubst" replacement
-  alarm-settings.yml: |
-    rules:
-      service_resp_time_rule:
-        metrics-name: service_resp_time
-        threshold: 20 # 20ms is just for demo
-        op: ">"
-        period: 5
-        count: 1
-        message: Response time of service {name} is more than 20ms.
-kind: ConfigMap
-metadata:
-  name: oap-static-config
-
----
-apiVersion: v1
-data:
-  core.default.log4j-xml: |-
-    <Configuration status="WARN">
-       <Appenders>
-         <Console name="Console" target="SYSTEM_OUT">
-           <PatternLayout charset="UTF-8" pattern="%d - %c - %L [%t] %-5p %x - %m%n"/>
-         </Console>
-       </Appenders>
-       <Loggers>
-         <logger name="io.grpc.netty" level="INFO"/>
-         <logger name="org.apache.skywalking.oap.server.configuration.api" level="TRACE"/>
-         <logger name="org.apache.skywalking.oap.server.configuration.configmap" level="DEBUG"/>
-         <Root level="INFO">
-           <AppenderRef ref="Console"/>
-         </Root>
-        </Loggers>
-    </Configuration>
-kind: ConfigMap
-metadata:
-  labels:
-    app: oap
-  name: oap-dynamic-config
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: oap
-spec:
-  selector:
-    app: oap
-  ports:
-    - name: metrics
-      port: 1234
-    - name: grpc
-      port: 11800
-    - name: http
-      port: 12800
-    - name: zipkin-receiver
-      port: 9411
-    - name: zipkin-query
-      port: 9412
-    - name: promql
-      port: 9090
-
----
-apiVersion: batch/v1
-kind: Job
-metadata:
-  name: oap-init-job # @feature: cluster; set up an init job to initialize ES templates and indices
-spec:
-  template:
-    metadata:
-      name: oap-init-job
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      serviceAccountName: skywalking-oap-sa-cluster
-      restartPolicy: Never
-      initContainers:
-        - name: wait-for-es
-          image: busybox:1.30
-          command:
-            - "sh"
-            - "-c"
-            - "for i in $(seq 1 60); do nc -z -w3 elasticsearch 9200 && exit 0 || sleep 5; done; exit 1"
-      containers:
-        - name: oap-init
-          image: ${SW_OAP_IMAGE}
-          imagePullPolicy: Always
-          env: # @feature: cluster; make sure all env vars are the same with the cluster nodes as this will affect templates / indices
-            - name: JAVA_OPTS
-              value: "-Dmode=init" # @feature: cluster; set the OAP mode to "init" so the job can complete
-            - name: SW_OTEL_RECEIVER
-              value: default
-            - name: SW_OTEL_RECEIVER_ENABLED_OTEL_RULES
-              # @feature: vm; enable vm rules to analyze VM metrics
-              # @feature: so11y; enable oap rules to analyze OAP metrics
-              # @feature: kubernetes-monitor; enable rules to analyze Kubernetes Cluster/Node/Service metrics
-              # @feature: istiod-monitor; enable rules to analyze Istio control plane metrics
-              # @feature: mysql; enable mysql rules to analyze MySQL metrics
-              # @feature: apisix-monitor; enable APISIX rules to analyze APISIX metrics
-              value: vm,oap,k8s/*,istio-controlplane,mysql/*,postgresql/*,apisix
-            - name: SW_STORAGE
-              value: elasticsearch
-            - name: SW_STORAGE_ES_CLUSTER_NODES
-              value: elasticsearch:9200
-            - name: SW_STORAGE_ES_INDEX_REPLICAS_NUMBER
-              value: "0"
-            - name: SW_TELEMETRY
-              value: prometheus
-            - name: SW_METER_ANALYZER_ACTIVE_FILES
-              value: datasource,threadpool,satellite,network-profiling,spring-sleuth
-            - name: SW_STORAGE_ES_RESPONSE_TIMEOUT
-              value: "50000"
-            - name: SW_STORAGE_ES_INDEX_SHARDS_NUMBER
-              value: "6"
-            - name: SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR
-              value: "2"
-            - name: SW_RECEIVER_ZIPKIN
-              value: default
-            - name: SW_QUERY_ZIPKIN
-              value: default
-          volumeMounts:
-            - name: config-volume
-              mountPath: /skywalking/ext-config
-      volumes:
-        - name: config-volume
-          configMap:
-            name: oap-static-config
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: oap-deployment
-  labels:
-    app: oap
-spec:
-  replicas: 2 # @feature: cluster; set OAP replicas to >1
-  selector:
-    matchLabels:
-      app: oap
-  template:
-    metadata:
-      labels:
-        app: oap
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      serviceAccountName: skywalking-oap-sa-cluster # @feature: cluster; set a service account with Pod "read" permission
-      initContainers:
-        - name: wait-for-oap-init
-          image: bitnami/kubectl:1.20.12
-          command:
-            - "kubectl"
-            - "wait"
-            - "--for=condition=complete"
-            - "job/oap-init-job"
-      containers:
-        - name: oap
-          image: ${SW_OAP_IMAGE}
-          imagePullPolicy: Always
-          resources:
-            limits:
-              cpu: 4000m
-              memory: "4096Mi"
-            requests:
-              cpu: 1000m
-              memory: "1024Mi"
-          ports:
-            - name: metrics # @feature: so11y; set a name for the metrics port that can be referenced in otel config
-              containerPort: 1234
-            - name: grpc
-              containerPort: 11800
-            - name: http
-              containerPort: 12800
-            - name: zipkin-receiver
-              containerPort: 9411
-            - name: zipkin-query
-              containerPort: 9412
-            - name: promql
-              containerPort: 9090
-          env:
-            - name: JAVA_OPTS
-              value: "-Dmode=no-init"
-            - name: SW_CLUSTER
-              value: kubernetes # @feature: cluster; set cluster coordinator to kubernetes
-            - name: SW_CLUSTER_K8S_NAMESPACE
-              value: ${NAMESPACE}
-            - name: SW_CLUSTER_K8S_LABEL
-              value: app=oap # @feature: cluster; set label selectors to select OAP Pods as a cluster
-            - name: SKYWALKING_COLLECTOR_UID # @feature: cluster; set collector uid to identify the OAP node
-              valueFrom:
-                fieldRef:
-                  fieldPath: metadata.uid
-            - name: SW_HEALTH_CHECKER
-              value: default
-            - name: SW_OTEL_RECEIVER
-              value: default # @feature: so11y;,mysql;kubernetes-monitor enable OpenTelemetry receiver to receive OpenTelemetry metrics
-            - name: SW_OTEL_RECEIVER_ENABLED_OTEL_RULES
-              # @feature: vm; enable vm rules to analyze VM metrics
-              # @feature: so11y; enable oap rules to analyze OAP metrics
-              # @feature: kubernetes-monitor; enable rules to analyze Kubernetes Cluster/Node/Service metrics
-              # @feature: istiod-monitor; enable rules to analyze Istio control plane metrics
-              # @feature: mysql; enable mysql rules to analyze MySQL metrics
-              # @feature: apisix-monitor; enable APISIX rules to analyze APISIX metrics
-              value: vm,oap,k8s/*,istio-controlplane,mysql/*,postgresql/*,apisix
-            - name: SW_STORAGE
-              value: elasticsearch
-            - name: SW_STORAGE_ES_CLUSTER_NODES
-              value: elasticsearch:9200
-            - name: SW_TELEMETRY
-              value: prometheus # @feature: so11y; expose the metrics of self o11y through prometheus
-            - name: SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS
-              value: "mx-mesh,persistence" # @feature: als; enable mesh analyzer (mx-mesh) to analyze ALS logs
-            - name: K8S_SERVICE_NAME_RULE
-              value: "mesh-svr::${service.metadata.name}"
-            - name: SW_CONFIGURATION
-              value: k8s-configmap
-            - name: SW_ENVOY_METRIC_ALS_TCP_ANALYSIS
-              value: "mx-mesh"
-            - name: SW_ENABLE_UPDATE_UI_TEMPLATE
-              value: "false"
-            - name: SW_SLOW_DB_THRESHOLD
-              value: default:0,mongodb:100
-            - name: SW_ENABLE_ON_DEMAND_POD_LOG
-              value: "true"
-            - name: SW_METER_ANALYZER_ACTIVE_FILES
-              value: datasource,threadpool,satellite,network-profiling,spring-sleuth
-            - name: SW_STORAGE_ES_RESPONSE_TIMEOUT
-              value: "50000"
-            - name: SW_STORAGE_ES_INDEX_SHARDS_NUMBER
-              value: "6"
-            - name: SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR
-              value: "2"
-            - name: SW_RECEIVER_ZIPKIN
-              value: default
-            - name: SW_QUERY_ZIPKIN
-              value: default
-          volumeMounts:
-            - name: config-volume
-              mountPath: /skywalking/ext-config
-      volumes:
-        - name: config-volume
-          configMap:
-            name: oap-static-config
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: ui
-spec:
-  selector:
-    app: ui
-  ports:
-    - protocol: TCP
-      port: 8080
-      targetPort: 8080
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: ui-deployment
-  labels:
-    app: ui
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: ui
-  template:
-    metadata:
-      labels:
-        app: ui
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      serviceAccountName: skywalking-oap-sa-cluster
-      containers:
-        - name: ui
-          image: ${SW_UI_IMAGE}
-          imagePullPolicy: Always
-          ports:
-            - containerPort: 8080
-          env:
-            - name: SW_OAP_ADDRESS
-              value: http://oap:12800
-            - name: SW_ZIPKIN_ADDRESS
-              value: http://oap:9412
diff --git a/deploy/platform/kubernetes/feature-elasticsearch/resources.yaml b/deploy/platform/kubernetes/feature-elasticsearch/resources.yaml
deleted file mode 100644
index 755b362..0000000
--- a/deploy/platform/kubernetes/feature-elasticsearch/resources.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# 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.
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: elasticsearch
-spec:
-  selector:
-    app: elasticsearch
-  ports:
-    - protocol: TCP
-      port: 9200
-      targetPort: 9200
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: es-deployment
-  labels:
-    app: elasticsearch
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: elasticsearch
-  template:
-    metadata:
-      labels:
-        app: elasticsearch
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      containers:
-        - name: elasticsearch
-          image: ${ES_IMAGE}
-          imagePullPolicy: Always
-          resources:
-            limits:
-              cpu: 4000m
-              memory: "4096Mi"
-            requests:
-              cpu: 4000m
-              memory: "4096Mi"
-          ports:
-            - containerPort: 9200
-          env:
-            - name: "discovery.type"
-              value: "single-node"
diff --git a/deploy/platform/kubernetes/feature-satellite/permissions.yaml b/deploy/platform/kubernetes/feature-satellite/permissions.yaml
deleted file mode 100644
index 43f90fc..0000000
--- a/deploy/platform/kubernetes/feature-satellite/permissions.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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.
-#
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: skywalking-satellite-sa
-  namespace: ${NAMESPACE}
-
----
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: skywalking-satellite-sa-role
-rules:
-  - apiGroups: [ "" ]
-    resources:
-      - "pods"
-    verbs: [ "get", "watch", "list" ]
-
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: skywalking-satellite-sa-role-binding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: skywalking-satellite-sa-role
-subjects:
-  - kind: ServiceAccount
-    name: skywalking-satellite-sa
-    namespace: ${NAMESPACE}
\ No newline at end of file
diff --git a/deploy/platform/kubernetes/feature-satellite/resources.yaml b/deploy/platform/kubernetes/feature-satellite/resources.yaml
deleted file mode 100644
index cad94d9..0000000
--- a/deploy/platform/kubernetes/feature-satellite/resources.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
-# 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.
-#
-apiVersion: v1
-kind: Service
-metadata:
-  name: satellite
-spec:
-  selector:
-    app: satellite
-  ports:
-    - name: grpc
-      port: 11800
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: satellite-deployment
-  labels:
-    app: satellite
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: satellite
-  template:
-    metadata:
-      labels:
-        app: satellite
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      serviceAccountName: skywalking-satellite-sa
-      containers:
-        - name: satellite
-          image: ${SW_SATELLITE_IMAGE}
-          imagePullPolicy: Always
-          resources:
-            limits:
-              cpu: 500m
-              memory: "512Mi"
-            requests:
-              cpu: 500m
-              memory: "512Mi"
-          ports:
-            - name: grpc
-              containerPort: 11800
-          env:
-            - name: SATELLITE_GRPC_CLIENT_FINDER
-              value: kubernetes
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_NAMESPACE
-              value: ${NAMESPACE}
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_KIND
-              value: pod
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_SELECTOR_LABEL
-              value: app=oap
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_EXTRA_PORT
-              value: "11800"
-            - name: SATELLITE_TELEMETRY_EXPORT_TYPE
-              value: metrics_service
\ No newline at end of file
diff --git a/deploy/platform/kubernetes/feature-single-node/permissions.yaml b/deploy/platform/kubernetes/feature-single-node/permissions.yaml
deleted file mode 100644
index 4b4148a..0000000
--- a/deploy/platform/kubernetes/feature-single-node/permissions.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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.
-#
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: skywalking-oap-sa
-
----
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: skywalking-oap-sa-role
-rules:
-  - apiGroups: [ "" ]
-    resources:
-      - "pods" # @feature: als; OAP needs to read pods metadata to analyze the access logs
-      - "pods/log" # @feature: on-demand-pod-logs; in feature on demand Pod logs, OAP needs to read pods logs
-      - "services" # @feature: als; OAP needs to read services metadata to analyze the access logs
-      - "endpoints" # @feature: als; OAP needs to read endpoints metadata to analyze the access logs
-      - "nodes" # @feature: als; OAP needs to read nodes metadata to analyze the access logs
-      - "configmaps"
-    verbs: [ "get", "watch", "list" ]
-
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: skywalking-oap-sa-role-binding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: skywalking-oap-sa-role
-subjects:
-  - kind: ServiceAccount
-    name: skywalking-oap-sa
-    namespace: ${NAMESPACE}
diff --git a/deploy/platform/kubernetes/feature-single-node/resources.yaml b/deploy/platform/kubernetes/feature-single-node/resources.yaml
deleted file mode 100644
index 31c8149..0000000
--- a/deploy/platform/kubernetes/feature-single-node/resources.yaml
+++ /dev/null
@@ -1,221 +0,0 @@
-# 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.
-#
----
-apiVersion: v1
-data:
-  metadata-service-mapping.yaml: |
-    serviceName: mesh-svr::${LABELS."service.istio.io/canonical-name",LABELS."app.kubernetes.io/name",LABELS.app}
-    serviceInstanceName: ${NAME,NAME} # Just to skip the "envsubst" replacement
-  alarm-settings.yml: |
-    rules:
-      service_resp_time_rule:
-        metrics-name: service_resp_time
-        threshold: 20 # 20ms is just for demo
-        op: ">"
-        period: 5
-        count: 1
-        message: Response time of service {name} is more than 20ms.
-kind: ConfigMap
-metadata:
-  name: oap-static-config
-
----
-apiVersion: v1
-data:
-  core.default.log4j-xml: |-
-    <Configuration status="WARN">
-       <Appenders>
-         <Console name="Console" target="SYSTEM_OUT">
-           <PatternLayout charset="UTF-8" pattern="%d - %c - %L [%t] %-5p %x - %m%n"/>
-         </Console>
-       </Appenders>
-       <Loggers>
-         <logger name="io.grpc.netty" level="INFO"/>
-         <logger name="org.apache.skywalking.oap.server.configuration.api" level="TRACE"/>
-         <logger name="org.apache.skywalking.oap.server.configuration.configmap" level="DEBUG"/>
-         <Root level="INFO">
-           <AppenderRef ref="Console"/>
-         </Root>
-        </Loggers>
-    </Configuration>
-kind: ConfigMap
-metadata:
-  labels:
-    app: oap
-  name: oap-dynamic-config
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: oap
-spec:
-  selector:
-    app: oap
-  ports:
-    - name: metrics
-      port: 1234
-    - name: grpc
-      port: 11800
-    - name: http
-      port: 12800
-    - name: zipkin-receiver
-      port: 9411
-    - name: zipkin-query
-      port: 9412
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: oap-deployment
-  labels:
-    app: oap
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: oap
-  template:
-    metadata:
-      labels:
-        app: oap
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      serviceAccountName: skywalking-oap-sa # @feature: als; set a service account with Pods/Endpoints/Services/Nodes permissions to analyze Envoy access logs
-      containers:
-        - name: oap
-          image: ${SW_OAP_IMAGE}
-          imagePullPolicy: Always
-          resources:
-            limits:
-              cpu: 4000m
-              memory: "4096Mi"
-            requests:
-              cpu: 1000m
-              memory: "1024Mi"
-          ports:
-            - name: metrics # @feature: so11y; set a name for the metrics port that can be referenced in otel config
-              containerPort: 1234
-            - name: grpc
-              containerPort: 11800
-            - name: http
-              containerPort: 12800
-            - name: zipkin-receiver
-              containerPort: 9411
-            - name: zipkin-query
-              containerPort: 9412
-          env:
-            - name: SW_CLUSTER_K8S_NAMESPACE
-              value: ${NAMESPACE}
-            - name: SW_CLUSTER_K8S_LABEL
-              value: app=oap
-            - name: SW_HEALTH_CHECKER
-              value: default
-            - name: SW_OTEL_RECEIVER
-              value: default # @feature: so11y;mysql;vm;kubernetes-monitor enable OpenTelemetry receiver to receive OpenTelemetry metrics
-            - name: SW_OTEL_RECEIVER_ENABLED_OTEL_RULES
-              # @feature: vm; enable vm rules to analyze VM metrics
-              # @feature: so11y; enable oap rules to analyze OAP metrics
-              # @feature: kubernetes-monitor; enable rules to analyze Kubernetes Cluster/Node/Service metrics
-              # @feature: istiod-monitor; enable rules to analyze Istio metrics
-              # @feature: mysql; enable rules to analyze MySQL metrics
-              value: vm,oap,k8s/*,istio-controlplane,mysql/*
-            - name: SW_STORAGE
-              value: elasticsearch
-            - name: SW_STORAGE_ES_CLUSTER_NODES
-              value: elasticsearch:9200
-            - name: SW_STORAGE_ES_INDEX_REPLICAS_NUMBER
-              value: "0"
-            - name: SW_TELEMETRY
-              value: prometheus # @feature: so11y; expose the metrics of self o11y through prometheus
-            - name: SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS
-              value: "k8s-mesh,persistence" # @feature: als; enable mesh analyzer (k8s-mesh) to analyze ALS logs
-            - name: K8S_SERVICE_NAME_RULE
-              value: "mesh-svr::${service.metadata.name}"
-            - name: SW_CONFIGURATION
-              value: k8s-configmap
-            - name: SW_ENABLE_ON_DEMAND_POD_LOG
-              value: "true"
-            - name: SW_METER_ANALYZER_ACTIVE_FILES
-              value: datasource,threadpool,satellite,network-profiling,spring-sleuth
-            - name: SW_STORAGE_ES_RESPONSE_TIMEOUT
-              value: "50000"
-            - name: SW_RECEIVER_ZIPKIN
-              value: default
-            - name: SW_QUERY_ZIPKIN
-              value: default
-          volumeMounts:
-            - name: config-volume
-              mountPath: /skywalking/ext-config
-      volumes:
-        - name: config-volume
-          configMap:
-            name: oap-static-config
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: ui
-spec:
-  selector:
-    app: ui
-  ports:
-    - protocol: TCP
-      port: 8080
-      targetPort: 8080
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: ui-deployment
-  labels:
-    app: ui
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: ui
-  template:
-    metadata:
-      labels:
-        app: ui
-      annotations:
-        sidecar.istio.io/inject: "false"
-    spec:
-      containers:
-        - name: ui
-          image: ${SW_UI_IMAGE}
-          imagePullPolicy: Always
-          ports:
-            - containerPort: 8080
-          readinessProbe:
-            httpGet:
-              path: /
-              port: 8080
-            initialDelaySeconds: 3
-            periodSeconds: 3
-            failureThreshold: 10
-          env:
-            - name: SW_OAP_ADDRESS
-              value: http://oap:12800
-            - name: SW_ZIPKIN_ADDRESS
-              value: http://oap:9412
diff --git a/deploy/platform/kubernetes/features.mk b/deploy/platform/kubernetes/features.mk
index 159fccb..c9eaac8 100644
--- a/deploy/platform/kubernetes/features.mk
+++ b/deploy/platform/kubernetes/features.mk
@@ -22,38 +22,13 @@
 
 include ../../../Makefile.in
 
-.PHONY: istioctl
-istioctl:
-	@istioctl version >/dev/null 2>&1 || (echo "No istioctl in PATH, please make sure istioctl is available in PATH."; exit 1)
-
-.PHONY: istio
-istio: istioctl
-	@istioctl install -y --set profile=demo \
-		--set meshConfig.enableEnvoyAccessLogService=true `# @feature: als; enable Envoy access log service` \
-		`# @feature: als; be careful to only emit wanted metrics otherwise the traffic is HUGE` \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[0]=.*membership_healthy.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[1]=.*upstream_cx_active.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[2]=.*upstream_cx_total.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[3]=.*upstream_rq_active.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[4]=.*upstream_rq_total.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[5]=.*upstream_rq_pending_active.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[6]=.*lb_healthy_panic.*' \
-		--set 'meshConfig.defaultConfig.proxyStatsMatcher.inclusionRegexps[7]=.*upstream_cx_none_healthy.*' \
-		--set meshConfig.defaultConfig.envoyMetricsService.address=$(BACKEND_SERVICE).$(NAMESPACE):11800 `# @feature: als; set MetricsService address to Backend Service so Envoy emits metrics to Backend Service` \
-		--set meshConfig.defaultConfig.envoyAccessLogService.address=$(BACKEND_SERVICE).$(NAMESPACE):11800 `# @feature: als; set AccessLogService address to Backend Service so Envoy emits logs to Backend Service` \
-		--set meshConfig.defaultConfig.tracing.sampling=100 \
-		--set meshConfig.defaultConfig.tracing.zipkin.address=oap.$(NAMESPACE).svc.cluster.local:9411 \
-		--set meshConfig.enableTracing=true
-
 .PHONY: namespace
 namespace:
 	@kubectl get namespace $(NAMESPACE)-agentless > /dev/null 2>&1 || kubectl create namespace $(NAMESPACE)-agentless
 	@kubectl label namespace --overwrite $(NAMESPACE)-agentless istio-injection=enabled # @feature: als; label the namespace to allow Istio sidecar injection
 
 .PHONY: prerequisites
-prerequisites: istio namespace
-
-feature-als:
+prerequisites: namespace
 
 .PHONY: deploy.feature-als
 deploy.feature-als: prerequisites
@@ -69,7 +44,7 @@ undeploy.feature-als: istioctl
 feature-mesh-with-agent:
 
 .PHONY: deploy.feature-mesh-with-agent
-deploy.feature-mesh-with-agent: prerequisites install-cert-manager
+deploy.feature-mesh-with-agent:
 	@curl -Ls https://archive.apache.org/dist/skywalking/swck/${SWCK_OPERATOR_VERSION}/skywalking-swck-${SWCK_OPERATOR_VERSION}-bin.tgz | tar -zxf - -O ./config/operator-bundle.yaml | kubectl apply -f -
 	@kubectl label namespace --overwrite $(NAMESPACE) swck-injection=enabled
 	@kubectl get configmap skywalking-swck-java-agent-configmap -n skywalking-swck-system -oyaml | sed "s/127.0.0.1/$(NAMESPACE)-$(BACKEND_SERVICE).$(NAMESPACE)/" | kubectl apply -f -
@@ -83,39 +58,9 @@ undeploy.feature-mesh-with-agent: istioctl
 	$(MAKE) undeploy FEATURE_FLAGS=agent TAG=$(TAG) NAMESPACE=$(NAMESPACE) AGENTLESS=true
 	istioctl x uninstall --purge -y
 
-# @feature: kubernetes-monitor; extra resources to install for kubernetes monitoring, standard kube-state-metrics
-.PHONY: feature-kubernetes-monitor
-feature-kubernetes-monitor:
-
-.PHONY: deploy.feature-kubernetes-monitor
-deploy.feature-kubernetes-monitor:
-	@kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/service-account.yaml
-	@kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/cluster-role.yaml
-	@kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/cluster-role-binding.yaml
-	@kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/service.yaml
-	@kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/deployment.yaml
-
-.PHONY: undeploy.feature-kubernetes-monitor
-undeploy.feature-kubernetes-monitor:
-	@kubectl delete --ignore-not-found -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/service-account.yaml
-	@kubectl delete --ignore-not-found -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/cluster-role.yaml
-	@kubectl delete --ignore-not-found -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/cluster-role-binding.yaml
-	@kubectl delete --ignore-not-found -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/service.yaml
-	@kubectl delete --ignore-not-found -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/v2.2.4/examples/standard/deployment.yaml
-
-# @feature: java-agent-injector; use the java agent injector to inject the java agent more natively
-.PHONY: feature-java-agent-injector
-feature-java-agent-injector:
-
-# @feature: java-agent-injector; the swck operator depends on the certificate management of the cert-manager
-.PHONY: install-cert-manager
-install-cert-manager:
-	@kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
-	@sh ../../../scripts/wait-cert-manager-ready.sh
-
 # @feature: java-agent-injector; the java agent injector is a component of the swck operator, so we need to deploy the swck operator firstly
 .PHONY: deploy.feature-java-agent-injector
-deploy.feature-java-agent-injector: install-cert-manager
+deploy.feature-java-agent-injector:
 	@curl -Ls https://archive.apache.org/dist/skywalking/swck/${SWCK_OPERATOR_VERSION}/skywalking-swck-${SWCK_OPERATOR_VERSION}-bin.tgz | tar -zxf - -O ./config/operator-bundle.yaml | kubectl apply -f -
 	@kubectl label namespace --overwrite $(NAMESPACE) swck-injection=enabled
 	# @feature: java-agent-injector; we can update the agent's backend address in a single-node cluster firstly so that we don't need to add the same backend env for every java agent
@@ -128,46 +73,3 @@ undeploy.feature-java-agent-injector:
 	@curl -Ls https://archive.apache.org/dist/skywalking/swck/${SWCK_OPERATOR_VERSION}/skywalking-swck-${SWCK_OPERATOR_VERSION}-bin.tgz | tar -zxf - -O ./config/operator-bundle.yaml | kubectl delete --ignore-not-found -f -
 	@kubectl delete --ignore-not-found -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
 	$(MAKE) undeploy FEATURE_FLAGS=agent AGENTLESS=false SHOW_TIPS=false BACKEND_SERVICE=$(BACKEND_SERVICE)
-
-.PHONY: helm
-helm:
-	@helm version >/dev/null 2>&1 || (echo "No helm in PATH, please make sure helm is available in PATH."; exit 1)
-
-.PHONY: open-function
-open-function: helm
-	@helm repo add openfunction https://openfunction.github.io/charts/
-	@helm repo update
-	@helm upgrade openfunction openfunction/openfunction -n openfunction --version 0.3.1 --install --create-namespace \
-		--set global.ShipwrightBuild.enabled=false \
-		--set global.TektonPipelines.enabled=false \
-		--set global.Keda.enabled=false \
-		--set global.Dapr.enabled=false \
-		--set contour.envoy.useHostPort=false \
-		--set contour.envoy.service.type=ClusterIP \
-		--set contour.envoy.service.externalTrafficPolicy="" \
-		--wait
-
-# @feature: function; install open function resources
-.PHONY: deploy.feature-function
-deploy.feature-function: open-function
-	@echo "deploy.feature-function"
-
-.PHONY: feature-function
-feature-function:
-
-.PHONY: undeploy.feature-function
-undeploy.feature-function: helm
-	@helm uninstall openfunction -n openfunction --timeout 20m || kubectl delete namespace openfunction --ignore-not-found --timeout 20m || true
-
-# @feature: promql; extra configmaps to create for grafana dashboards
-.PHONY: feature-promql
-feature-promql:
-dashboards := $(wildcard ../config/promql/dashboards/*.json)
-
-.PHONY: deploy.feature-promql
-deploy.feature-promql:
-	@$(foreach d, $(dashboards), kubectl create configmap grafana-dashboards-$(basename $(notdir $d)) --from-file=$d;)
-
-.PHONY: undeploy.feature-promql
-undeploy.feature-promql:
-	@$(foreach d, $(dashboards), kubectl delete configmap grafana-dashboards-$(basename $(notdir $d)) --ignore-not-found;)
diff --git a/deploy/platform/kubernetes/templates/NOTES.txt b/deploy/platform/kubernetes/templates/NOTES.txt
new file mode 100644
index 0000000..7c13563
--- /dev/null
+++ b/deploy/platform/kubernetes/templates/NOTES.txt
@@ -0,0 +1,56 @@
+{{/*
+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.
+*/}}
+
+*************************************************************************
+*                                                                       *
+*                          SkyWalking Showcase                          *
+*                                                                       *
+*************************************************************************
+
+Thank you for installing {{ .Chart.Name }}.
+
+Your release is named {{ .Release.Name }}.
+
+Get the UI URL by running these commands:
+{{- if index .Values "skywalking-helm" "ui" "ingress" "enabled" }}
+{{- range index .Values "skywalking-helm" "ui" "ingress" "hosts" }}
+  http{{ if index $.Values "ui" "ingress" "tls" }}s{{ end }}://{{ . }}{{ index $.Values "ui" "ingress" "path" }}
+{{- end }}
+{{- else if contains "NodePort" (index .Values "skywalking-helm" "ui" "service" "type") }}
+  export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "skywalking.ui.fullname" . }})
+  export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+  echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" (index .Values "skywalking-helm" "ui" "service" "type") }}
+     NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+           You can watch the status of by running 'kubectl get svc -w {{ include "skywalking.ui.fullname" . }} -n {{ .Release.Namespace }}'
+  export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "skywalking.ui.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+  echo http://$SERVICE_IP:{{ index .Values "skywalking-helm" "ui" "service" "externalPort" }}
+{{- else if contains "ClusterIP" (index .Values "skywalking-helm" "ui" "service" "type") }}
+  echo "Visit http://127.0.0.1:8080 to use your application"
+  kubectl port-forward svc/{{ printf "%s-skywalking-helm-ui" .Release.Name }} 8080:{{ index .Values "skywalking-helm" "ui" "service" "externalPort" }} --namespace {{ .Release.Namespace }}
+{{- end }}
+
+{{- if index .Values "skywalking-helm" "elasticsearch" "enabled" }}
+{{- if index .Values "skywalking-helm" "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/deploy/platform/kubernetes/templates/_helpers.tpl b/deploy/platform/kubernetes/templates/_helpers.tpl
new file mode 100644
index 0000000..6e64b34
--- /dev/null
+++ b/deploy/platform/kubernetes/templates/_helpers.tpl
@@ -0,0 +1,35 @@
+{{/*
+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.
+*/}}
+
+{{/*
+The collector address, might be OAP or Satellite
+*/}}
+{{- define "skywalking.collector.address" -}}
+{{- if index .Values "skywalking-helm" "satellite" "enabled" }}
+{{- printf "%s-satellite.%s.svc.cluster.local:%d" (index .Values "skywalking-helm" "fullnameOverride") .Release.Namespace 11800 }}
+{{- else }}
+{{- printf "%s-oap.%s.svc.cluster.local:%d" (index .Values "skywalking-helm" "fullnameOverride") .Release.Namespace 11800 }}
+{{- end -}}
+{{- end -}}
+
+{{- define "skywalking.oap.address.grpc" -}}
+{{- printf "%s-oap.%s.svc.cluster.local:%d" (index .Values "skywalking-helm" "fullnameOverride") .Release.Namespace 11800 }}
+{{- end -}}
+
+{{- define "skywalking.oap.address.http" -}}
+{{- printf "http://%s-oap.%s.svc.cluster.local:%d" (index .Values "skywalking-helm" "fullnameOverride") .Release.Namespace 12800 }}
+{{- end -}}
diff --git a/deploy/platform/kubernetes/feature-agent/resources.yaml b/deploy/platform/kubernetes/templates/feature-agent/resources.yaml
similarity index 69%
rename from deploy/platform/kubernetes/feature-agent/resources.yaml
rename to deploy/platform/kubernetes/templates/feature-agent/resources.yaml
index f62f5bc..aaa2791 100644
--- a/deploy/platform/kubernetes/feature-agent/resources.yaml
+++ b/deploy/platform/kubernetes/templates/feature-agent/resources.yaml
@@ -16,11 +16,25 @@
 # under the License.
 #
 
+---
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: {{ .Values.sampleServices.namespace }}
+  labels:
+  {{- if .Values.agentInjector.enabled }}
+    swck-injection: enabled
+  {{- end }}
+  {{- if or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}
+    istio-injection: enabled
+  {{- end }}
+
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: gateway
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   selector:
     app: gateway
@@ -34,6 +48,7 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: gateway-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: gateway
 spec:
@@ -48,17 +63,17 @@ spec:
         swck-java-agent-injected: "true"
         app: gateway
       annotations:
-        sidecar.istio.io/inject: "${AGENTLESS}"
+        sidecar.istio.io/inject: "{{ or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}"
         # @feature: java-agent-injector; set the java agent configuration
         strategy.skywalking.apache.org/inject.Container: "gateway"
         strategy.skywalking.apache.org/agent.Overlay: "true"
         agent.skywalking.apache.org/agent.service_name: "agent::gateway"
         optional.skywalking.apache.org: "spring-cloud-gateway-3.x"
-        sidecar.skywalking.apache.org/initcontainer.Image: "${SW_AGENT_JAVA_IMAGE}"
+        sidecar.skywalking.apache.org/initcontainer.Image: "{{ .Values.agentInjector.javaImage }}"
     spec:
       containers:
         - name: gateway
-          image: ${HUB}/gateway-service:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/gateway-service:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 80
@@ -67,13 +82,14 @@ spec:
             - name: SW_AGENT_NAME
               value: agent::gateway
             - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
 
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: songs
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   selector:
     app: songs
@@ -87,6 +103,7 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: songs-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: songs
 spec:
@@ -101,17 +118,17 @@ spec:
         swck-java-agent-injected: "true"
         app: songs
       annotations:
-        sidecar.istio.io/inject: "${AGENTLESS}"
+        sidecar.istio.io/inject: "{{ or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}"
         # @feature: java-agent-injector; set the java agent configuration
         strategy.skywalking.apache.org/inject.Container: "songs"
         strategy.skywalking.apache.org/agent.Overlay: "true"
         agent.skywalking.apache.org/agent.service_name: "agent::songs"
         optional.skywalking.apache.org: "guava-cache-plugin"
-        sidecar.skywalking.apache.org/initcontainer.Image: "${SW_AGENT_JAVA_IMAGE}"
+        sidecar.skywalking.apache.org/initcontainer.Image: "{{ .Values.agentInjector.javaImage }}"
     spec:
       containers:
         - name: songs
-          image: ${HUB}/songs-service:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/songs-service:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 80
@@ -120,17 +137,18 @@ spec:
             - name: SW_AGENT_NAME
               value: agent::songs
             - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
             - name: ACTIVE_MQ_URL
               value: tcp://activemq:61616
             - name: ACTIVE_MQ_QUEUE
-              value: queue-songs-ping              
+              value: queue-songs-ping
 
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: rcmd
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   selector:
     app: recommendation
@@ -144,6 +162,7 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: recommendation-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: recommendation
 spec:
@@ -156,11 +175,11 @@ spec:
       labels:
         app: recommendation
       annotations:
-        sidecar.istio.io/inject: "${AGENTLESS}"
+        sidecar.istio.io/inject: "{{ or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}"
     spec:
       containers:
         - name: recommendation
-          image: ${HUB}/recommendation-service:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/recommendation-service:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 80
@@ -168,13 +187,14 @@ spec:
             - name: SW_AGENT_NAME
               value: agent::recommendation
             - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
 
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: app
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   selector:
     app: app
@@ -188,6 +208,7 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: app-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: app
 spec:
@@ -200,11 +221,11 @@ spec:
       labels:
         app: app
       annotations:
-        sidecar.istio.io/inject: "${AGENTLESS}"
+        sidecar.istio.io/inject: "{{ or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}"
     spec:
       containers:
         - name: app
-          image: ${HUB}/app:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/app:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 80
@@ -214,13 +235,14 @@ spec:
             - name: REACT_APP_SW_AGENT_NAME_UI
               value: agent::ui
             - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
 
 ---
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: loadgen-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: loadgen
 spec:
@@ -233,11 +255,11 @@ spec:
       labels:
         app: loadgen
       annotations:
-        sidecar.istio.io/inject: "${AGENTLESS}"
+        sidecar.istio.io/inject: "{{ or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}"
     spec:
       containers:
         - name: app
-          image: ${HUB}/load-gen:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/load-gen:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
 ---
 
@@ -245,6 +267,7 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   name: apisix-config
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: apisix-config
 data:
@@ -258,16 +281,16 @@ data:
         service_id: 2
         plugins:
           skywalking:
-            service_name: "${{SW_AGENT_SERVICE}}"
-            service_instance_name: "${{SW_AGENT_SERVICE_INSTANCE}}"
-            endpoint_addr: http://oap:12800
+            service_name: ${{ "{{" }}}SW_AGENT_SERVICE{{ "}}" }}
+            service_instance_name: ${{ "{{" }}SW_AGENT_SERVICE_INSTANCE{{ "}}" }}
+            endpoint_addr: {{ template "skywalking.oap.address.http" . }}
       - uri: /test
         service_id: 2
         plugins:
           skywalking:
-            service_name: "${{SW_AGENT_SERVICE}}"
-            service_instance_name: "${{SW_AGENT_SERVICE_INSTANCE}}"
-            endpoint_addr: http://oap:12800
+            service_name: ${{"{{"}}SW_AGENT_SERVICE{{"}}"}}
+            service_instance_name: ${{"{{"}}SW_AGENT_SERVICE_INSTANCE{{"}}"}}
+            endpoint_addr: {{ template "skywalking.oap.address.http" . }}
       services:
       - id: 1
         upstream_id: 1
@@ -304,9 +327,9 @@ data:
           ip: "0.0.0.0"
           port: 9091
       skywalking:
-        service_name: "${{SW_AGENT_SERVICE}}"
-        service_instance_name: "${{SW_AGENT_SERVICE_INSTANCE}}"
-        endpoint_addr: http://oap:12800
+        service_name: ${{"{{"}}SW_AGENT_SERVICE{{"}}"}}
+        service_instance_name: ${{"{{"}}SW_AGENT_SERVICE_INSTANCE{{"}}"}}
+        endpoint_addr: {{ template "skywalking.oap.address.http" . }}
     plugins:
       - prometheus
       - skywalking
@@ -321,6 +344,7 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: frontend-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: frontend
 spec:
@@ -333,11 +357,11 @@ spec:
       labels:
         app: frontend
       annotations:
-        sidecar.istio.io/inject: "${AGENTLESS}"
+        sidecar.istio.io/inject: "{{ or .Values.features.als.enabled .Values.features.istiodMonitor.enabled .Values.features.meshWithAgent }}"
     spec:
       containers:
         - name: frontend
-          image: ${HUB}/frontend:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/frontend:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
           resources:
             limits:
@@ -353,7 +377,7 @@ spec:
               name: metrics
           env:
             - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
             - name: SW_SERVICE_INSTANCE
               valueFrom:
                 fieldRef:
@@ -374,6 +398,7 @@ apiVersion: v1
 kind: Service
 metadata:
   name: frontend
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   selector:
     app: frontend
@@ -387,6 +412,7 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: activemq-deployment
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: activemq
 spec:
@@ -418,10 +444,11 @@ apiVersion: v1
 kind: Service
 metadata:
   name: activemq
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   selector:
     app: activemq
   ports:
     - protocol: TCP
       port: 61616
-      targetPort: 61616              
\ No newline at end of file
+      targetPort: 61616              
diff --git a/deploy/platform/kubernetes/feature-apisix-monitor/permissions.yaml b/deploy/platform/kubernetes/templates/feature-apisix-monitor/permissions.yaml
similarity index 92%
rename from deploy/platform/kubernetes/feature-apisix-monitor/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-apisix-monitor/permissions.yaml
index ac17148..2881866 100644
--- a/deploy/platform/kubernetes/feature-apisix-monitor/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-apisix-monitor/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.apisixMonitor.enabled }}
+
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -44,4 +46,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-apisix
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-apisix-monitor/resources.yaml b/deploy/platform/kubernetes/templates/feature-apisix-monitor/resources.yaml
similarity index 98%
rename from deploy/platform/kubernetes/feature-apisix-monitor/resources.yaml
rename to deploy/platform/kubernetes/templates/feature-apisix-monitor/resources.yaml
index 9c82bca..fef831d 100644
--- a/deploy/platform/kubernetes/feature-apisix-monitor/resources.yaml
+++ b/deploy/platform/kubernetes/templates/feature-apisix-monitor/resources.yaml
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-
+{{- if .Values.features.apisixMonitor.enabled }}
 
 apiVersion: v1
 kind: ConfigMap
@@ -102,3 +102,5 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-event/permissions.yaml b/deploy/platform/kubernetes/templates/feature-event/permissions.yaml
similarity index 92%
rename from deploy/platform/kubernetes/feature-event/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-event/permissions.yaml
index 616661f..c06e465 100644
--- a/deploy/platform/kubernetes/feature-event/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-event/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+
+{{- if .Values.features.event.enabled }}
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -32,5 +34,6 @@ roleRef:
   name: view
 subjects:
   - kind: ServiceAccount
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
     name: skywalking-event-exporter-sa
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-event/resources.yaml b/deploy/platform/kubernetes/templates/feature-event/resources.yaml
similarity index 60%
rename from deploy/platform/kubernetes/feature-event/resources.yaml
rename to deploy/platform/kubernetes/templates/feature-event/resources.yaml
index c7e5065..287f33c 100644
--- a/deploy/platform/kubernetes/feature-event/resources.yaml
+++ b/deploy/platform/kubernetes/templates/feature-event/resources.yaml
@@ -15,35 +15,17 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
+{{- if .Values.features.event.enabled }}
 
 ---
 apiVersion: v1
 kind: ConfigMap
 metadata:
   name: skywalking-event-exporter-cm
-  namespace: ${NAMESPACE}
 data:
   config.yaml: |
     filters:
-      - namespace: ${NAMESPACE}
+      - namespace: {{ .Release.Namespace }}
         exporters:
           - skywalking
 
@@ -51,18 +33,17 @@ data:
       skywalking:
         template:
           source:
-            service: "agent::{{ .Service.Name }}"
-            serviceInstance: "{{ .Pod.Name }}"
+            service: "agent::{{"{{"}} .Service.Name {{"}}"}}"
+            serviceInstance: "{{"{{"}} .Pod.Name {{"}}"}}"
             endpoint: ""
-          message: "{{ .Event.Message }}"
-        address: "oap:11800"
+          message: "{{"{{"}} .Event.Message {{"}}"}}"
+        address: "{{ .Release.Name }}-skywalking-helm:11800"
 
 ---
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: skywalking-event-exporter-deployment
-  namespace: ${NAMESPACE}
 spec:
   replicas: 1
   template:
@@ -73,8 +54,8 @@ spec:
       serviceAccountName: skywalking-event-exporter-sa
       containers:
         - name: skywalking-event-exporter
-          image: ${SW_EVENT_EXPORTER_IMAGE}
-          imagePullPolicy: Always
+          image: "{{ .Values.eventExporter.image }}"
+          imagePullPolicy: IfNotPresent
           args:
             - start
             - -v=debug
@@ -89,3 +70,4 @@ spec:
   selector:
     matchLabels:
       app: skywalking-event-exporter
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-event/scaler.yaml b/deploy/platform/kubernetes/templates/feature-event/scaler.yaml
similarity index 80%
rename from deploy/platform/kubernetes/feature-event/scaler.yaml
rename to deploy/platform/kubernetes/templates/feature-event/scaler.yaml
index 03cd3a3..b991aa4 100644
--- a/deploy/platform/kubernetes/feature-event/scaler.yaml
+++ b/deploy/platform/kubernetes/templates/feature-event/scaler.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.event.enabled }}
 
 ---
 # @feature: event; a cron job to mimic the restart of Pods
@@ -22,6 +23,7 @@ kind: Role
 apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: event-role
+  namespace: {{ .Values.sampleServices.namespace }}
 rules:
   - apiGroups:
       - ""
@@ -37,6 +39,7 @@ kind: RoleBinding
 apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: event-role-binding
+  namespace: {{ .Values.sampleServices.namespace }}
 subjects:
   - kind: ServiceAccount
     name: event-scaler-sa
@@ -50,12 +53,14 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: event-scaler-sa
+  namespace: {{ .Values.sampleServices.namespace }}
 
 ---
 apiVersion: batch/v1
 kind: CronJob
 metadata:
   name: event-scale-up
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   schedule: "0,10,20,30,40,50 * * * *"
   successfulJobsHistoryLimit: 1
@@ -74,7 +79,7 @@ spec:
               command:
                 - sh
                 - -c
-                - kubectl -n ${NAMESPACE} scale deployment songs-deployment gateway-deployment app-deployment --replicas=2
+                - kubectl -n {{ .Values.sampleServices.namespace }} scale deployment songs-deployment gateway-deployment app-deployment --replicas=2
           restartPolicy: Never
 
 ---
@@ -82,6 +87,7 @@ apiVersion: batch/v1
 kind: CronJob
 metadata:
   name: event-scale-down
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   schedule: "5,15,25,35,45,55 * * * *"
   successfulJobsHistoryLimit: 1
@@ -100,5 +106,6 @@ spec:
               command:
                 - sh
                 - -c
-                - kubectl -n ${NAMESPACE} scale deployment songs-deployment gateway-deployment app-deployment --replicas=1
+                - kubectl -n {{ .Values.sampleServices.namespace }} scale deployment songs-deployment gateway-deployment app-deployment --replicas=1
           restartPolicy: Never
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-function/resource.yaml b/deploy/platform/kubernetes/templates/feature-function/resource.yaml
similarity index 81%
rename from deploy/platform/kubernetes/feature-function/resource.yaml
rename to deploy/platform/kubernetes/templates/feature-function/resource.yaml
index c70b13c..af182b4 100644
--- a/deploy/platform/kubernetes/feature-function/resource.yaml
+++ b/deploy/platform/kubernetes/templates/feature-function/resource.yaml
@@ -15,6 +15,9 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+
+{{- if .Values.features.function.enabled }}
+
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -34,11 +37,11 @@ spec:
     spec:
       containers:
         - name: app
-          image: ${HUB}/function-load-gen:${TAG}
+          image: "{{ .Values.sampleServices.hub }}/function-load-gen:{{ .Values.sampleServices.tag }}"
           imagePullPolicy: IfNotPresent
           env:
             - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
             - name: URL
               value: http://function.default.svc.cluster.local/World
             - name: SW_AGENT_LAYER
@@ -53,10 +56,10 @@ metadata:
       enabled: true
       provider:
         name: "skywalking"
-        oapServer: ${BACKEND_SERVICE}:11800
+        oapServer: {{ template "skywalking.collector.address" . }}
 spec:
   version: "v2.0.0"
-  image: ${HUB}/function:${TAG}
+  image: {{ .Values.sampleServices.hub }}/function:{{ .Values.sampleServices.tag }}
   port: 8080
   serving:
     template:
@@ -64,3 +67,5 @@ spec:
         - name: function
           imagePullPolicy: IfNotPresent
     runtime: "knative"
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-istiod-monitor/open-telemetry.yaml b/deploy/platform/kubernetes/templates/feature-istiod-monitor/open-telemetry.yaml
similarity index 95%
rename from deploy/platform/kubernetes/feature-istiod-monitor/open-telemetry.yaml
rename to deploy/platform/kubernetes/templates/feature-istiod-monitor/open-telemetry.yaml
index db98d5d..743a9df 100644
--- a/deploy/platform/kubernetes/feature-istiod-monitor/open-telemetry.yaml
+++ b/deploy/platform/kubernetes/templates/feature-istiod-monitor/open-telemetry.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.istiodMonitor.enabled }}
 
 # @feature: istiod-monitor; set OpenTelemetry config to scrape the Istio control plane metrics
 ---
@@ -33,7 +34,7 @@ data:
           exporters: [ logging, otlp ]
     exporters:
       otlp:
-        endpoint: "oap:11800"
+        endpoint: "{{ include "skywalking.oap.address.grpc" . }}"
         tls:
           insecure: true
       logging:
@@ -92,3 +93,4 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-istiod-monitor/permissions.yaml b/deploy/platform/kubernetes/templates/feature-istiod-monitor/permissions.yaml
similarity index 93%
rename from deploy/platform/kubernetes/feature-istiod-monitor/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-istiod-monitor/permissions.yaml
index 34924f4..4dfb9a7 100644
--- a/deploy/platform/kubernetes/feature-istiod-monitor/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-istiod-monitor/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.istiodMonitor.enabled }}
+
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -47,4 +49,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-istio-monitor
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-kubernetes-monitor/open-telemetry.yaml b/deploy/platform/kubernetes/templates/feature-kubernetes-monitor/open-telemetry.yaml
similarity index 96%
rename from deploy/platform/kubernetes/feature-kubernetes-monitor/open-telemetry.yaml
rename to deploy/platform/kubernetes/templates/feature-kubernetes-monitor/open-telemetry.yaml
index e352eb9..b2e5e43 100644
--- a/deploy/platform/kubernetes/feature-kubernetes-monitor/open-telemetry.yaml
+++ b/deploy/platform/kubernetes/templates/feature-kubernetes-monitor/open-telemetry.yaml
@@ -16,6 +16,8 @@
 # under the License.
 #
 
+{{- if .Values.features.kubernetesMonitor.enabled }}
+
 # @feature: kubernetes-monitor; set OpenTelemetry config to scrape the Kubernetes metrics
 ---
 apiVersion: v1
@@ -33,7 +35,7 @@ data:
           exporters: [ logging, otlp ]
     exporters:
       otlp:
-        endpoint: "oap:11800"
+        endpoint: "{{ include "skywalking.oap.address.grpc" . }}"
         tls:
           insecure: true
       logging:
@@ -120,3 +122,5 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-kubernetes-monitor/permissions.yaml b/deploy/platform/kubernetes/templates/feature-kubernetes-monitor/permissions.yaml
similarity index 93%
rename from deploy/platform/kubernetes/feature-kubernetes-monitor/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-kubernetes-monitor/permissions.yaml
index 80f9e93..a5f8af7 100644
--- a/deploy/platform/kubernetes/feature-kubernetes-monitor/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-kubernetes-monitor/permissions.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.kubernetesMonitor.enabled }}
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -50,4 +51,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-kubernetes-monitor
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-mysql/fluent-bit.yaml b/deploy/platform/kubernetes/templates/feature-mysql-monitor/fluent-bit.yaml
similarity index 97%
rename from deploy/platform/kubernetes/feature-mysql/fluent-bit.yaml
rename to deploy/platform/kubernetes/templates/feature-mysql-monitor/fluent-bit.yaml
index 6a48c40..adc2685 100644
--- a/deploy/platform/kubernetes/feature-mysql/fluent-bit.yaml
+++ b/deploy/platform/kubernetes/templates/feature-mysql-monitor/fluent-bit.yaml
@@ -16,6 +16,8 @@
 # under the License.
 #
 
+{{- if .Values.features.mysqlMonitor.enabled }}
+
 # @feature: slowsql-mysql; fluent bit log configurations
 ---
 apiVersion: v1
@@ -69,7 +71,7 @@ data:
         log = record["log"]
         record["log"] = nil
         record["date"] = nil
-        record["tags"] = {data={{key="LOG_KIND", value="SLOW_SQL"}}}
+        record["tags"] = { data={ { key="LOG_KIND", value="SLOW_SQL" } } }
         arr = split(log,"\n")
         re1 = {}
 
@@ -170,3 +172,5 @@ data:
         rule      "second_state"  "^(# User@Host.*)"  "third_state"
         rule      "third_state"   "^(# Query_time: .*)"    "statement"
         rule      "statement"     "^\w+.*"             "statement"
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-mysql/mysql.yaml b/deploy/platform/kubernetes/templates/feature-mysql-monitor/mysql.yaml
similarity index 98%
rename from deploy/platform/kubernetes/feature-mysql/mysql.yaml
rename to deploy/platform/kubernetes/templates/feature-mysql-monitor/mysql.yaml
index 795cdca..b5f15f5 100644
--- a/deploy/platform/kubernetes/feature-mysql/mysql.yaml
+++ b/deploy/platform/kubernetes/templates/feature-mysql-monitor/mysql.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.mysqlMonitor.enabled }}
 
 apiVersion: v1
 kind: ConfigMap
@@ -197,3 +198,4 @@ spec:
             items:
               - key: mock-sql
                 path: mock.sql
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-mysql/open-telemetry.yaml b/deploy/platform/kubernetes/templates/feature-mysql-monitor/open-telemetry.yaml
similarity index 98%
rename from deploy/platform/kubernetes/feature-mysql/open-telemetry.yaml
rename to deploy/platform/kubernetes/templates/feature-mysql-monitor/open-telemetry.yaml
index 8ec063c..00fc27e 100644
--- a/deploy/platform/kubernetes/feature-mysql/open-telemetry.yaml
+++ b/deploy/platform/kubernetes/templates/feature-mysql-monitor/open-telemetry.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.mysqlMonitor.enabled }}
 
 # @feature: mysql; set OpenTelemetry config to scrape the mysql metrics
 ---
@@ -100,3 +101,4 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-mysql/permissions.yaml b/deploy/platform/kubernetes/templates/feature-mysql-monitor/permissions.yaml
similarity index 92%
rename from deploy/platform/kubernetes/feature-mysql/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-mysql-monitor/permissions.yaml
index d5ed9d4..651a720 100644
--- a/deploy/platform/kubernetes/feature-mysql/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-mysql-monitor/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.mysqlMonitor.enabled }}
+
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -44,4 +46,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-mysql
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-postgresql/fluent-bit.yaml b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/fluent-bit.yaml
similarity index 97%
rename from deploy/platform/kubernetes/feature-postgresql/fluent-bit.yaml
rename to deploy/platform/kubernetes/templates/feature-postgresql-monitor/fluent-bit.yaml
index f69acae..b58f0a0 100644
--- a/deploy/platform/kubernetes/feature-postgresql/fluent-bit.yaml
+++ b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/fluent-bit.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.postgresqlMonitor.enabled }}
 
 # @feature: slowsql-psql; fluent bit log configurations
 ---
@@ -60,7 +61,7 @@ data:
         log = record["log"]
         record["log"] = nil
         record["date"] = nil
-        record["tags"] = {data={{key="LOG_KIND", value="SLOW_SQL"}}}
+        record["tags"] = { data={ { key="LOG_KIND", value="SLOW_SQL" } } }
         arr = split(log,"\n")
         re1 = {}
 
@@ -145,3 +146,5 @@ data:
         name   my-log-format
         format regex
         regex  \w*-\w*-\w* \w*:\w*:\w*.\w* UTCLOG:  duration: \w*.\w* ms  statement.*
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-postgresql/open-telemetry.yaml b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/open-telemetry.yaml
similarity index 97%
rename from deploy/platform/kubernetes/feature-postgresql/open-telemetry.yaml
rename to deploy/platform/kubernetes/templates/feature-postgresql-monitor/open-telemetry.yaml
index 3a55902..8601343 100644
--- a/deploy/platform/kubernetes/feature-postgresql/open-telemetry.yaml
+++ b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/open-telemetry.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.postgresqlMonitor.enabled }}
 
 # @feature: postgresql; set OpenTelemetry config to scrape the psql metrics
 ---
@@ -102,3 +103,5 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-postgresql/permissions.yaml b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/permissions.yaml
similarity index 92%
rename from deploy/platform/kubernetes/feature-postgresql/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-postgresql-monitor/permissions.yaml
index 79d6b41..781ea41 100644
--- a/deploy/platform/kubernetes/feature-postgresql/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.postgresqlMonitor.enabled }}
+
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -44,4 +46,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-psql
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-postgresql/psql.yaml b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/psql.yaml
similarity index 98%
rename from deploy/platform/kubernetes/feature-postgresql/psql.yaml
rename to deploy/platform/kubernetes/templates/feature-postgresql-monitor/psql.yaml
index 047f173..122b796 100644
--- a/deploy/platform/kubernetes/feature-postgresql/psql.yaml
+++ b/deploy/platform/kubernetes/templates/feature-postgresql-monitor/psql.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.postgresqlMonitor.enabled }}
 
 ---
 apiVersion: v1
@@ -220,3 +221,5 @@ spec:
                 items:
                   - key: mock-sql
                     path: mock.sql
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/Makefile.in b/deploy/platform/kubernetes/templates/feature-promql/configmaps.yaml
similarity index 71%
copy from deploy/platform/kubernetes/Makefile.in
copy to deploy/platform/kubernetes/templates/feature-promql/configmaps.yaml
index 6ddc6e6..d12d9c1 100644
--- a/deploy/platform/kubernetes/Makefile.in
+++ b/deploy/platform/kubernetes/templates/feature-promql/configmaps.yaml
@@ -15,11 +15,16 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.promql.enabled }}
 
-.EXPORT_ALL_VARIABLES:
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: promql-configs
+data:
+{{ range $path, $bytes := .Files.Glob "generated/promql-configs/*.json" }}
+{{- $path | replace "generated/promql-configs/" "" | indent 2 }}: |
+{{ $.Files.Get $path | indent 4 }}
+{{ end }}
 
-NAMESPACE ?= default
-AGENTLESS ?= false
-BACKEND_SERVICE ?= oap
-
-FEATURE_FLAGS ?= java-agent-injector,cluster,elasticsearch,kubernetes-monitor,so11y,vm,als,event,istiod-monitor,satellite,rover,trace-profiling,mysql,apisix-monitor,promql
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-promql/resources.yaml b/deploy/platform/kubernetes/templates/feature-promql/resources.yaml
similarity index 87%
rename from deploy/platform/kubernetes/feature-promql/resources.yaml
rename to deploy/platform/kubernetes/templates/feature-promql/resources.yaml
index 6c66cf3..df74201 100644
--- a/deploy/platform/kubernetes/feature-promql/resources.yaml
+++ b/deploy/platform/kubernetes/templates/feature-promql/resources.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.promql.enabled }}
 
 #This config is for the showcase, when deploy your own environment fell free to modify it.
 ---
@@ -84,7 +85,7 @@ spec:
     spec:
       containers:
         - name: grafana
-          image: ${GRAFANA_IMAGE}
+          image: {{ .Values.grafana.image }}
           imagePullPolicy: IfNotPresent
           ports:
             - name: http-grafana
@@ -99,28 +100,22 @@ spec:
             - name: grafana-config
               mountPath: /etc/grafana/provisioning/dashboards/providers.yaml
               subPath: providers.yaml
-            - name: dashboards-general-service
+            - name: promql-configs
               mountPath: /var/lib/grafana/dashboards/skywalking/general-service.json
               subPath: general-service.json
-            - name: dashboards-service-mesh
+            - name: promql-configs
               mountPath: /var/lib/grafana/dashboards/skywalking/service-mesh.json
               subPath: service-mesh.json
-            - name: dashboards-virtual-database
+            - name: promql-configs
               mountPath: /var/lib/grafana/dashboards/skywalking/virtual-database.json
               subPath: virtual-database.json
       volumes: # require create configmap from deploy/platform/config/promql/dashboards
         - name: grafana-config
           configMap:
             name: grafana-config
-        - name: dashboards-general-service
+        - name: promql-configs
           configMap:
-            name: grafana-dashboards-general-service
-        - name: dashboards-service-mesh
-          configMap:
-            name: grafana-dashboards-service-mesh
-        - name: dashboards-virtual-database
-          configMap:
-            name: grafana-dashboards-virtual-database
+            name: promql-configs
 
 ---
 apiVersion: v1
@@ -134,3 +129,5 @@ spec:
     - port: 3000
       protocol: TCP
       targetPort: http-grafana
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-rover/permissions.yaml b/deploy/platform/kubernetes/templates/feature-rover/permissions.yaml
similarity index 93%
rename from deploy/platform/kubernetes/feature-rover/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-rover/permissions.yaml
index 8b1da58..6542cd5 100644
--- a/deploy/platform/kubernetes/feature-rover/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-rover/permissions.yaml
@@ -15,12 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.rover.enabled}}
 
 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: skywalking-rover-sa
-  namespace: ${NAMESPACE}
 ---
 kind: ClusterRole
 apiVersion: rbac.authorization.k8s.io/v1
@@ -42,4 +42,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: skywalking-rover-sa
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-rover/profiling.yaml b/deploy/platform/kubernetes/templates/feature-rover/profiling.yaml
similarity index 68%
rename from deploy/platform/kubernetes/feature-rover/profiling.yaml
rename to deploy/platform/kubernetes/templates/feature-rover/profiling.yaml
index 9a1d005..de1a862 100644
--- a/deploy/platform/kubernetes/feature-rover/profiling.yaml
+++ b/deploy/platform/kubernetes/templates/feature-rover/profiling.yaml
@@ -15,11 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.rover.enabled}}
 
 apiVersion: v1
 kind: ConfigMap
 metadata:
   name: profiling-config
+  namespace: {{ .Values.sampleServices.namespace }}
   labels:
     app: profiling-config
 data:
@@ -37,6 +39,7 @@ apiVersion: batch/v1
 kind: CronJob
 metadata:
   name: ebpf-profiling-trgigger
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   schedule: "10 */2 * * *"
   successfulJobsHistoryLimit: 1
@@ -50,28 +53,29 @@ spec:
         spec:
           containers:
             - name: ebpf-profiling-trigger
-              image: ${SW_CLI_IMAGE}
+              image: "{{ .Values.swctl.image }}"
+              imagePullPolicy: IfNotPresent
               command:
                 - /bin/sh
                 - -c
                 - >
-                  /swctl --base-url=http://oap:12800/graphql profiling ebpf create fixed \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                     --service-name mesh-svr::recommendation --labels mesh-envoy --duration=9m --target-type ON_CPU;
-                  /swctl --base-url=http://oap:12800/graphql profiling ebpf create fixed \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                     --service-name mesh-svr::app --labels mesh-envoy --duration=9m --target-type ON_CPU;
-                  /swctl --base-url=http://oap:12800/graphql profiling ebpf create fixed \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                     --service-name mesh-svr::songs --labels mesh-envoy --duration=9m --target-type ON_CPU;
-                  /swctl --base-url=http://oap:12800/graphql profiling ebpf create fixed \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                     --service-name mesh-svr::gateway --labels mesh-envoy --duration=9m --target-type ON_CPU;
 
-                  /swctl --base-url=http://oap:12800/graphql profiling ebpf create fixed \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                     --service-name mesh-svr::songs --labels mesh-envoy --duration=9m --target-type OFF_CPU;
 
                   apk update && apk add yq;
-                  /swctl --base-url=http://oap:12800/graphql profiling ebpf create network \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create network \
                     --sampling-config=/profiling/network-profiling-sampling.yaml \
                     --service-name=mesh-svr::recommendation \
-                    --instance-name=$(/swctl --base-url=http://oap:12800/graphql instance ls --service-name mesh-svr::recommendation|yq e '.[0].name' -);
+                    --instance-name=$(/swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql instance ls --service-name mesh-svr::recommendation|yq e '.[0].name' -);
               volumeMounts:
                 - name: profiling-config
                   mountPath: /profiling
@@ -80,3 +84,4 @@ spec:
             - name: profiling-config
               configMap:
                 name: profiling-config
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-rover/resources.yaml b/deploy/platform/kubernetes/templates/feature-rover/resources.yaml
similarity index 78%
rename from deploy/platform/kubernetes/feature-rover/resources.yaml
rename to deploy/platform/kubernetes/templates/feature-rover/resources.yaml
index a7fa9f8..ce4d75e 100644
--- a/deploy/platform/kubernetes/feature-rover/resources.yaml
+++ b/deploy/platform/kubernetes/templates/feature-rover/resources.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.rover.enabled}}
+
 apiVersion: apps/v1
 kind: DaemonSet
 metadata:
@@ -33,8 +35,8 @@ spec:
       serviceAccountName: skywalking-rover-sa
       containers:
         - name: rover
-          image: ${SW_ROVER_IMAGE}
-          imagePullPolicy: Always
+          image: {{ .Values.rover.image }}
+          imagePullPolicy: IfNotPresent
           securityContext:
             capabilities:
               add:
@@ -53,13 +55,13 @@ spec:
                 fieldRef:
                   fieldPath: spec.nodeName
             - name: ROVER_BACKEND_ADDR
-              value: ${BACKEND_SERVICE}:11800
+              value: {{ template "skywalking.collector.address" . }}
             - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_SERVICE_NAME
-              value: mesh-svr::{{.Pod.LabelValue "service.istio.io/canonical-name,app.kubernetes.io/name,app"}}
+              value: mesh-svr::{{"{{"}}.Pod.LabelValue "service.istio.io/canonical-name,app.kubernetes.io/name,app"{{"}}"}}
             - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_SERVICE_NAME
-              value: mesh-svr::{{.Pod.LabelValue "service.istio.io/canonical-name,app.kubernetes.io/name,app"}}
+              value: mesh-svr::{{"{{"}}.Pod.LabelValue "service.istio.io/canonical-name,app.kubernetes.io/name,app"{{"}}"}}
             - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_NAME
-              value: skywalking-showcase::{{.Pod.ServiceName}}.{{.Pod.Namespace}}
+              value: skywalking-showcase::{{"{{"}}.Pod.ServiceName{{"}}"}}.{{"{{"}}.Pod.Namespace{{"}}"}}
             - name: ROVER_HOST_MAPPING
               value: /host
       hostPID: true
@@ -69,4 +71,6 @@ spec:
         - name: host
           hostPath:
             path: /
-            type: Directory
\ No newline at end of file
+            type: Directory
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-so11y/open-telemetry.yaml b/deploy/platform/kubernetes/templates/feature-so11y/open-telemetry.yaml
similarity index 98%
rename from deploy/platform/kubernetes/feature-so11y/open-telemetry.yaml
rename to deploy/platform/kubernetes/templates/feature-so11y/open-telemetry.yaml
index afa7832..d3c336f 100644
--- a/deploy/platform/kubernetes/feature-so11y/open-telemetry.yaml
+++ b/deploy/platform/kubernetes/templates/feature-so11y/open-telemetry.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.so11y.enabled }}
 
 # @feature: so11y; in Kubernetes, it's better to set service discovery so the OAP instances are not always "localhost:1234"
 
@@ -97,3 +98,5 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-so11y/permissions.yaml b/deploy/platform/kubernetes/templates/feature-so11y/permissions.yaml
similarity index 93%
rename from deploy/platform/kubernetes/feature-so11y/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-so11y/permissions.yaml
index bfdc6e5..7df3a3b 100644
--- a/deploy/platform/kubernetes/feature-so11y/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-so11y/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.so11y.enabled }}
+
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -44,4 +46,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-so11y
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-trace-profiling/profiling.yaml b/deploy/platform/kubernetes/templates/feature-trace-profiling/profiling.yaml
similarity index 82%
rename from deploy/platform/kubernetes/feature-trace-profiling/profiling.yaml
rename to deploy/platform/kubernetes/templates/feature-trace-profiling/profiling.yaml
index 797da6c..f065988 100644
--- a/deploy/platform/kubernetes/feature-trace-profiling/profiling.yaml
+++ b/deploy/platform/kubernetes/templates/feature-trace-profiling/profiling.yaml
@@ -16,10 +16,13 @@
 # under the License.
 #
 
+{{- if .Values.features.traceProfiling.enabled }}
+
 apiVersion: batch/v1
 kind: CronJob
 metadata:
   name: trace-profiling-trgigger
+  namespace: {{ .Values.sampleServices.namespace }}
 spec:
   schedule: "8 0 * * *"
   successfulJobsHistoryLimit: 1
@@ -33,11 +36,13 @@ spec:
         spec:
           containers:
             - name: trace-profiling-trigger
-              image: ${SW_CLI_IMAGE}
+              image: "{{ .Values.swctl.image }}"
               command:
                 - /bin/sh
                 - -c
                 - >
-                  /swctl --base-url=http://oap:12800/graphql profiling trace create --service-name agent::songs \
+                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling trace create --service-name agent::songs \
                     --endpoint-name GET:/songs --duration=15 --min-duration-threshold=0 --dump-period=10 --max-sampling-count=9
           restartPolicy: Never
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-vm/open-telemetry.yaml b/deploy/platform/kubernetes/templates/feature-vm-monitor/open-telemetry.yaml
similarity index 98%
rename from deploy/platform/kubernetes/feature-vm/open-telemetry.yaml
rename to deploy/platform/kubernetes/templates/feature-vm-monitor/open-telemetry.yaml
index a1996da..06126e0 100644
--- a/deploy/platform/kubernetes/feature-vm/open-telemetry.yaml
+++ b/deploy/platform/kubernetes/templates/feature-vm-monitor/open-telemetry.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.vmMonitor.enabled }}
 
 # @feature: vm; set OpenTelemetry config to scrape the VM metrics
 ---
@@ -94,3 +95,5 @@ spec:
             items:
               - key: otel-collector-config
                 path: otel-collector-config.yaml
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-vm/permissions.yaml b/deploy/platform/kubernetes/templates/feature-vm-monitor/permissions.yaml
similarity index 93%
rename from deploy/platform/kubernetes/feature-vm/permissions.yaml
rename to deploy/platform/kubernetes/templates/feature-vm-monitor/permissions.yaml
index 02fb039..bae8a37 100644
--- a/deploy/platform/kubernetes/feature-vm/permissions.yaml
+++ b/deploy/platform/kubernetes/templates/feature-vm-monitor/permissions.yaml
@@ -15,6 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.vmMonitor.enabled }}
+
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -44,4 +46,6 @@ roleRef:
 subjects:
   - kind: ServiceAccount
     name: otel-sa-vm
-    namespace: ${NAMESPACE}
+    namespace: {{ .Release.Namespace }}
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/feature-vm/vm.yaml b/deploy/platform/kubernetes/templates/feature-vm-monitor/vm.yaml
similarity index 96%
rename from deploy/platform/kubernetes/feature-vm/vm.yaml
rename to deploy/platform/kubernetes/templates/feature-vm-monitor/vm.yaml
index b7844e1..c5b2f05 100644
--- a/deploy/platform/kubernetes/feature-vm/vm.yaml
+++ b/deploy/platform/kubernetes/templates/feature-vm-monitor/vm.yaml
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+{{- if .Values.features.vmMonitor.enabled }}
 
 # @feature: pretend these Pods are virtual machines
 
@@ -59,3 +60,5 @@ spec:
           ports:
             - containerPort: 9100
               name: metrics
+
+{{- end }}
diff --git a/deploy/platform/kubernetes/values.yaml b/deploy/platform/kubernetes/values.yaml
new file mode 100644
index 0000000..e77ea11
--- /dev/null
+++ b/deploy/platform/kubernetes/values.yaml
@@ -0,0 +1,259 @@
+# 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.
+
+skywalking-helm:
+  fullnameOverride: "sw-demo"
+  oap:
+    name: oap
+    image:
+      repository: ghcr.io/apache/skywalking/oap
+      tag: af657356ed61c2595d70dd18eae5a6e5dbc39a82
+      pullPolicy: IfNotPresent
+    replicas: 1
+    storageType: ~
+    env:
+      SW_HEALTH_CHECKER: default
+      SW_OTEL_RECEIVER: default # @feature: so11y;,mysql;kubernetes-monitor enable OpenTelemetry receiver to receive OpenTelemetry metrics
+      # @feature: vm; enable vm rules to analyze VM metrics
+      # @feature: so11y; enable oap rules to analyze OAP metrics
+      # @feature: kubernetes-monitor; enable rules to analyze Kubernetes Cluster/Node/Service metrics
+      # @feature: istiod-monitor; enable rules to analyze Istio control plane metrics
+      # @feature: mysql; enable mysql rules to analyze MySQL metrics
+      # @feature: apisix-monitor; enable APISIX rules to analyze APISIX metrics
+      SW_OTEL_RECEIVER_ENABLED_OTEL_RULES: vm,oap,k8s/*,istio-controlplane,mysql/*,postgresql/*,apisix
+      SW_TELEMETRY: prometheus # @feature: so11y; expose the metrics of self o11y through prometheus
+      SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS: "mx-mesh,persistence" # @feature: als; enable mesh analyzer (mx-mesh) to analyze ALS logs
+      K8S_SERVICE_NAME_RULE: "mesh-svr::${service.metadata.name}"
+      SW_CONFIGURATION: k8s-configmap
+      SW_ENVOY_METRIC_ALS_TCP_ANALYSIS: "mx-mesh"
+      SW_ENABLE_UPDATE_UI_TEMPLATE: "false"
+      SW_SLOW_DB_THRESHOLD: default:0,mongodb:100
+      SW_ENABLE_ON_DEMAND_POD_LOG: "true"
+      SW_METER_ANALYZER_ACTIVE_FILES: datasource,threadpool,satellite,network-profiling,spring-sleuth
+      SW_STORAGE_ES_RESPONSE_TIMEOUT: "50000"
+      SW_STORAGE_ES_INDEX_SHARDS_NUMBER: "6"
+      SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR: "2"
+      SW_RECEIVER_ZIPKIN: default
+      SW_QUERY_ZIPKIN: default
+
+    config:
+      metadata-service-mapping.yaml: |
+        serviceName: mesh-svr::${LABELS."service.istio.io/canonical-name",LABELS."app.kubernetes.io/name",LABELS.app}
+        serviceInstanceName: ${NAME}
+      alarm-settings.yml: |
+        rules:
+          service_resp_time_rule:
+            metrics-name: service_resp_time
+            threshold: 20 # 20ms is just for demo
+            op: ">"
+            period: 5
+            count: 1
+            message: Response time of service {name} is more than 20ms.
+      core.default.log4j-xml: |-
+        <Configuration status="WARN">
+           <Appenders>
+             <Console name="Console" target="SYSTEM_OUT">
+               <PatternLayout charset="UTF-8" pattern="%d - %c - %L [%t] %-5p %x - %m%n"/>
+             </Console>
+           </Appenders>
+           <Loggers>
+             <logger name="io.grpc.netty" level="INFO"/>
+             <logger name="org.apache.skywalking.oap.server.configuration.api" level="TRACE"/>
+             <logger name="org.apache.skywalking.oap.server.configuration.configmap" level="DEBUG"/>
+             <logger name="org.apache.skywalking.oap.server.storage.plugin.jdbc" level="DEBUG"/>
+             <Root level="INFO">
+               <AppenderRef ref="Console"/>
+             </Root>
+            </Loggers>
+        </Configuration>
+  ui:
+    name: ui
+    replicas: 1
+    image:
+      repository: ghcr.io/apache/skywalking/ui
+      tag: af657356ed61c2595d70dd18eae5a6e5dbc39a82
+      pullPolicy: IfNotPresent
+
+  elasticsearch:
+    enabled: false
+
+  postgresql:
+    enabled: false # Whether to start a demo postgresql deployment, don't use this for production.
+    config:
+      # The hostname of your own postgresql service, this only takes effect when postgresql.enabled is false.
+      host: postgresql-service.your-awesome-company.com
+    auth:
+      username: postgres
+      password: "123456"
+      postgresPassword: "123456"
+      database: skywalking
+    containerPorts:
+      postgresql: 5432
+    primary:
+      persistence:
+        enabled: false
+    readReplicas:
+      persistence:
+        enabled: false
+
+  satellite:
+    name: satellite
+    replicas: 1
+    enabled: true
+    image:
+      repository: ghcr.io/apache/skywalking-satellite/skywalking-satellite
+      tag: v672ec32414c38f3589124c6131b0b4473cda0de5
+      pullPolicy: IfNotPresent
+    ports:
+      grpc: 11800
+      prometheus: 1234
+    env:
+      SATELLITE_TELEMETRY_EXPORT_TYPE: metrics_service
+    podAnnotations:
+      sidecar.istio.io/inject: "false"
+
+rover:
+  image: ghcr.io/apache/skywalking-rover/skywalking-rover:668abb2fbc38250d2bd825e62ec5678bb8017864
+
+eventExporter:
+  image: ghcr.io/apache/skywalking-kubernetes-event-exporter/skywalking-kubernetes-event-exporter:8a012a3f968cb139f817189afb9b3748841bba22
+
+swctl:
+  image: ghcr.io/apache/skywalking-cli/skywalking-cli:0883266bfaa36612927b69e35781b64ea181758d
+
+sampleServices:
+  hub: ~
+  tag: ~
+  namespace: sample-services
+
+grafana:
+  image: grafana/grafana:9.1.0
+
+# @feature: java-agent-injector; enable java agent injector and set the java agent image
+agentInjector:
+  enabled: false
+  javaImage: ghcr.io/apache/skywalking-java/skywalking-java:51161ae6a5b8e266eef39162cc4e23440d36ab38-java8
+
+# @feature: java-agent-injector; the java agent injector is a component of the swck operator, so we need to deploy the swck operator firstly
+skywalking-helm-swck-operator:
+  image:
+    repository: docker.io/apache/skywalking-swck
+    tag: v0.7.0
+  # @feature: java-agent-injector; the swck operator depends on the certificate management of the cert-manager
+  cert-manager:
+    enabled: true
+  fullnameOverride: "swck-demo"
+
+# @feature: function; install open function resources
+openfunction:
+  enabled: false
+  global:
+    ShipwrightBuild:
+      enabled: false
+    TektonPipelines:
+      enabled: false
+    Keda:
+      enabled: false
+    Dapr:
+      enabled: false
+  contour:
+    envoy:
+      useHostPort: false
+      service:
+        type: ClusterIP
+        externalTrafficPolicy: ""
+
+istio:
+  enabled: false
+
+base:
+  global:
+    istioNamespace: demo
+
+istiod:
+  global:
+    istioNamespace: demo
+  meshConfig:
+    enableEnvoyAccessLogService: false
+    enableTracing: false
+    defaultConfig:
+      tracing:
+        sampling: 100
+        zipkin:
+          address: ~
+      envoyMetricsService:
+        address: ~
+      envoyAccessLogService:
+        address: ~
+      proxyStatsMatcher:
+        inclusionRegexps:
+          - ".*membership_healthy.*"
+          - ".*upstream_cx_active.*"
+          - ".*upstream_cx_total.*"
+          - ".*upstream_rq_active.*"
+          - ".*upstream_rq_total.*"
+          - ".*upstream_rq_pending_active.*"
+          - ".*lb_healthy_panic.*"
+          - ".*upstream_cx_none_healthy.*"
+
+# @feature: kubernetes-monitor; extra resources to install for kubernetes monitoring, standard kube-state-metrics
+kube-state-metrics:
+  enabled: false
+
+features:
+  kubernetesMonitor:
+    enabled: false
+
+  mysqlMonitor:
+    enabled: false
+
+  postgresqlMonitor:
+    enabled: false
+
+  event:
+    enabled: false
+
+  istiodMonitor:
+    enabled: false
+
+  apisixMonitor:
+    enabled: false
+
+  traceProfiling:
+    enabled: false
+
+  rover:
+    enabled: false
+
+  vmMonitor:
+    enabled: false
+
+  promql:
+    enabled: false
+
+  function:
+    enabled: false
+
+  so11y:
+    enabled: false
+
+  als:
+    enabled: false
+
+  meshWithAgent:
+    enabled: false
+
+  agent:
+    enabled: false
diff --git a/docs/readme.md b/docs/readme.md
index cd99032..83a346c 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -92,7 +92,7 @@ Currently, the features supported are:
 | `single-node`         | Deploy only one single node of SkyWalking OAP, and SkyWalking UI, ElasticSearch as storage.                                                                                            | Only one of `cluster` or `single-node` can be enabled.                                                                                |
 | `elasticsearch`       | Deploy a single-node ElasticSearch as storage, you may want to disable this if you want to use your own ElasticSearch deployments.                                                     |                                                                                                                                       |
 | `so11y`               | Enable SkyWalking self observability.                                                                                                                                                  | This is enabled by default for platform [Docker Compose](#docker-compose).                                                            |
-| `vm`                  | Start 2 virtual machines and export their metrics to SkyWalking.                                                                                                                       | The "virtual machines" are mimicked by Docker containers or Pods.                                                                     |
+| `vm-monitor`          | Start 2 virtual machines and export their metrics to SkyWalking.                                                                                                                       | The "virtual machines" are mimicked by Docker containers or Pods.                                                                     |
 | `als`                 | Start microservices WITHOUT SkyWalking agent enabled, and configure SkyWalking to analyze the topology and metrics from their access logs.                                             | Command `istioctl` is required to run this feature. The agentless microservices will be running at namespace `${NAMESPACE}-agentless` |
 | `kubernetes-monitor`  | Deploy OpenTelemetry and export Kubernetes monitoring metrics to SkyWalking for analysis and display on UI.                                                                            |                                                                                                                                       |
 | `istiod-monitor`      | Deploy OpenTelemetry and export Istio control plane metrics to SkyWalking for analysis and display on UI.                                                                              |                                                                                                                                       |
@@ -101,11 +101,11 @@ Currently, the features supported are:
 | `function`            | Deploy [OpenFunction](https://openfunction.dev/) and export trace to SkyWalking.                                                                                                       | Command `helm` is required to run this feature.                                                                                       |
 | `trace-profiling`     | Deploy tools to submit trace profiling tasks.                                                                                                                                          | Only support deployment with SkyWalking agents installed, currently Java agent and Python agent support trace profiling.              |
 | `rover`               | Deploy SkyWalking Rover and detect the processes in the Kubernetes environment.                                                                                                        | Only support deployment in the Kubernetes environment, docker is not supported.                                                       |
-| `mysql`               | Start a MySQL server and load generator to execute the sample SQLs periodically, set up fluent bit to fetch slow logs and export to OAP, and export their metrics to SkyWalking.       |                                                                                                                                       |
-| `postgresql`          | Start a PostgreSQL server, and load generator to execute the sample SQLs periodically, set up fluent bit to fetch slow logs and export to OAP, and export their metrics to SkyWalking. |                                                                                                                                       |
+| `mysql-monitor`       | Start a MySQL server and load generator to execute the sample SQLs periodically, set up fluent bit to fetch slow logs and export to OAP, and export their metrics to SkyWalking.       |                                                                                                                                       |
+| `postgresql-monitor`  | Start a PostgreSQL server, and load generator to execute the sample SQLs periodically, set up fluent bit to fetch slow logs and export to OAP, and export their metrics to SkyWalking. |                                                                                                                                       |
 | `apisix-monitor`      | Deploy OpenTelemetry and export APISIX metrics to SkyWalking for analysis and display on UI                                                                                            |                                                                                                                                       |
 | `mesh-with-agent`     | Deploy services with java agent in the service mesh environment.                                                                                                                       | Only support deployment in the Kubernetes environment, docker is not supported.                                                       |
-| `promql`              | Deploy a Grafana to use promql service and show SkyWalking UI on the Grafana.                                                                                                          | Feel free to modify the Grafana config when deploy your own environment.                                                                                    |
+| `promql`              | Deploy a Grafana to use promql service and show SkyWalking UI on the Grafana.                                                                                                          | Feel free to modify the Grafana config when deploy your own environment.                                                              |
 
 ### Kubernetes
 
diff --git a/scripts/wait-cert-manager-ready.sh b/scripts/wait-cert-manager-ready.sh
deleted file mode 100644
index 2067170..0000000
--- a/scripts/wait-cert-manager-ready.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/bash
-
-# 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.
-#
-
-TIMEOUT=120
-
-MANIFEST=$(mktemp)
-
-cat << EOF > $MANIFEST
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
-  name: test-selfsigned
-  namespace: default
-spec:
-  selfSigned: {}
----
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  name: selfsigned-cert
-  namespace: default
-spec:
-  dnsNames:
-    - example.com
-  secretName: selfsigned-cert-tls
-  issuerRef:
-    name: test-selfsigned
-EOF
-
-( bash -c -- "\
-    while ! kubectl apply -f $MANIFEST 2> /dev/null; \
-    do \
-      sleep 0.1; \
-    done" ) & pid=$!
-( sleep $TIMEOUT && pkill -HUP $pid ) 2>/dev/null & watcher=$!
-if wait $pid 2>/dev/null; then
-    pkill -HUP -P $watcher
-    wait $watcher
-fi
-
-# make sure the dummy Issuer and Certificate will be deleted
-trap "kubectl delete -f $MANIFEST; rm $MANIFEST" 0 2 3 15