Kubeless 函数部署遇到了问题,如何 Debug? | 玩转 Kubeless
2020年9月,Coding Sans 联合其9个合作伙伴,发布了 Serverless 2020 年度状态报告。
这篇报告中有个观点: Debug 是 Serverless 最大的挑战,因为这个是由架构的复杂性引起的。
那么 在 Kubeless 中如何对函数进行 Debug 呢?本文将介绍在函数部署过程函数中可能的错误以及如何 Debug 来定位问题并解决问题。
环境说明
操作系统:macOS
Kubernetes 版本:v1.15.5
Kubeless 版本:v1.0.7
了解函数部署过程
部署出错的原因可能有很多。要想学习如何成功调试函数,最重要的是要了解部署 Kubeless 函数的过程。
在本文中,我们假设你使用 kubeless CLI 工具部署函数。这种情况下,函数的部署过程如下:
kubeless CLI 读取你给它的参数,并产生一个函数对象,将它提交给 Kubernetes API 服务器。
Kubeless 函数控制器检测到一个新的 Function 被创建并读取其内容。它从函数中生成这些:一个 ConfigMap 附带函数代码和依赖项,一个 Service 以便可以通过 HTTP访问该函数,一个附带基础镜像的 Deployment ,以及安装和运行函数的所有必须步骤。知道这个顺序非常重要,因为如果控制器无法创建 ConfigMap 或 Service,那么将永远不会创建 Deployment。任何步骤失败都会终止该过程。
一旦 Deployment 创建了一个你函数生成的 Pod,Pod 启动的时候会动态读取函数内容(在解析型语言的情况下)。
完成上述所有操作后,你就可以调用函数了。让我们看看一些常见的错误以及如何解决它们。
"kubeless function deploy" 失败
可能出现的第一个错误是我们赋予 kubeless function deploy 命令的参数错误。这些错误很容易 debug:
从上面的报错日志中我们可以看出 runtime 参数不对,应该将 python2 改为 python2.7。
"kubeless function ls" 返回 "MISSING: Check controller logs”
在某些情况下,在 CLI 中进行的验证不足以发现给定参数中的问题。如果是这种情况,该函数 Deployment 将永远不会出现。要 debug 此类问题,必须检查控制器日志中的错误是什么。要检索这些日志,请执行:
从日志中我们可以看到 handler 参数存在问题:我们应该将 test,hello 修改为 test.hello。
函数 pod crash
最常见的错误是发现 Deployment 成功生成了,但函数仍保持状态 0/1 Not ready。这通常是由函数或我们指定的依赖项中的语法错误引起的。
如果我们的函数没有启动,我们应该检查 pod 的状态,命令如下:
函数 pod crash 之 Init:CrashLoopBackOff
如果我们的函数因为 Init 错误而失败,则可能意味着:
它无法检索函数内容
它无法安装依赖项
它无法编译我们的函数(使用编译型语言)
对于上述任何一种情况,我们应该首先确定哪个容器失败了(因为每个步骤都在不同的容器中执行):
从上面我们可以看到,容器 install 就是有问题的容器。根据运行时间,还将显示容器的日志,因此我们可以直接发现问题。不幸的是,事实并非如此,因此让我们手动检索 install 容器的日志:
现在我们可以发现问题是我们 requirements.txt 中模块名不对,应该将 jenkinsapi-2020 改为 jenkinsapi。
函数 pod crash 之 CrashLoopBackOff
在 Pod 保持该状态的情况下,我们应该检索运行时容器的日志:
我们可以看到我们有一个语法错误:import requests123,应该修改为:import requests。
函数返回 "Internal Server Error”
在某些情况下,pod 不会 crash,但是函数返回错误:
这通常意味着该函数在语法上是正确的,但存在错误。再次检查问题,我们应该检查函数日志:
查看引起错误的函数代码:
这里将 event['data']['user']['name'] 改为 event['data']['username'] 即可。
结论
上面这些是一些可以快速定位函数出了什么问题的技巧。如果检查控制器和函数日志(或任何其他 Kubernetes 可提供的信息)后,不能够发现错误,可以去 github 仓库提 issue 或在官方 slack 频道沟通。
参考
https://kubeless.io/docs/debug-functions/
版权声明: 本文为 InfoQ 作者【donghui2020】的原创文章。
原文链接:【http://xie.infoq.cn/article/4542095640711d1ff258f4595】。文章转载请联系作者。
评论