diff --git a/README.md b/README.md
index eaac8013..af2b2ba4 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,6 @@ Please see below for links and descriptions of each component:
 - [fluentbit](https://github.com/drycc/fluentbit) - Backend log shipping mechanism for `drycc logs`
 - [database](https://github.com/drycc/database) - Central database based on PostgreSQL
 - [registry](https://github.com/drycc/registry) - The Container registry
-- [logger](https://github.com/drycc/logger) - The (in-memory) log buffer for `drycc logs`
 - [grafana](https://github.com/drycc/grafana) - Central monitor grafana
 - [victoriametrics](https://github.com/drycc/victoriametrics) - The monitor database
 - [storage](https://github.com/drycc/storage) - The in-cluster, kubernetes storage, s3 api compatible, hybrid storage system.
diff --git a/charts/workflow/Chart.yaml b/charts/workflow/Chart.yaml
index 7147caa5..41910932 100755
--- a/charts/workflow/Chart.yaml
+++ b/charts/workflow/Chart.yaml
@@ -16,7 +16,7 @@ dependencies:
 - name: gateway
   repository: {{repository}}
   version: x.x.x
-- name: logger
+- name: quickwit
   repository: {{repository}}
   version: x.x.x
 - name: valkey
diff --git a/charts/workflow/values.yaml b/charts/workflow/values.yaml
index d1091e87..3bd11487 100644
--- a/charts/workflow/values.yaml
+++ b/charts/workflow/values.yaml
@@ -7,11 +7,6 @@
 global:
   # Admin email, used for each component to send email to administrator
   email: "drycc@drycc.cc"
-  # A domain name consists of one or more parts.
-  # Periods (.) are used to separate these parts.
-  # Each part must be 1 to 63 characters in length and can contain lowercase letters, digits, and hyphens (-).
-  # It must start and end with a lowercase letter or digit.
-  clusterDomain: "cluster.local"
   # The publicly resolvable hostname to build your cluster with.
   #
   # This will be the hostname that is used to build endpoints such as "drycc.$HOSTNAME"
@@ -75,32 +70,20 @@ valkey:
 
 storage:
   enabled: true
-  # The following parameters are configured only when using an off-cluster Storage instance
-  lookup: path
-  endpoint: ""
   # The following parameters are general parameters
   accesskey: ""
   secretkey: ""
+  persistence:
+    enabled: false
+    size: 5Gi
+    storageClass: ""
 
 grafana:
   enabled: true
-  # Configure the following ONLY if you want persistence for on-cluster grafana
-  # GCP PDs and EBS volumes are supported only
   persistence:
-    enabled: false # Set to true to enable persistence
-    accessMode: ReadWriteOnce
-    size: 5Gi # PVC size
-    ## grafana data Persistent Volume Storage Class
-    ## If defined, storageClassName: <storageClass>
-    ## If set to "-", storageClassName: "", which disables dynamic provisioning
-    ## If undefined (the default) or set to null, no storageClassName spec is
-    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-    ##   GKE, AWS & OpenStack)
-    ##
-    ## Storage class of PV to bind. By default it looks for standard storage class.
-    ## If the PV uses a different storage class, specify that here.
+    enabled: false
+    size: 5Gi
     storageClass: ""
-    volumeName: ""
 
 registry:
   enabled: true
@@ -136,17 +119,8 @@ database:
   user: ""
   password: ""
   persistence:
-    enabled: false # Set to true to enable persistence
-    size: 5Gi # PVC size
-    ## database data Persistent Volume Storage Class
-    ## If defined, storageClassName: <storageClass>
-    ## If set to "-", storageClassName: "", which disables dynamic provisioning
-    ## If undefined (the default) or set to null, no storageClassName spec is
-    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-    ##   GKE, AWS & OpenStack)
-    ##
-    ## Storage class of PV to bind. By default it looks for standard storage class.
-    ## If the PV uses a different storage class, specify that here.
+    enabled: false
+    size: 5Gi
     storageClass: ""
 
 victoriametrics:
diff --git a/install.sh b/install.sh
index 38d33930..04bfae4f 100755
--- a/install.sh
+++ b/install.sh
@@ -6,7 +6,6 @@ shopt -s expand_aliases
 GATEWAY_CLASS="istio"
 CLUSTER_CIDR=${CLUSTER_CIDR:-"10.42.0.0/16"}
 SERVICE_CIDR=${SERVICE_CIDR:-"10.43.0.0/16"}
-CLUSTER_DOMAIN=${CLUSTER_DOMAIN:-"cluster.local"}
 CERT_MANAGER_ENABLED="${CERT_MANAGER_ENABLED:-false}"
 DRYCC_REGISTRY="${DRYCC_REGISTRY:-registry.drycc.cc}"
 CHARTS_URL=oci://registry.drycc.cc/$([ "$CHANNEL" == "stable" ] && echo charts || echo charts-testing)
@@ -64,12 +63,23 @@ urlencode() {
 }
 
 function install_helm {
+  echo -e "\\033[32m---> Start install helm\\033[0m"
   if [[ "${INSTALL_DRYCC_MIRROR}" == "cn" ]] ; then
-    version=$(curl -Ls https://github.com/helm/helm/releases|grep /helm/helm/releases/tag/ | sed -E 's/.*\/helm\/helm\/releases\/tag\/(v[0-9\.]{1,}(-rc.[0-9]{1,})?)".*/\1/g' | head -1)
+    version=$(curl -Ls https://github.com/helm/helm/releases \
+      | grep -o 'href="/helm/helm/releases/tag/v[^"]*"' \
+      | sed 's|href="/helm/helm/releases/tag/||; s/"$//' \
+      | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
+      | sort -Vr \
+      | head -1)
     tar_name="helm-${version}-linux-${ARCH}.tar.gz"
     helm_download_url="https://github.com/helm/${tar_name}"
   else
-    version=$(curl -Ls https://github.com/helm/helm/releases|grep /helm/helm/releases/tag/ | sed -E 's/.*\/helm\/helm\/releases\/tag\/(v[0-9\.]{1,}(-rc.[0-9]{1,})?)".*/\1/g' | head -1)
+    version=$(curl -Ls https://github.com/helm/helm/releases \
+      | grep -o 'href="/helm/helm/releases/tag/v[^"]*"' \
+      | sed 's|href="/helm/helm/releases/tag/||; s/"$//' \
+      | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
+      | sort -Vr \
+      | head -1)
     tar_name="helm-${version}-linux-${ARCH}.tar.gz"
     helm_download_url="https://get.helm.sh/${tar_name}"
   fi
@@ -77,42 +87,41 @@ function install_helm {
   tar -zxvf "${tar_name}"
   mv "linux-${ARCH}/helm" /usr/local/bin/helm
   rm -rf "${tar_name}" "linux-${ARCH}"
+  echo -e "\\033[32m---> crun runtime install completed!\\033[0m"
 }
 
 function configure_os {
   echo -e "\\033[32m---> Start configuring kernel parameters\\033[0m"
   if [[ "$(command -v iptables)" != "" ]] ; then
-    iptables -F
-    iptables -X
-    iptables -F -t nat
-    iptables -X -t nat
-    iptables -P FORWARD ACCEPT
+    iptables -F || echo -e "\\033[33m---> Warning: iptables -F failed, skipping (container environment?)\\033[0m"
+    iptables -X || echo -e "\\033[33m---> Warning: iptables -X failed, skipping\\033[0m"
+    iptables -F -t nat || echo -e "\\033[33m---> Warning: iptables -F -t nat failed, skipping\\033[0m"
+    iptables -X -t nat || echo -e "\\033[33m---> Warning: iptables -X -t nat failed, skipping\\033[0m"
+    iptables -P FORWARD ACCEPT || echo -e "\\033[33m---> Warning: iptables -P FORWARD ACCEPT failed, skipping\\033[0m"
   else
-    # Kube hostport depends on iptables
-    echo -e "\\033[33m---> The iptables does not exist...\\033[0m"
-    exit 1
+    echo -e "\\033[33m---> Warning: iptables does not exist, skipping iptables configuration...\\033[0m"
   fi
-  swapoff -a
-  sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
-  mount bpffs -t bpf /sys/fs/bpf
+  swapoff -a 2>/dev/null || true
+  sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 2>/dev/null || true
+  mount bpffs -t bpf /sys/fs/bpf 2>/dev/null || echo -e "\\033[33m---> Warning: mount bpffs failed, skipping (container environment?)\\033[0m"
   rmem_max=$(sysctl -ne net.core.rmem_max)
   if [ ! -n "$rmem_max" ] || [ 2500000 -gt $rmem_max ] ;then
-    echo 'net.core.rmem_max = 2500000' >> /etc/sysctl.conf
+    echo 'net.core.rmem_max = 2500000' >> /etc/sysctl.conf 2>/dev/null || true
   fi
   nr_hugepages=$(sysctl -ne vm.nr_hugepages)
   if [ ! -n "$nr_hugepages" ] || [ 1024 -gt $nr_hugepages ] ;then
-    echo 'vm.nr_hugepages = 1024' >> /etc/sysctl.conf
+    echo 'vm.nr_hugepages = 1024' >> /etc/sysctl.conf 2>/dev/null || true
   fi
   max_user_instances=$(sysctl -ne fs.inotify.max_user_instances)
   if [ ! -n "$max_user_instances" ] || [ 65535 -gt $max_user_instances ] ;then
-    echo 'fs.inotify.max_user_instances = 65535' >> /etc/sysctl.conf
+    echo 'fs.inotify.max_user_instances = 65535' >> /etc/sysctl.conf 2>/dev/null || true
   fi
-  sysctl -p
+  sysctl -p 2>/dev/null || echo -e "\\033[33m---> Warning: sysctl -p failed, skipping (container environment?)\\033[0m"
 
   cpufreq=$(ls /sys/devices/system/cpu/cpu*/cpufreq >/dev/null 2>&1 || echo "false")
   if [[ $cpufreq != "false" ]]; then
     for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
-      echo performance > $cpu
+      echo performance > $cpu 2>/dev/null || true
     done
   fi
   echo -e "\\033[32m---> Configuring kernel parameters finish\\033[0m"
@@ -141,11 +150,11 @@ function install_kata_runtime {
   fi
 
   kata_version=$(curl -Ls ${kata_base_url}/kata-containers/releases|grep /kata-containers/kata-containers/releases/tag/ | sed -E 's/.*\/kata-containers\/kata-containers\/releases\/tag\/([0-9\.]{1,}(-rc.[0-9]{1,})?)".*/\1/g' | head -1)
-  kata_package=kata-static-${kata_version}-${ARCH}.tar.xz
+  kata_package=kata-static-${kata_version}-${ARCH}.tar.zst
   kata_download_url=${kata_base_url}/kata-containers/releases/download/${kata_version}/${kata_package}
 
-  curl -sfL "${kata_download_url}" -o ${kata_package}
-  tar xvf ${kata_package} -C /
+  curl -fL "${kata_download_url}" -o ${kata_package}
+  tar -I zstd -xf ${kata_package} -C /
   ln -s /opt/kata/bin/containerd-shim-kata-v2 /usr/local/bin/containerd-shim-kata-v2
   ln -s /opt/kata/bin/kata-collect-data.sh /usr/local/bin/kata-collect-data.sh
   ln -s /opt/kata/bin/kata-runtime /usr/local/bin/kata-runtime
@@ -230,32 +239,42 @@ EOF
   fi
 }
 
+function configure_kubectl {
+  echo -e "\\033[32m---> Start configuring kubectl defaults\\033[0m"
+  mkdir -p "$HOME/.kube"
+  cat << EOF > "$HOME/.kube/kuberc"
+apiVersion: kubectl.config.k8s.io/v1beta1
+kind: Preference
+defaults:
+  # Default to server-side apply
+  - command: apply
+    options:
+      - name: server-side
+        default: "true"
+EOF
+  chmod 600 "$HOME/.kube/kuberc"
+  echo -e "\\033[32m---> Kubectl defaults configured (server-side apply enabled)\\033[0m"
+}
+
 function configure_k3s_mirrors {
   echo -e "\\033[32m---> Start configuring k3s mirrors\\033[0m"
   if [[ "${INSTALL_DRYCC_MIRROR}" == "cn" ]] ; then
     INSTALL_K3S_MIRROR="${INSTALL_DRYCC_MIRROR}"
     k3s_install_url="https://github.com/get-k3s/"
-    K3S_RELEASE_URL=https://github.com/k3s-io/k3s/releases
     export INSTALL_K3S_MIRROR
   else
     k3s_install_url="https://get.k3s.io"
-    K3S_RELEASE_URL=github.com/k3s-io/k3s/releases
-  fi
-  if [ -z "${INSTALL_K3S_VERSION}" ]; then
-    INSTALL_K3S_VERSION=$(curl -Ls "$K3S_RELEASE_URL" | grep /k3s-io/k3s/releases/tag/ | sed -E 's/.*\/k3s-io\/k3s\/releases\/tag\/(v[0-9\.]{1,}[rc0-9\-]{0,}%2Bk3s[0-9])".*/\1/g' | head -1)
-  else
-    INSTALL_K3S_VERSION=$(urlencode "$INSTALL_K3S_VERSION")
   fi
-  export INSTALL_K3S_VERSION
   echo -e "\\033[32m---> Configuring k3s mirrors finish\\033[0m"
 }
 
 function install_k3s_server {
   configure_os
   install_runtime
+  configure_kubectl
   configure_registry
   configure_k3s_mirrors
-  INSTALL_K3S_EXEC="server ${INSTALL_K3S_EXEC} --embedded-registry --flannel-backend=none  --disable-network-policy --disable=traefik --disable=servicelb --disable-kube-proxy --cluster-cidr=${CLUSTER_CIDR} --service-cidr=${SERVICE_CIDR} --cluster-domain=${CLUSTER_DOMAIN}"
+  INSTALL_K3S_EXEC="server ${INSTALL_K3S_EXEC} --embedded-registry --flannel-backend=none  --disable-network-policy --disable=traefik --disable=servicelb --disable-kube-proxy --cluster-cidr=${CLUSTER_CIDR} --service-cidr=${SERVICE_CIDR}"
   if [[ -n "${K3S_DATA_DIR}" ]] ; then
     INSTALL_K3S_EXEC="$INSTALL_K3S_EXEC --data-dir=${K3S_DATA_DIR}/rancher/k3s"
   fi
@@ -280,6 +299,7 @@ EOF
 function install_k3s_agent {
   configure_os
   install_runtime
+  configure_kubectl
   configure_registry
   configure_k3s_mirrors
   if [[ -n "${K3S_DATA_DIR}" ]] ; then
@@ -316,18 +336,22 @@ function install_mountpoint {
   helm repo update
 
   if [[ "${INSTALL_DRYCC_MIRROR}" == "cn" ]] ; then
-    mountpoint_api_url=https://github.com/drycc-addons/mountpoint-s3-csi-driver
+    mountpoint_api_url=https://github.com/drycc/mountpoint-s3-csi-driver
   else
-    mountpoint_api_url=https://github.com/drycc-addons/mountpoint-s3-csi-driver
+    mountpoint_api_url=https://github.com/drycc/mountpoint-s3-csi-driver
   fi
-  version=$(curl -Ls $mountpoint_api_url/releases|grep /drycc-addons/mountpoint-s3-csi-driver/releases/tag/ | sed -E 's/.*\/drycc-addons\/mountpoint-s3-csi-driver\/releases\/tag\/v([0-9\.]{1,}(-rc.[0-9]{1,})?)".*/\1/g' | head -1)
-
+  version=$(curl -Ls $mountpoint_api_url/releases|grep /drycc/mountpoint-s3-csi-driver/releases/tag/\
+    | grep -o 'href="/drycc/mountpoint-s3-csi-driver/releases/tag/[^"]*"' \
+    | sed 's|href="/drycc/mountpoint-s3-csi-driver/releases/tag/||; s/"$//' \
+    | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
+    | sort -Vr \
+    | head -1)
   helm upgrade --install aws-mountpoint-s3-csi-driver aws-mountpoint-s3-csi-driver/aws-mountpoint-s3-csi-driver \
-    --set experimental.podMounter=true \
-    --set image.repository=registry.drycc.cc/drycc-addons/mountpoint-s3-csi-driver \
-    --set image.tag=${version} \
+    --set supportLegacySystemDMounts=false \
+    --set image.repository=registry.drycc.cc/drycc/mountpoint-s3-csi-driver \
+    --set image.tag=${version#v} \
     --namespace kube-system $options --wait
-  echo -e "\\033[32m---> Longhorn install completed!\\033[0m"
+  echo -e "\\033[32m---> Mountpoint install completed!\\033[0m"
 }
 
 function check_metallb {
@@ -366,6 +390,7 @@ function install_network() {
     --set prometheus.enabled=true \
     --set operator.prometheus.enabled=true \
     --set envoy.enabled=false \
+    --set ipam.operator.clusterPoolIPv4MaskSize=${CLUSTER_POOL_IPV4_MASK_SIZE:-24} \
     --namespace kube-system $options --wait
   echo -e "\\033[32m---> Network install completed!\\033[0m"
 }
@@ -524,7 +549,6 @@ function install_drycc {
 
 cat << EOF > "/tmp/drycc-values.yaml"
 global:
-  clusterDomain: ${CLUSTER_DOMAIN}
   platformDomain: ${PLATFORM_DOMAIN}
   certManagerEnabled: ${CERT_MANAGER_ENABLED}
 
@@ -535,6 +559,9 @@ builder:
 gateway:
   gatewayClass: ${GATEWAY_CLASS}
 
+quickwit:
+  imageRegistry: ${DRYCC_REGISTRY}
+
 database:
   imageRegistry: ${DRYCC_REGISTRY}
   resources:
@@ -550,8 +577,6 @@ fluentbit:
   imageRegistry: ${DRYCC_REGISTRY}
 
 controller:
-  apiReplicas: ${CONTROLLER_API_REPLICAS:-1}
-  celeryReplicas: ${CONTROLLER_CELERY_REPLICAS:-1}
   webhookReplicas: ${CONTROLLER_WEBHOOK_REPLICAS:-1}
   imageRegistry: ${DRYCC_REGISTRY}
   appRuntimeClass: ${CONTROLLER_APP_RUNTIME_CLASS:-""}
@@ -559,6 +584,14 @@ controller:
   appStorageClass: ${CONTROLLER_APP_STORAGE_CLASS:-"longhorn"}
   filerImage: ${FILER_IMAGE}
   filerImagePullPolicy: ${FILER_IMAGE_PULL_POLICY}
+  api:
+    replicas: ${CONTROLLER_API_REPLICAS:-1}
+  celery:
+    replicas: ${CONTROLLER_CELERY_REPLICAS:-1}
+  metric:
+    replicas: ${CONTROLLER_METRIC_REPLICAS:-1}
+  mutate:
+    replicas: ${CONTROLLER_MUTATE_REPLICAS:-1}
 
 valkey:
   imageRegistry: ${DRYCC_REGISTRY}
@@ -580,10 +613,6 @@ storage:
 imagebuilder:
   imageRegistry: ${DRYCC_REGISTRY}
 
-logger:
-  replicas: ${LOGGER_REPLICAS:-1}
-  imageRegistry: ${DRYCC_REGISTRY}
-
 grafana:
   imageRegistry: ${DRYCC_REGISTRY}
   persistence:
@@ -689,7 +718,6 @@ function install_helmbroker {
   helm upgrade --install helmbroker $CHARTS_URL/helmbroker \
     --set valkey.enabled=false \
     --set gateway.gatewayClass=${GATEWAY_CLASS} \
-    --set global.clusterDomain=${CLUSTER_DOMAIN} \
     --set global.platformDomain=${PLATFORM_DOMAIN} \
     --set global.certManagerEnabled=${CERT_MANAGER_ENABLED} \
     --set persistence.size=${HELMBROKER_PERSISTENCE_SIZE:-5Gi} \
@@ -697,8 +725,9 @@ function install_helmbroker {
     --set username=${HELMBROKER_USERNAME} \
     --set password=${HELMBROKER_PASSWORD} \
     --set replicas=${HELMBROKER_REPLICAS} \
-    --set valkeyUrl=redis://:${VALKEY_PASSWORD}@drycc-valkey.drycc.svc.${CLUSTER_DOMAIN}:16379/11 \
-    --set celeryReplicas=${HELMBROKER_CELERY_REPLICAS} \
+    --set valkeyUrl=redis://:${VALKEY_PASSWORD}@drycc-valkey.drycc.svc:16379/11 \
+    --set api.replicas=${HELMBROKER_API_REPLICAS} \
+    --set celery.replicas=${HELMBROKER_CELERY_REPLICAS} \
     --namespace drycc-helmbroker --create-namespace $options --wait -f - <<EOF
 repositories:
 - name: drycc-helmbroker
@@ -719,7 +748,7 @@ metadata:
 spec:
   relistBehavior: Duration
   relistRequests: 5
-  url: http://${HELMBROKER_USERNAME}:${HELMBROKER_PASSWORD}@drycc-helmbroker.drycc-helmbroker.svc.${CLUSTER_DOMAIN}
+  url: http://${HELMBROKER_USERNAME}:${HELMBROKER_PASSWORD}@drycc-helmbroker.drycc-helmbroker.svc
 EOF
 
   echo -e "\\033[32m---> Helmbroker username: $HELMBROKER_USERNAME\\033[0m"
