#!/usr/bin/env bash NAMESPACE="lapodb-postgres" CLUSTER_PREFIX="pg-cluster" EXPECTED_PODS=3 PODS=$(kubectl get pods -n "$NAMESPACE" --no-headers 2>/dev/null | awk -v p="$CLUSTER_PREFIX" '$1 ~ "^"p"-[0-9]+$" {print $1}') if [ -z "$PODS" ] ; then echo "CRITICAL - Nincs PostgreSQL pod a namespace-ben: $NAMESPACE" exit 2 fi FIRST_POD=$(echo "$PODS" | head -n 1) PATRONI_STATUS="$(kubectl exec -n "$NAMESPACE" "$FIRST_POD" -c patroni -- patronictl list 2>/dev/null)" if [ -z "$PATRONI_STATUS" ] ; then echo "CRITICAL - Nem sikerült lekérdezni a Patroni állapotot" exit 2 fi READY_COUNT=0 POD_COUNT=0 LEADER_COUNT=0 REPLICA_COUNT=0 DETAILS="" for POD in $PODS ; do POD_COUNT=$((POD_COUNT + 1)) NODE=$(kubectl get pod "$POD" -n "$NAMESPACE" -o jsonpath='{.spec.nodeName}' 2>/dev/null) PHASE=$(kubectl get pod "$POD" -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null) READY="$(kubectl get pod "$POD" -n "$NAMESPACE" -o jsonpath='{range .status.containerStatuses[*]}{.ready}{" "}{end}' 2>/dev/null | awk '{ready=0; total=0; for (i=1;i<=NF;i++) {total++; if ($i=="true") ready++} print ready "/" total}')" RESTARTS="$(kubectl get pod "$POD" -n "$NAMESPACE" -o jsonpath='{range .status.containerStatuses[*]}{.restartCount}{" "}{end}' 2>/dev/null | awk '{sum=0; for (i=1;i<=NF;i++) sum+=$i; print sum}')" ROLE="$(echo "$PATRONI_STATUS" | awk -F'|' -v pod="$POD" '$2 ~ pod {gsub(/^[ \t]+|[ \t]+$/, "", $4) ; print tolower($4)}')" [ -z "$ROLE" ] && ROLE="unknown" if [ "$PHASE" = "Running" ] && echo "$READY" | awk -F/ '{exit !($1==$2 && $2>0)}' ; then READY_COUNT=$((READY_COUNT + 1)) fi case "$ROLE" in leader) LEADER_COUNT=$((LEADER_COUNT + 1)) ;; replica) REPLICA_COUNT=$((REPLICA_COUNT + 1)) ;; esac DETAILS="${DETAILS}${POD} role=${ROLE} node=${NODE} ready=${READY} phase=${PHASE} restarts=${RESTARTS}; " done UNIQUE_NODES=$(for POD in $PODS ; do kubectl get pod "$POD" -n "$NAMESPACE" -o jsonpath='{.spec.nodeName}{"\n"}' ; done | sort -u | wc -l) if [ "$POD_COUNT" -ne "$EXPECTED_PODS" ] ; then echo "CRITICAL - Pod szám eltérés: ${POD_COUNT}/${EXPECTED_PODS}. ${DETAILS}" exit 2 fi if [ "$READY_COUNT" -ne "$EXPECTED_PODS" ] ; then echo "CRITICAL - Nem minden pod ready: ${READY_COUNT}/${EXPECTED_PODS}. ${DETAILS}" exit 2 fi if [ "$LEADER_COUNT" -ne 1 ] ; then echo "CRITICAL - Leader darabszám hibás: ${LEADER_COUNT}. ${DETAILS}" exit 2 fi if [ "$REPLICA_COUNT" -lt 2 ] ; then echo "WARNING - Kevesebb mint 2 replica látszik: ${REPLICA_COUNT}. ${DETAILS}" exit 1 fi if [ "$UNIQUE_NODES" -lt "$EXPECTED_PODS" ] ; then echo "WARNING - Nem minden PostgreSQL pod külön node-on fut: ${UNIQUE_NODES}/${EXPECTED_PODS}. ${DETAILS}" exit 1 fi echo "OK - StackGres PostgreSQL rendben. Pods=${READY_COUNT}/${EXPECTED_PODS}, Leader=${LEADER_COUNT}, Replicas=${REPLICA_COUNT}, Nodes=${UNIQUE_NODES}/${EXPECTED_PODS}. ${DETAILS}" exit 0