Невозможно развернуть функции на kubeless
Я новичок в Kubernetes. Пробовал kubeless на minikube. Я установил оба в последней доступной версии. Когда я развертываю функцию, я получил следующий результат:
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
Пожалуйста, расскажите мне, как решить эту проблему.
2 ответа
Как я вижу на сайте kubeless.io:
Для устранения проблем типа "ОТСУТСТВУЕТ: проверка журналов контроллера" необходимо проверить, в чем заключается ошибка в журналах контроллера. Чтобы получить эти журналы, выполните:
$ kubectl logs -n kubeless -l kubeless=controller
Бывают случаи, когда проверок, выполненных в CLI, недостаточно, чтобы выявить проблему в заданных параметрах. В этом случае функция "Развертывание" никогда не появится.
Надеюсь, это поможет.
Из кода kubeless этот статус происходит, если kubeless не может получить статус развертывания k8s для этой функции.
status, err := getDeploymentStatus(cli, f.ObjectMeta.Name, f.ObjectMeta.Namespace)
if err != nil && k8sErrors.IsNotFound(err) {
status = "MISSING: Check controller logs"
}
Итак, есть несколько возможных причин:
Для этой функции существует проблема времени выполнения, например проблема синтаксиса или проблема зависимости, из-за которых модуль не запускается. Чтобы выяснить это, проверьте журналы модуля (это происходит в моем случае, я не уверен, вызвано ли это второй причиной, из-за которой kubeless не может получить сообщение об ошибке)
Версия kubeless несовместима с версией кластера k8s. Из k8s 1.15 версия extension/v1beta1 для развертывания удалена. Однако ранняя версия kubeless по-прежнему использует расширение / v1beta1 для получения статуса развертывания. Вы можете проверить api-ресурсы вашего кластера k8s.
$kubectl api-resources | grep deployments
deployments deploy apps true Deployment
#kubectl api-versions | grep apps
apps/v1
Проверьте следующий список изменений kubeless, который использует новую конечную точку apps / v1. Использовать новые приложения / конечную точку 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{})
Сначала получите имя модуля контроллера kubeless:
kubectl -n kubeless get pods
Вы можете получить логи из контроллера Kubeles:
kubectl logs -n kubeless -c kubeless-function-controller kubeless-controller-manager-5dc8f64bb7-b9x4r