From b5b04f2ae57ed6b531af77dd1ccbd210793d9e42 Mon Sep 17 00:00:00 2001 From: Timmy Date: Wed, 1 Apr 2026 17:01:44 +0800 Subject: [PATCH] improve: make check_nodes.sh more readable with colors and summary --- cluster/check_nodes.sh | 73 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/cluster/check_nodes.sh b/cluster/check_nodes.sh index 10c397a..3b32ffe 100755 --- a/cluster/check_nodes.sh +++ b/cluster/check_nodes.sh @@ -1,7 +1,76 @@ #!/usr/bin/env bash -# 用途:檢查叢集節點狀態 +# 用途:檢查 K3s 叢集節點狀態 set -euo pipefail -kubectl get nodes -o wide +# 顏色定義 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color +echo "==========================================" +echo " K3s 叢集節點狀態" +echo "==========================================" +echo "" + +# 取得節點資訊 +NODES=$(kubectl get nodes --no-headers) + +# 統計 +NODE_TOTAL=$(echo "$NODES" | wc -l) +NODE_READY=$(echo "$NODES" | grep -c " Ready " || true) +NODE_NOT_READY=$(echo "$NODES" | grep -v " Ready " | wc -l) + +echo "📊 叢集概況" +echo "------------------------------------------" +echo "總節點數: $NODE_TOTAL" +echo -e " ${GREEN}Ready: $NODE_READY${NC}" +if [ $NODE_NOT_READY -gt 0 ]; then + echo -e " ${RED}NotReady: $NODE_NOT_READY${NC}" +fi +echo "" + +# 顯示每個節點的詳細資訊 +echo "🖥️ 節點詳細資訊" +echo "------------------------------------------" + +while read -r name status roles age version internal_ip os kernel runtime; do + # 顏色判斷 + if [[ "$status" == "Ready"* ]]; then + STATUS_COLOR="$GREEN" + ICON="✓" + else + STATUS_COLOR="$RED" + ICON="✗" + fi + + # 角色簡化 + if [[ "$roles" == *"control-plane"* ]]; then + ROLE="${BLUE}[master]${NC}" + elif [[ "$roles" == "" ]]; then + ROLE="[worker]" + else + ROLE="$roles" + fi + + # 輸出 + echo -e "${STATUS_COLOR}$ICON $name${NC} $ROLE" + echo " 狀態: $status" + echo " IP: $internal_ip" + echo " OS: $os $kernel" + echo "" +done <<< "$NODES" + +# Pod 分佈 +echo "📦 Pod 分佈" +echo "------------------------------------------" +kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.spec.nodeName}{"\n"}' | awk '{print $1, $2, "→", $3}' | column -t | head -20 + +POD_TOTAL=$(kubectl get pods -A --no-headers | wc -l) +echo "..." +echo "總 Pod 數: $POD_TOTAL" +echo "" + +echo "=========================================="