From 18bce33a1e00ab210c953ef2c652443a9b04223e Mon Sep 17 00:00:00 2001 From: Timmy Date: Wed, 1 Apr 2026 17:10:03 +0800 Subject: [PATCH] feat: add check_events.sh, check_resources.sh, check_all.sh for diagnostics --- cluster/check_all.sh | 40 ++++++++++++++++++++++++++++++++++++++ cluster/check_events.sh | 36 ++++++++++++++++++++++++++++++++++ cluster/check_resources.sh | 40 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100755 cluster/check_all.sh create mode 100755 cluster/check_events.sh create mode 100755 cluster/check_resources.sh diff --git a/cluster/check_all.sh b/cluster/check_all.sh new file mode 100755 index 0000000..460a6f2 --- /dev/null +++ b/cluster/check_all.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# 用途:一鍵執行所有檢查(診斷問題時使用) + +set -euo pipefail + +# 顏色定義 +BLUE='\033[0;34m' +NC='\033[0m' + +echo -e "${BLUE}" +cat << "EOF" +╔════════════════════════════════════════════════╗ +║ ║ +║ K3s 叢集全面診斷 ║ +║ ║ +╚════════════════════════════════════════════════╝ +EOF +echo -e "${NC}" +echo "" + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# 執行各項檢查 +for script in check_nodes.sh check_storage.sh check_access.sh check_events.sh; do + if [ -f "$SCRIPT_DIR/$script" ]; then + echo "▶️ 執行: $script" + echo "==========================================" + bash "$SCRIPT_DIR/$script" + echo "" + echo "" + fi +done + +echo "==========================================" +echo "診斷完成!" +echo "" +echo "💡 提示:" +echo " - 如果有問題,請把整個輸出貼給 Claude" +echo " - 或只貼有紅色/黃色警告的部分" +echo "==========================================" diff --git a/cluster/check_events.sh b/cluster/check_events.sh new file mode 100755 index 0000000..3aa6bdb --- /dev/null +++ b/cluster/check_events.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# 用途:檢查叢集事件(診斷問題最重要!) + +set -euo pipefail + +# 顏色定義 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo "==========================================" +echo " K3s 叢集事件 (最近1小時)" +echo "==========================================" +echo "" + +# 顯示最近 1 小時的 Warning 和 Error 事件 +echo "⚠️ Warning / Error 事件" +echo "------------------------------------------" +kubectl get events -A --sort-by='.lastTimestamp' --field-selector type!=Normal | \ + grep -E "(Warning|Error)" | tail -20 || echo "無異常事件" + +echo "" +echo "📋 所有最近事件 (最近20筆)" +echo "------------------------------------------" +kubectl get events -A --sort-by='.lastTimestamp' | tail -20 + +echo "" +echo "🔄 計畫失敗的 Pod" +echo "------------------------------------------" +kubectl get pods -A | grep -E "(Failed|Error|CrashLoopBackOff|ImagePullBackOff)" || echo -e "${GREEN}無異常 Pod${NC}" + +echo "" +echo "==========================================" +echo "提示: 事件太多可用 kubectl get events -A --field-selector type=Warning" +echo "==========================================" diff --git a/cluster/check_resources.sh b/cluster/check_resources.sh new file mode 100755 index 0000000..7d50c1b --- /dev/null +++ b/cluster/check_resources.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# 用途:檢查資源使用率(CPU/Memory) + +set -euo pipefail + +# 顏色定義 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo "==========================================" +echo " K3s 資源使用率" +echo "==========================================" +echo "" + +# 節點資源 +echo "🖥️ 節點資源" +echo "------------------------------------------" +kubectl top nodes 2>/dev/null || echo "需要 metrics-server,請稍後再試" + +echo "" +echo "📦 Pod 資源使用 (Top 10)" +echo "------------------------------------------" +kubectl top pods -A --sort-by=cpu 2>/dev/null | head -11 || echo "需要 metrics-server" + +echo "" +echo "🔋 高資源使用 Pod (>80% CPU 或 >1G Memory)" +echo "------------------------------------------" +kubectl top pods -A 2>/dev/null | awk -v OFS='\t' 'NR>1 && ($3 > 80 || $4 > 1000) {print $1, $2, $3"%", $4"Mi"}' || echo "無法計算" + +echo "" +echo "📊 資源請求 vs 限制" +echo "------------------------------------------" +echo "查看 Pod 是否設定了資源限制:" +kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.spec.containers[*].resources.requests.cpu}{"\t"}{.spec.containers[*].resources.limits.cpu}{"\n"}{end}' | \ + awk '{if ($3 != "" && $4 == "") print $1"/"$2 " ❌ 只有 request 無 limit"; else if ($3 == "") print $1"/"$2 " ⚠️ 無資料設定"}' | head -10 || echo -e "${GREEN}所有 Pod 都有設定${NC}" + +echo "" +echo "=========================================="