文档章节

如何在 Knative 中 Debug 服务

阿里云官方博客
 阿里云官方博客
发布于 09/11 11:33
字数 765
阅读 20
收藏 0

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

原文链接

本文为云栖社区原创内容,未经允许不得转载。

© 著作权归作者所有

阿里云官方博客
粉丝 197
博文 2145
码字总数 5336000
作品 0
杭州
程序员
私信 提问
Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇

上一期我们介绍了如何基于 Knative Serverless 技术实现天气服务-上篇,首先我们先来回顾一下上篇介绍的内容: 通过高德天气 API 接口,每隔 3 个小时定时发送定时事件,将国内城市未来 3 天...

阿里巴巴云原生
10/12
17
0
Knative-开源的Serverless架构方案

Knative(发音为 kay-nay-tiv)是谷歌开源的一套 Serverless 架构方案,它扩展了 Kubernetes,提供了一组中间件,提高了构建可在本地、云和第三方数据中心等地方运行的现代化、以源为中心且基...

openthings
05/13
259
0
Knative 实践:人脸图片识别

标准 Serverless 框架和人脸识别服务结合会产生怎样的火花?本文介绍如何通过 Knative 实现人脸识别服务,看看能否给你带来不一样的体验。 场景 通过 OSS 控制台上传照片,MnsOss 事件源接收...

元毅
06/21
0
0
分享 KubeCon 2019 (上海)关于 Serverless 及 Knative 相关演讲会议

有幸参加了 KubeCon 2019 上海大会,并参加了 Knative 及 Serverless 相关的几场分享会,收获满满。这里简单介绍一下各个演讲主题的主要内容。详细的演讲主题文档可以在KubeCon官方获取:htt...

元毅
06/26
0
0
Knative 实战:基于 Knative Serverless 技术实现天气服务-上篇

提到天气预报服务,我们第一反应是很简单的一个服务啊,目前网上有大把的天气预报 API 可以直接使用,有必要去使用 Knative 搞一套吗?杀鸡用牛刀?先不要着急,我们先看一下实际的几个场景需...

阿里巴巴云原生
09/30
5
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
80
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部