Вопрос или проблема
Я пытаюсь запустить Spark connect на Kubernetes. Пробелы имен в моем Kubernetes следующие:
root@master-node:~# kubectl get namespaces
NAME STATUS AGE
default Active 17h
kube-node-lease Active 17h
kube-public Active 17h
kube-system Active 17h
Я пытаюсь запустить spark connect на Kubernetes следующим образом:
./spark-3.5.1-bin-hadoop3/sbin/start-connect-server.sh --packages org.apache.spark:spark-connect_2.12:3.5.1,com.microsoft.azure:spark-mssql-connector_2.12:1.2.0 --conf spark.ui.port=4041 --driver-memory 8g --master k8s://https://172.22.0.80:6443 --conf spark.kubernetes.container.image=apache/spark-py --conf spark.kubernetes.namespace=default
Чтобы получить статус подов
root@master-node:~# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
spark-connect-server-1ab49692f56b85fe-exec-1 0/1 ContainerCreating 0 9m56s
spark-connect-server-1ab49692f56b85fe-exec-2 0/1 ContainerCreating 0 9m56s
root@master-node:~#
Я не уверен, почему он всегда создает два пода и всегда остается в состоянии ContainerCreating
Описание пода
root@master-node:~# kubectl describe pod spark-connect-server-1ab49692f56b85fe-exec-1
Name: spark-connect-server-1ab49692f56b85fe-exec-1
Namespace: default
Priority: 0
Service Account: default
Node: master-node/172.22.0.80
Start Time: Mon, 04 Nov 2024 07:55:19 +0330
Labels: spark-app-name=spark-connect-server
spark-app-selector=spark-9939557601604134993bed0957e51c4f
…..
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 10m default-scheduler Успешно назначен default/spark-connect-server-1ab49692f56b85fe-exec-1 на master-node
Warning FailedCreatePodSandBox 10m kubelet Не удалось создать песочницу пода: rpc ошибка: код = Неизвестно, описание = не удалось
создать песочницу контейнера "4f3673b7b5451dfed45fa2ed5cd230bbaa64ddd997633f8933c052f20a1bfd36" для пода "spark-connect-server-1ab49692f56b85fe
-exec-1": networkPlugin cni не удалось настроить сеть пода "spark-connect-server-1ab49692f56b85fe-exec-1_default": тип плагина="flannel" не удался (добавить): loadFlannelSubnetEnv не удался: открыть /run/flannel/subnet.env: нет такого файла или директории
Warning FailedCreatePodSandBox 10m kubelet
Normal SandboxChanged 5m56s (x241 over 10m) kubelet Песочница пода изменилась, она будет убита и пересоздана.
Warning FailedCreatePodSandBox 56s (x473 over 10m) kubelet (объединено из похожих событий): Не удалось создать песочницу пода: rpc ошибка
: код = Неизвестно, описание = не удалось настроить песочницу контейнера "4c6bf46f5379300fed39f569d46c3bfa7e7c845ec11321b2618b3c15adce60ed" для пода "spark
-connect-server-1ab49692f56b85fe-exec-1": networkPlugin cni не удалось настроить сеть пода "spark-connect-server-1ab49692f56b85fe-exec-1_default": тип плагина="flannel" не удался (добавить): loadFlannelSubnetEnv не удался: открыть /run/flannel/subnet.env: нет такого файла или директории
У меня возникает ошибка, связанная с пространством имен flannel. Я удалял эти ресурсы ранее, и я не уверен, почему возникает эта ошибка. Сброс и инициализация кластера не решают ошибку
Ответ или решение
Проблема, с которой вы сталкиваетесь, связана с конфигурацией сети в вашем кластере Kubernetes, а именно с недоступностью плагина сети Flannel. Ваша ошибка говорит о том, что в процессе создания пода, система не может найти файл конфигурации subnet.env
, который необходим для правильной работы Flannel.
Причины проблемы
-
Удаление пространства имен Flannel: Если пространство имен, связанное с Flannel, было удалено, это может привести к поломке сетевой настройки, так как Flannel не сможет правильно настроить сеть для создаваемых подов. Flannel использует
subnet.env
для получения информации о подсетях, которые он должен управлять. -
Отсутствие файла конфигурации: Сообщение об ошибке указывает на то, что файл
/run/flannel/subnet.env
отсутствует. Это критично для настройки сети Flannel, поскольку поды не могут быть правильно сопоставлены с сетевыми интерфейсами без этой информации. -
Состояние контейнера: Поды остаются в состоянии
ContainerCreating
, что говорит о том, что они не могут быть достаточно инициализированы из-за сетевых ошибок.
Решения
-
Проверка состояния Flannel:
-
Убедитесь, что Flannel установлен и работает в вашем кластере. Используйте команду:
kubectl get pods -n kube-system
-
Посмотрите, есть ли поды Flannel и в каком они состоянии. Если они находятся в состоянии ошибки, следует их перезапустить или переустановить.
-
-
Переустановка Flannel:
-
Если Flannel не работает или его нет, попробуйте переустановить его. Вы можете использовать следующую команду для установки Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel.yml
-
После установки проверьте, создался ли файл
/run/flannel/subnet.env
.
-
-
Проверка конфигурации CNI:
- Убедитесь, что конфигурация CNI (Container Network Interface) правильно настроена. Проверьте все конфигурации в
/etc/cni/net.d/
.
- Убедитесь, что конфигурация CNI (Container Network Interface) правильно настроена. Проверьте все конфигурации в
-
Проверка журналов:
-
Проверьте журналы kubelet на вашем узле для выявления проблем:
journalctl -u kubelet
-
-
Сброс кластера: Если ни одно из вышеперечисленных решений не сработало, возможно, стоит выполнить сброс вашего кластера. Однако это должно рассматриваться как крайняя мера, поскольку приведет к удалению всех ресурсов кластера.
Заключение
Проблема, с которой вы столкнулись, может быть решена путем восстановления работы Flannel и проверки его конфигурации в вашем кластере. Следуйте шагам, чтобы диагностировать и исправить ситуацию. Если проблема остается, возможно, потребуется более глубокий анализ логов и состояния ваших ресурсов Kubernetes.