Как исправить ошибку 'Ошибка операции [get] для вида [pod] с именем [spark-wordcount-driver] в пространстве имен [non-default-namespace] - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь запустить простое приложение для подсчета слов в Spark в Kubernetes.Я получаю следующую проблему.

Caused by: io.fabric8.kubernetes.client.KubernetesClientException: Operation: [get]  for kind: [Pod]  with name: [spark-wordcount-1545506479587-driver]  in namespace: [non-default-namespace]  failed.
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:62)
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:71)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:228)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:184)
    at org.apache.spark.scheduler.cluster.k8s.ExecutorPodsAllocator$$anonfun$1.apply(ExecutorPodsAllocator.scala:57)
    at org.apache.spark.scheduler.cluster.k8s.ExecutorPodsAllocator$$anonfun$1.apply(ExecutorPodsAllocator.scala:55)
    at scala.Option.map(Option.scala:146)
    at org.apache.spark.scheduler.cluster.k8s.ExecutorPodsAllocator.<init>(ExecutorPodsAllocator.scala:55)
    at org.apache.spark.scheduler.cluster.k8s.KubernetesClusterManager.createSchedulerBackend(KubernetesClusterManager.scala:89)
    at org.apache.spark.SparkContext$.org$apache$spark$SparkContext$$createTaskScheduler(SparkContext.scala:2788)
    ... 20 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)

Я выполнил все действия, указанные в Настройка RBAC .Единственное, что я не смог сделать, так это то, что не смог создать искрящую роль связывания кластеров, поскольку у меня нет доступа к пространству имен по умолчанию.Вместо этого я создаю связывание ролей.

kubectl create rolebinding spark-role --clusterrole=edit --serviceaccount=non-default-namespace:spark --namespace=non-default-namespace

Я использую следующую команду spark-submit.

spark-submit \
 --verbose \
 --master k8s://<cluster-ip>:<port> \
 --deploy-mode cluster --supervise \
 --name spark-wordcount \
 --class WordCount \
 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-test \
 --conf spark.kubernetes.driver.limit.cores=1 \
 --conf spark.kubernetes.executor.limit.cores=1 \
 --conf spark.executor.instances=1 \
 --conf spark.kubernetes.container.image=<image> \
 --conf spark.kubernetes.namespace=non-default-namespace \
 --conf spark.kubernetes.driver.pod.name=spark-wordcount-driver \
 local:///opt/spark/work-dir/spark-k8s-1.0-SNAPSHOT.jar

Обновление: мне удалось устранить первую проблему SockerTimeoutException.У меня не было определенной сетевой политики, поэтому водитель и исполнители не могли общаться друг с другом.Это было причиной, почему это было время ожидания.Я изменил сетевую политику с default-deny-all на allow-all для входа и выхода, и исключение тайм-аута прошло.Однако я все еще получаю сообщение Операция get for kind pod not found с последующим исключением.

Caused by: java.net.UnknownHostException: kubernetes.default.svc: Try again

Будем благодарны за любые предложения или помощь.

1 Ответ

0 голосов
/ 19 мая 2019

Это потому, что ваш днс не может разрешить.kubernetes.default.svc.Что в свою очередь может быть проблемой вашей сети и iptables.

запустите это на определенном узле

kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools   

и отметьте

nslookup  kubernetes.default.svc
...