42 lines
1.7 KiB
Bash
42 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NS=dsh-poc
|
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
kubectl create namespace "$NS" --dry-run=client -o yaml | kubectl apply -f - >/dev/null
|
|
kubectl apply -f "$HERE/cluster.yaml" >/dev/null
|
|
|
|
echo "== wait for CloudNativePG cluster ready (3 instances) =="
|
|
READY=0
|
|
for _ in $(seq 1 72); do
|
|
READY="$(kubectl get -n "$NS" cluster dsh-pg-poc -o jsonpath='{.status.readyInstances}' 2>/dev/null || echo 0)"
|
|
[ "$READY" = "3" ] && break
|
|
sleep 5
|
|
done
|
|
if [ "$READY" != "3" ]; then
|
|
echo "FAIL: cluster not ready in time (readyInstances=$READY)"
|
|
kubectl get -n "$NS" cluster dsh-pg-poc -o yaml
|
|
exit 1
|
|
fi
|
|
echo "PASS: cluster ready (3 instances)"
|
|
|
|
PGHOST=dsh-pg-poc-rw
|
|
PGUSER="$(kubectl get -n "$NS" secret dsh-pg-poc-app -o jsonpath='{.data.username}' | base64 -d)"
|
|
PGPASSWORD="$(kubectl get -n "$NS" secret dsh-pg-poc-app -o jsonpath='{.data.password}' | base64 -d)"
|
|
PGDATABASE="$(kubectl get -n "$NS" secret dsh-pg-poc-app -o jsonpath='{.data.dbname}' | base64 -d)"
|
|
|
|
echo "== pgbench init (scale 5) =="
|
|
kubectl run -n "$NS" pgbench-init --rm -i --restart=Never --image=postgres:16 \
|
|
--env "PGHOST=$PGHOST" --env "PGUSER=$PGUSER" --env "PGPASSWORD=$PGPASSWORD" --env "PGDATABASE=$PGDATABASE" \
|
|
-- pgbench -i -s 5 2>&1 | tail -3
|
|
|
|
echo
|
|
echo "== pgbench select-only (30s, c4/j2) =="
|
|
kubectl run -n "$NS" pgbench-run --rm -i --restart=Never --image=postgres:16 \
|
|
--env "PGHOST=$PGHOST" --env "PGUSER=$PGUSER" --env "PGPASSWORD=$PGPASSWORD" --env "PGDATABASE=$PGDATABASE" \
|
|
-- pgbench -S -T 30 -c 4 -j 2 2>&1 | grep -E 'latency average|including connections establishing' || true
|
|
|
|
echo
|
|
echo "记录上面的 tps / latency average 作为 Longhorn 上的基线(对照节点 NVMe 判断 §4.5 是否可接受)"
|