如何在 Knative 中 Debug 服務

在Knative中部署的服務異常了怎麼辦?不要擔憂,本文教你在 Knative 中一步步排查問題。web

查看命令行輸出

檢查執行部署的命令輸出是否成功,若是執行命令部署中斷,能夠在輸出信息中查看部署失敗的緣由。通常這樣的錯誤都是因爲配置文件配置有問題致使的。例以下面的錯誤信息是因爲配置的流量比例不等於100致使的。api

 
Error from server (InternalError): error when applying patch: {"metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"serving.knative.dev/v1alpha1\",\"kind\":\"Route\",\"metadata\":{\"annotations\":{},\"name\":\"route-example\",\"namespace\":\"default\"},\"spec\":{\"traffic\":[{\"configurationName\":\"configuration-example\",\"percent\":50}]}}\n"}},"spec":{"traffic":[{"configurationName":"configuration-example","percent":50}]}} to: &{0xc421d98240 0xc421e77490 default route-example STDIN 0xc421db0488 264682 false} for: "STDIN": Internal error occurred: admission webhook "webhook.knative.dev" denied the request: mutation failed: The route must have traffic percent sum equal to 100. ERROR: Non-zero return code '1' from command: Process exited with status 1

查看應用日誌

通常狀況下服務異常,能夠直接查看當前應用 Pod日誌信息。推薦使用日誌服務對日誌進行收集。這樣能夠直接在日誌服務中查看當前應用異常信息。app

查看當前應用 Pod 中 user-container 容器的日誌信息:oop

 
kubectl logs <pod-name> user-container

檢查路由狀態

能夠經過下面的命令查看 Route 的 status 信息:spa

 
kubectl get route <route-name> --output yaml

經過status進行判斷,異常的狀況下能夠看到reason 信息命令行

檢查 Ingress 路由日誌

查看 Istio 網關 IP 地址信息code

 
kubectl get svc -n istio-system istio-ingressgateway

檢查是否有 EXTERNAL-IP ip, 若是沒有的話,通常狀況是因爲配額不足致使的。server

檢查 Revision 狀態

查看 Revision 信息,執行以下命令:ip

 
kubectl get revision <revision-name> --output yaml

若是服務正常,應該是以下信息:

 
conditions: - lastTransitionTime: 2019-08-20T07:52:59Z status: "True" type: Ready

檢查 Pod 狀態

執行命令:

 
$ kubectl get pods NAME READY STATUS RESTARTS AGE configuration-example-00001-deployment-659747ff99-9bvr4 2/2 Running 0 3h configuration-example-00002-deployment-5f475b7849-gxcht 1/2 CrashLoopBackOff 2 36s

繼續查看 Pod 的狀態:

 
kubectl get pod <pod-name> --output yaml

若是發現了containerStatuses中 user-container 異常,能夠經過上述【查看應用日誌】進行分析。

檢查 Controller 組件

查看當前 Controller 組件是否正常

 
$kubectl -n knative-serving get pod NAME READY STATUS RESTARTS AGE activator-75b69857b7-6rnln 2/2 Running 2 21d autoscaler-674d79f79c-2zlmh 2/2 Running 1 21d autoscaler-hpa-679868bd9-zlk6t 1/1 Running 0 21d controller-5855f47556-qrfgd 1/1 Running 0 21d networking-istio-6c8d6774f8-944b7 1/1 Running 0 21d webhook-65f55b444f-stq28 1/1 Running 0 21d

查看 controller 中是否有異常信息輸出

 
kubectl -n knative-serving logs --tail=1000 controller-5855f47556-qrfgd

小結

在部署 Knative 服務中可能會遇到各類問題,但願經過上面介紹的排查手段給你提供幫助。

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索