在Knative中部署的服务异常了怎么办?不要担心,本文教你在 Knative 中一步步排查问题。
查看命令行输出
检查执行部署的命令输出是否成功,如果执行命令部署中断,可以在输出信息中查看部署失败的原因。一般这样的错误都是由于配置文件配置有问题导致的。例如下面的错误信息是由于配置的流量比例不等于100导致的。
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日志信息。推荐使用日志服务对日志进行收集。这样可以直接在日志服务中查看当前应用异常信息。
查看当前应用 Pod 中 user-container
容器的日志信息:
kubectl logs <pod-name> user-container
检查路由状态
可以通过下面的命令查看 Route
的 status
信息:
kubectl get route <route-name> --output yaml
通过status
进行判断,异常的情况下可以看到reason
信息
检查 Ingress 路由
查看 Istio 网关 IP 地址信息
kubectl get svc -n istio-system istio-ingressgateway
检查是否有 EXTERNAL-IP
ip, 如果没有的话,一般情况是由于配额不足导致的。
检查 Revision 状态
查看 Revision 信息,执行如下命令:
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 服务中可能会遇到各种问题,希望通过上面介绍的排查手段给你提供帮助。