无法在kubeless上部署功能

时间:2020-02-06 09:44:59

标签: kubernetes kubeless

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

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进行了检查,但仍然无法正常工作。以下是deploy命令

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

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

3 个答案:

答案 0 :(得分:0)

kubeless.io中可以看到:

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

$ kubectl logs -n kubeless -l kubeless=controller

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

希望有帮助。

答案 1 :(得分: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. 无内核版本与k8s集群版本不兼容。从k8s 1.15中删除了用于部署的扩展名/ v1beta1版本。但是,早期版本的kubeless仍使用extension / v1beta1来获取部署状态。您可以检查k8s集群的api资源。

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

检查以下使用新的apps / v1端点的kubeless更改列表。 Use new apps/v1 endpoint

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{})

答案 2 :(得分:0)

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

kubectl -n kubeless get pods

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

kubectl logs -n kubeless -c kubeless-function-controller kubeless-controller-manager-5dc8f64bb7-b9x4r