0

我是 Kubernetes 的初学者。我一直在 minikube 上尝试 kubeless。我已经在可用的最新版本中进行了设置。当我部署该功能时,这是我得到的输出:

INFO[0000] Deploying function...                        
INFO[0000] Function hello submitted for deployment      
INFO[0000] Check the deployment status executing 'kubeless function ls hello'

当我运行时kubeless function ls,我得到了这个:

NAME    NAMESPACE   HANDLER         RUNTIME     DEPENDENCIES    STATUS                        
hello   default     example.hello   python3.6                   MISSING: Check controller logs

MISSING: Check controller logs每次我创建一个函数时,它都会显示这个状态。我还通过将 RUNTIME 更改为 python2.7 进行了检查,但它仍然不起作用。部署命令如下

kubeless function deploy hello --runtime python3.6 --from-file python-example/example.py --handler example.hello

请指导我如何解决此问题。

4

3 回答 3

0

从 kubeless 代码中,如果 kubeless 无法获取此功能的 k8s 部署状态,则会出现此状态。

status, err := getDeploymentStatus(cli, f.ObjectMeta.Name, f.ObjectMeta.Namespace)
                        if err != nil && k8sErrors.IsNotFound(err) {
                                status = "MISSING: Check controller logs"
                        }

所以有以下几种可能的原因:

  1. 此函数存在运行时问题,例如导致 pod 无法运行的语法问题或依赖关系问题。检查 pod 日志可以帮助弄清楚。(这发生在我的情况下,不确定是否是由导致 kubeless 无法获取失败消息的第二个原因引起的)

  2. kubeless 版本与 k8s 集群版本不兼容。从 k8s 1.15 开始,移除了用于部署的 extension/v1beta1 版本。但是,早期版本的 kubeless 仍然使用 extension/v1beta1 来获取部署状态。您可以检查您的 k8s 集群的 api-resources。

$kubectl api-resources | grep deployments
deployments    deploy       apps      true         Deployment
#kubectl api-versions | grep apps
apps/v1

检查以下使用新应用程序/v1 端点的 kubeless 更改列表。 使用新的应用程序/v1 端点

func getDeploymentStatus(cli kubernetes.Interface, funcName, ns string) (string, error) {
-   dpm, err := cli.ExtensionsV1beta1().Deployments(ns).Get(funcName, metav1.GetOptions{})
+   dpm, err := cli.AppsV1().Deployments(ns).Get(funcName, metav1.GetOptions{})
于 2020-02-21T03:47:13.123 回答
0

正如我从kubeless.io中看到的:

要调试“MISSING:检查控制器日志”类型的问题,有必要检查控制器日志中的错误是什么。要检索这些日志,请执行:

$ kubectl logs -n kubeless -l kubeless=controller

在某些情况下,在 CLI 中完成的验证不足以发现给定参数中的问题。如果是这种情况,则功能部署将永远不会出现。

希望有帮助。

于 2020-02-06T15:21:07.250 回答
0

首先,获取 kubeless-controller pod 的名称:

kubectl -n kubeless get pods

您可以从 Kubeles 控制器获取日志:

kubectl logs -n kubeless -c kubeless-function-controller kubeless-controller-manager-5dc8f64bb7-b9x4r
于 2020-10-10T02:34:32.080 回答