feat: add check_events.sh, check_resources.sh, check_all.sh for diagnostics
This commit is contained in:
40
cluster/check_all.sh
Executable file
40
cluster/check_all.sh
Executable file
@@ -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 "=========================================="
|
||||||
36
cluster/check_events.sh
Executable file
36
cluster/check_events.sh
Executable file
@@ -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 "=========================================="
|
||||||
40
cluster/check_resources.sh
Executable file
40
cluster/check_resources.sh
Executable file
@@ -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 != "<none>" && $4 == "<none>") print $1"/"$2 " ❌ 只有 request 無 limit"; else if ($3 == "<none>") print $1"/"$2 " ⚠️ 無資料設定"}' | head -10 || echo -e "${GREEN}所有 Pod 都有設定${NC}"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
Reference in New Issue
Block a user