kubelet作為Kubernetes節點的核心管家,其日志是排查節點問題的金鑰匙。本文將分享生產環境中查看和分析kubelet日志的完整方案,助你快速定位節點級故障。
一、基礎操作:快速查看日志
1. systemd服務日志(推薦首選)
# 查看實時滾動日志(Ctrl+C退出)
journalctl -u kubelet -f# 查看過去1小時的關鍵錯誤
journalctl -u kubelet --since "1 hour ago" | grep -iE 'error|fail|exception'# 導出完整日志到文件(用于后續分析)
journalctl -u kubelet --since "2023-08-01" > kubelet.log
2. 直接訪問日志文件(容器化部署場景)
# 常規路徑(適用于大多數發行版)
tail -f /var/log/kubelet.log# 容器化kubelet路徑(如kubeadm部署)
tail -f /var/lib/kubelet/kubeadm-flags.env
二、高階技巧:精準定位問題
1. 日志級別動態調整
# 臨時開啟Debug模式(無需重啟服務)
curl -X PUT -d "4" http://localhost:10248/debug/flags/v# 驗證日志級別
curl http://localhost:10248/debug/flags/v
2. 關鍵日志模式過濾
# PLEG健康檢查異常(節點NotReady高頻原因)
journalctl -u kubelet | grep 'PLEG is not healthy'# 證書相關錯誤(TLS握手失敗等)
journalctl -u kubelet | grep -i 'x509'# 資源不足告警
journalctl -u kubelet | grep -iE 'out of memory|eviction'
3. 時間窗口定位法
# 定位特定時間段的日志(精確到分鐘)
journalctl -u kubelet --since "09:30" --until "09:35"
三、生產環境實戰場景
場景1:證書過期導致節點失聯
特征日志:
x509: certificate has expired or is not yet valid
處理方案:
# 強制更新客戶端證書
rm -f /var/lib/kubelet/pki/kubelet-client-*
systemctl restart kubelet
場景2:磁盤壓力觸發Pod驅逐
日志線索:
DiskPressure: True, Message: node has disk pressure
應急操作:
# 快速清理Docker殘留文件
docker system prune -af# 釋放kubelet緩存
find /var/lib/kubelet/pods/ -type d -name volumes -exec du -sh {} +
場景3:容器運行時無響應
錯誤提示:
PLEG is not healthy: pleg was last seen active 5m0s ago
恢復步驟:
# 重啟containerd服務
systemctl restart containerd# 清理孤兒容器
ctr -n k8s.io containers list | awk '{print $1}' | xargs -I{} ctr -n k8s.io containers delete {}
四、日志管理最佳實踐
1. 日志輪轉配置(防止磁盤撐爆)
# 配置logrotate(/etc/logrotate.d/kubelet)
/var/log/kubelet.log {dailyrotate 7compressmissingokcopytruncate
}
2. 集中式日志收集(生產必選)
# Fluentd配置示例(采集kubelet日志)
<source>@type tailpath /var/log/kubelet.logtag kubeletformat json
</source>
3. 關鍵指標監控
# Prometheus告警規則(日志錯誤突增)
- alert: KubeletErrorSpikeexpr: rate(kubelet_log_messages_total{severity="ERROR"}[5m]) > 10for: 10m
五、專家調試工具箱
1. 實時日志分析腳本
#!/bin/bash
# 自動提取關鍵錯誤并統計頻率
journalctl -u kubelet --since "1 hour ago" \| awk '/error|fail|exception/ {print $5}' \| sort | uniq -c | sort -nr
2. 跨節點日志比對
# 并行查詢多個節點(需配置ssh免密登錄)
parallel-ssh -i -H "node1 node2 node3" \"journalctl -u kubelet --since '10 min ago' | grep -i cert"
3. 性能瓶頸定位
# 統計日志中耗時操作TOP10
grep 'Processing request' /var/log/kubelet.log \| awk '{print $NF}' | sort -n | tail -10
六、避坑指南
- 勿全量采集日志:優先過濾ERROR級別,避免存儲爆炸
- 注意時區統一:確保日志時間戳與監控系統一致
- 保護敏感信息:日志中可能包含證書密鑰,需做脫敏處理
- 版本差異驗證:不同K8s版本的kubelet日志格式可能不同
通過掌握這些技巧,運維人員可以將平均故障排查時間(MTTR)縮短50%以上。建議將常用檢查命令封裝成腳本,并結合ELK等日志平臺建立實時分析系統,實現從被動響應到主動預防的運維升級。