如何在 Knative 中 Debug 服务

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在 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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
消息中间件 Kubernetes Cloud Native
【Kubernetes的Knative Servina、Knative Eventing 核心概念及Broker、Channel and Trigger使用】
【Kubernetes的Knative Servina、Knative Eventing 核心概念及Broker、Channel and Trigger使用】
|
Kubernetes Ubuntu 网络协议
超好用的k8s中pod诊断工具:kubectl-debug
超好用的k8s中pod诊断工具:kubectl-debug
超好用的k8s中pod诊断工具:kubectl-debug
|
Kubernetes Ubuntu Devops
Kubectl debug 调试容器
Kubectl debug 调试容器
1756 0
Kubectl debug 调试容器
|
JSON Kubernetes API
Kubernetes ImagePolicyWebhook与ValidatingAdmissionWebhook【3】validating_admission.go源码解析
Kubernetes ImagePolicyWebhook与ValidatingAdmissionWebhook【3】validating_admission.go源码解析
Kubernetes ImagePolicyWebhook与ValidatingAdmissionWebhook【3】validating_admission.go源码解析
|
Kubernetes Cloud Native 应用服务中间件
kubernetes Deployment【4】 client-go 管理 deployment
kubernetes Deployment【4】 client-go 管理 deployment
|
Kubernetes 开发工具 git
Knative Build
Knative Build
72 0
|
Java Docker 容器
Debug issue of OOM/pod restarting of in Kubernetes
# Debug issue of OOM/Pod restarting of in Kubernetes Recently, customers reported a issue that pod keep restarting after pod migrating from node to node, and java process inside pod exit abnormally
22769 0
|
Kubernetes 网络协议 Java
|
JSON Kubernetes Cloud Native
Knative 初体验:Eventing Hello World
基于事件驱动是 Serverless 的核心功能之一,通过事件驱动服务,满足了用户按需付费(Pay-as-you-go)的需求。在之前的文章中我们介绍过 Knative Eventing 由事件源、事件处理模型和事件消费 3 个主要部分构成,那么事件如何通过这 3 个组件产生、处理以及消费呢? 本文通过 Hello World 示例带你初探 Eventing。
Knative 初体验:Eventing Hello World
|
编解码 缓存 Kubernetes
Knative 初体验:Serving Hello World
Serverless 一个核心思想就是按需分配,那么 Knative 是如何实现按需分配的呢?另外在前面的文章中你已经了解到 Knative Serving 在没有流量的时候是可以把 Pod 缩容到零的。接下来就通过一些例子体验一下 Knative 缩容到零和按需自动扩缩容的能力。
Knative 初体验:Serving Hello World