在Debian上部署Kubernetes(K8s)后,查看服務日志是非常重要的操作,可以幫助您及時排查和解決問題。以下是查看K8s部署日志的詳細步驟:
kubectl logs <pod-name> -n <namespace>
<pod-name>:Pod的名稱。<namespace>:Pod所在的命名空間,如果不指定,默認為default。kubectl logs -f <pod-name> -n <namespace>
-f 或 --follow:持續顯示日志,類似于tail -f命令。如果您的Pod包含多個容器,您需要指定要查看的容器名稱:
kubectl logs <pod-name> -n <namespace> -c <container-name>
<container-name>:要查看的容器名稱。如果您想查看因故障而退出的容器的日志,可以使用-p參數:
kubectl logs -f <pod-name> -n <namespace> -p
-p:查看上一個崩潰容器的日志。您還可以編寫Shell腳本來批量查看多個服務的日志。以下是一個簡單的示例腳本:
#!/bin/bash
read -p "請輸入服務名: " SERVICE_NAME
read -p "請輸入命名空間: " NAMESPACE
echo "1. 全部"
echo "2. 指定小時"
echo "3. 開始時間"
read -p "請輸入編號: " choice
case $choice in
1)
PODS=$(kubectl get pods -n $NAMESPACE -l app=$SERVICE_NAME -o jsonpath='{.items[*].metadata.name}')
if [ -z "$PODS" ]; then
echo "在【$NAMESPACE】命名空間下沒有找到服務為:【$SERVICE_NAME】,可用的Pod"
exit 1
fi
for POD in $PODS; do
echo "開始獲取Pod日志 $POD"
kubectl logs -n $NAMESPACE $POD --tail=-1 >/tmp/$POD.log
echo "----- 獲取Pod日志結束 $POD -----"
echo ""
done
;;
2)
read -p "請輸入取幾個小時前的日志: " TimeHour
PODS=$(kubectl get pods -n $NAMESPACE -l app=$SERVICE_NAME -o jsonpath='{.items[*].metadata.name}')
if [ -z "$PODS" ]; then
echo "在【$NAMESPACE】命名空間下沒有找到服務為:【$SERVICE_NAME】,可用的Pod"
exit 1
fi
for POD in $PODS; do
echo "開始獲取Pod日志 $POD"
kubectl logs -n $NAMESPACE $POD --since=${TimeHour}h >/tmp/$POD.log
echo "----- 獲取Pod日志結束 $POD -----"
echo ""
done
;;
3)
read -p "開始時間:'2024-11-05T00:00:00Z'" START_TIME
PODS=$(kubectl get pods -n $NAMESPACE -l app=$SERVICE_NAME -o jsonpath='{.items[*].metadata.name}')
if [ -z "$PODS" ]; then
echo "在【$NAMESPACE】命名空間下沒有找到服務為:【$SERVICE_NAME】,可用的Pod"
exit 1
fi
for POD in $PODS; do
echo "開始獲取Pod日志 $POD"
kubectl logs -n $NAMESPACE $POD --since-time=$START_TIME >/tmp/$POD.log
echo "----- 獲取Pod日志結束 $POD -----"
echo ""
done
;;
*)
echo "無效的選項,程序退出?。?!"
exit 1
;;
esac
echo "查詢日志程序執行完畢。"
除了kubectl命令,還有一些第三方工具可以幫助您更高效地查看和管理K8s日志,例如:
通過上述方法,您可以輕松地在Debian上的K8s集群中查看和管理部署日志,快速定位和解決問題。