10 PyPNM instances on one kind cluster (ports 8100–8109)¶
This scenario runs 10 isolated PyPNM instances (one per namespace) on a single VM and exposes each instance on a unique local port.
Diagram¶
Deploy 10 namespaces (parallel)¶
TAG="v1.1.19.0"
BASE_NS="pypnm-cmts"
REPLICAS="1"
COUNT="10"
export KUBECONFIG="${HOME}/.kube/config"
if ! kind get clusters | grep -q "^pypnm-dev$"; then
kind create cluster --name pypnm-dev
fi
kubectl config use-context kind-pypnm-dev
curl -fsSL https://raw.githubusercontent.com/PyPNMApps/PyPNM/main/tools/k8s/pypnm_k8s_remote_deploy.sh \
-o /tmp/pypnm_k8s_remote_deploy.sh
for i in $(seq 0 $((COUNT - 1))); do
NAMESPACE="${BASE_NS}-${i}"
bash /tmp/pypnm_k8s_remote_deploy.sh --create --tag "${TAG}" --namespace "${NAMESPACE}" --replicas ${REPLICAS} &
done
wait
Start port-forwards (8100–8109)¶
BASE_PORT="8100"
BASE_NS="pypnm-cmts"
COUNT="10"
LOG_DIR="/tmp/pypnm-portforward"
mkdir -p "${LOG_DIR}"
for i in $(seq 0 $((COUNT - 1))); do
NAMESPACE="${BASE_NS}-${i}"
PORT=$((BASE_PORT + i))
kubectl -n "${NAMESPACE}" port-forward deploy/pypnm-api ${PORT}:8000 \
>"${LOG_DIR}/${NAMESPACE}.log" 2>&1 &
echo $! >> "${LOG_DIR}/pids.txt"
done
Verify¶
BASE_PORT="8100"
COUNT="10"
for i in $(seq 0 $((COUNT - 1))); do
PORT=$((BASE_PORT + i))
STATUS="$(curl -s http://127.0.0.1:${PORT}/health | sed -n 's/.*"status":"\\([^"]*\\)".*/\\1/p')"
[ -z "${STATUS}" ] && STATUS="ok"
echo "127.0.0.1:${PORT} -> ${STATUS}"
done
Cleanup¶
BASE_NS="pypnm-cmts"
COUNT="10"
LOG_DIR="/tmp/pypnm-portforward"
if [ -f "${LOG_DIR}/pids.txt" ]; then
xargs -r kill < "${LOG_DIR}/pids.txt"
rm -f "${LOG_DIR}/pids.txt"
fi
for i in $(seq 0 $((COUNT - 1))); do
NAMESPACE="${BASE_NS}-${i}"
bash /tmp/pypnm_k8s_remote_deploy.sh --teardown --namespace "${NAMESPACE}"
done
kind delete cluster --name pypnm-dev