【问题标题】:Not able to deploy functions on kubeless无法在 kubeless 上部署功能
【发布时间】:2020-10-10 10:34:32
【问题描述】:

我是 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

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

【问题讨论】:

  • 要复制它
  • 你有没有查看函数控制器的日志,函数控制器是 pod kubeless-controller-manager 中的一个容器。还要检查函数控制器创建的 pod 的日志,它应该在当前命名空间中命名为你的函数名称。我得到了这个 MISSING 状态,结果证明这是我的运行时 pod 中的运行时问题(依赖较少)。但是,在我更正所有内容并让函数正常运行后,我的函数仍然处于此状态。

标签: kubernetes kubeless


【解决方案1】:

正如我从kubeless.io 看到的:

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

$ kubectl logs -n kubeless -l kubeless=controller

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    从 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
    

    检查以下 kubeless 更改列表,它使用新的应用程序/v1 端点。 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{})
    

    【讨论】:

      【解决方案3】:

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

      kubectl -n kubeless get pods
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-29
        • 2017-11-15
        • 1970-01-01
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 2020-10-15
        相关资源
        最近更新 更多