#!/usr/bin/env bash set -euo pipefail export KUBECONFIG=/Users/chrisfu/dev/knoe/knoe-k3s.kubeconfig echo "==> Patching HPAs to minReplicas=1..." for hpa in gitlab-webservice-default gitlab-gitlab-shell gitlab-kas gitlab-registry; do kubectl -n gitea patch hpa "$hpa" --type=merge \ -p '{"spec":{"minReplicas":1,"maxReplicas":2}}' 2>/dev/null || true echo " patched: $hpa" done echo "==> Patching global.nodeSelector to null (let pods spread)..." kubectl -n gitea patch gitlab gitlab --type=merge -p '{ "spec":{"chart":{"values":{"global":{"nodeSelector":null}}}}}' echo "==> Patching CR webservice/sidekiq nodeSelector to null..." kubectl -n gitea patch gitlab gitlab --type=merge -p '{ "spec":{"chart":{"values":{"gitlab":{ "webservice":{"nodeSelector":null}, "sidekiq":{"nodeSelector":null}, "toolbox":{"nodeSelector":null}, "migrations":{"nodeSelector":null}, "gitlab-exporter":{"nodeSelector":null} },"registry":{"nodeSelector":null}}}}}' echo "==> Force-deleting stuck Terminating pods..." for pod in $(kubectl -n gitea get pods --no-headers \ | grep -E "Terminating|Pending" | awk '{print $1}'); do kubectl -n gitea delete pod "$pod" --force --grace-period=0 --ignore-not-found 2>/dev/null || true done echo "==> Waiting 5min for pods to reschedule across cluster..." sleep 300 echo "==> Pod status with node placement:" kubectl -n gitea get pods --no-headers \ -o wide | grep -v jemalloc | grep -v Completed \ | awk '{printf "%-52s %-8s %-15s %s\n",$1,$4,$6,$7}' | sort echo "==> CR phase:" kubectl -n gitea get gitlab gitlab -o jsonpath='{.status.phase}' && echo