# 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: ```yaml 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`: ```yaml resources: - backend-debug-metrics-rbac.yaml ``` After ArgoCD sync, verify the effective configuration: ```bash 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 `1 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 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: ```bash 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.