我是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
请指导我如何解决此问题。
答案 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"
}
所以有一些可能的原因如下:
此功能存在运行时问题,例如,语法问题或依赖关系问题,这些问题会导致Pod无法运行。检查pod日志可以帮助弄清楚。(对于我来说,这是不确定的,是否是由导致kubeless无法获取失败消息的第二个原因引起的)
无内核版本与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