如何在 Knative 中 Debug 服务

简介: 在 Knative 中部署的服务异常了怎么办?不要担心,本文教你在 Knative 中一步步排查问题。

在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

检查路由状态

可以通过下面的命令查看 Routestatus 信息:

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

如果发现了containerStatusesuser-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 服务中可能会遇到各种问题,希望通过上面介绍的排查手段给你提供帮助。

欢迎加入 Knative 交流群

image

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
编译器 Python Windows
解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全
解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全,我们在jupyter的notebook中使用matplotlib画图的时候,经常性的会遇见一些中文乱码显示□的情况,如下所示:
1807 0
解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全
|
存储 API iOS开发
苹果手机iOS如何使用http代理
我们使用苹果手机访问网络时,有时候需要配置代理服务器。下面就来介绍一下。
苹果手机iOS如何使用http代理
|
弹性计算 调度
阿里云服务器ECS通用型和共享型有什么区别?
阿里云共享型和通用型的区别,实际上是共享型和独享型云服务器的区别,只有CPU计算性能是有差别的,共享型云服务器的CPU计算性能不如独享型,ECS共享型云服务器在高负载时可能导致计算性能波动不稳定,而通用型云服务器计算性能稳定。除了CPU计算性能,其他的如公网带宽、系统盘及内存等都是无差别的
736 0
阿里云服务器ECS通用型和共享型有什么区别?
|
存储 弹性计算 固态存储
阿里云服务器收费价格表(CPU内存带宽系统盘报价)
阿里云服务器租用费用包括CPU内存、公网带宽和系统盘三部分价格,云服务器购买可以选择活动机型也可以选择自定义购买,活动机型配置固定但是价格便宜,自定义购买配置自由选择但是价格贵一些,阿里云百科来详细说下云服务器1核2G、2核4G、4核8G、8核16G、2核8G等配置租用费用
1694 0
阿里云服务器收费价格表(CPU内存带宽系统盘报价)
|
JSON NoSQL 关系型数据库
MongoDB学习笔记(二) 增删改查
MongoDB学习笔记(二) 增删改查
444 0
|
算法 Serverless 数据安全/隐私保护
【密码学】一文读懂SHA-2
SHA-2安全散列算法2(Secure Hash Algorithm 2)一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
2477 0
【密码学】一文读懂SHA-2
|
存储 监控 大数据
数列科技开源全球首款生产环境全链路压测平台 Takin
数列科技开源全球首款生产环境全链路压测平台 Takin
779 0
数列科技开源全球首款生产环境全链路压测平台 Takin
|
人工智能 安全 机器人
各类好玩免费API推荐,强烈建议收藏
API,英文全称Application Programming Interface,翻译为“应用程序编程接口”。是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
2997 0
|
机器学习/深度学习 Python
Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略daiding
Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略daiding
Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略daiding
|
网络架构
带你读《6G需求与愿景》第一章信息技术及移动通信发展历史1.2 移动通信发展历史(二)
带你读《6G需求与愿景》第一章信息技术及移动通信发展历史1.2 移动通信发展历史
带你读《6G需求与愿景》第一章信息技术及移动通信发展历史1.2	移动通信发展历史(二)