Files
im_server/deploy/argocd/im-server-test

im-server-test ArgoCD patch

The live StatefulSet is owned by the ArgoCD Application im-server-test. Copy statefulset-performance-patch.yaml into that application's Git source and reference it from the test overlay:

patches:
  - path: statefulset-performance-patch.yaml

Also include backend-debug-metrics-rbac.yaml as a resource in the test overlay. It grants the existing argocd/backend-debug service account namespaced read access to Pod metrics so the load-test collector can run kubectl top pods -n im-server-system:

resources:
  - backend-debug-metrics-rbac.yaml

After ArgoCD sync, verify the effective configuration:

kubectl -n im-server-system get statefulset im-server -o jsonpath='{.spec.template.spec.containers[0].resources}'
kubectl -n im-server-system get statefulset im-server -o jsonpath='{.spec.template.spec.containers[0].livenessProbe.httpGet.path}'
kubectl -n im-server-system get statefulset im-server -o jsonpath='{.spec.template.spec.containers[0].env}'
kubectl -n im-server-system get statefulset im-server -o jsonpath='{.spec.template.spec.dnsConfig.options}'
kubectl auth can-i list pods.metrics.k8s.io \
  --as=system:serviceaccount:argocd:backend-debug \
  -n im-server-system

Expected values are requests 2 CPU / 512Mi, limits 2 CPU / 1Gi, and liveness path /livez. The MySQL pool environment must be MYSQL_MAX_OPEN_CONNS=24, MYSQL_MAX_IDLE_CONNS=8, MYSQL_REGISTRY_MAX_OPEN_CONNS=4, and MYSQL_REGISTRY_MAX_IDLE_CONNS=2. The MySQL connection lifetime must be MYSQL_CONN_MAX_LIFETIME_SECONDS=1800. The WebSocket heartbeat environment must be WS_PING_PERIOD_SECONDS=15 and WS_PONG_WAIT_SECONDS=90. The Pod DNS options must be ndots:1, timeout:2, and attempts:2. Keeping ClusterFirst preserves short Kubernetes service-name resolution, while the lower ndots value prevents fully qualified internal and external dependency names from being expanded through every cluster search suffix first. The application repository's deploy workflow waits for reconciliation and fails if ArgoCD restores different values.

After the rollout, verify the generated resolver configuration on every Pod:

for pod in im-server-0 im-server-1 im-server-2; do
  echo "--- ${pod}"
  kubectl -n im-server-system exec "${pod}" -- cat /etc/resolv.conf
done

The output must retain the cluster DNS nameserver and search domains, with options ndots:1 timeout:2 attempts:2. This mitigation reduces amplified DNS traffic from the application Pods. If lookup timeouts remain under load, CoreDNS capacity or NodeLocal DNSCache must be changed in the cluster infrastructure repository by an administrator with kube-system access.