Apache spark 如何在向Kubernetes本地提交Spark作业(2.3)时使用本地Docker映像?

Apache spark 如何在向Kubernetes本地提交Spark作业(2.3)时使用本地Docker映像?,apache-spark,docker,kubernetes,Apache Spark,Docker,Kubernetes,我正在尝试使用ApacheSpark2.3在Kubernetes上提交一个Spark作业。 当我在Docker Hub(适用于Spark 2.2)上使用Docker映像时,它可以工作: bin/spark-submit \ --master k8s://http://localhost:8080 \ --deploy-mode cluster \ --name spark-pi \ --class org.apache.spark.examples.SparkPi

我正在尝试使用ApacheSpark2.3在Kubernetes上提交一个Spark作业。 当我在Docker Hub(适用于Spark 2.2)上使用Docker映像时,它可以工作:

bin/spark-submit \
    --master k8s://http://localhost:8080 \
    --deploy-mode cluster \
    --name spark-pi \
    --class org.apache.spark.examples.SparkPi \
    --conf spark.executor.instances=5 \
    --conf spark.kubernetes.container.image=kubespark/spark-driver:v2.2.0-kubernetes-0.5.0 \
    local:///home/fedora/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar 
但是,当我尝试建立本地Docker形象时

sudo docker build -t spark:2.3 -f kubernetes/dockerfiles/spark/Dockerfile .
并将作业提交为:

bin/spark-submit \
--master k8s://http://localhost:8080 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=spark:2.3 \
local:///home/fedora/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar
我得到以下错误即“repository docker.io/spark not found:不存在或没有拉取访问,reason=ErrImagePull,additionalProperties={})”

此外,我还尝试运行本地Docker注册表,如中所述:

我可以成功地做到这一点: docker pull localhost:5000/spark:2.3

但是,当我提交Spark作业时:

bin/spark-submit \
    --master k8s://http://localhost:8080 \
    --deploy-mode cluster \
    --name spark-pi \
    --class org.apache.spark.examples.SparkPi \
    --conf spark.executor.instances=5 \
    --conf spark.kubernetes.container.image=localhost:5000/spark:2.3 \
    local:///home/fedora/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar
我又犯了一个错误:

status: [ContainerStatus(containerID=null, image=localhost:5000/spark:2.3, imageID=, lastState=ContainerState(running=null, terminated=null, waiting=null, additionalProperties={}), name=spark-kubernetes-driver, ready=false, restartCount=0, state=ContainerState(running=null, terminated=null, waiting=ContainerStateWaiting(message=rpc error: code = 2 desc = Error while pulling image: Get http://localhost:5000/v1/repositories/spark/images: dial tcp [::1]:5000: getsockopt: connection refused, reason=ErrImagePull, additionalProperties={}), additionalProperties={}), additionalProperties={})]
Spark 2.3中有没有一种方法可以在本地向Kubernetes提交作业时使用本地Docker映像


提前谢谢。

我猜您使用了类似于设置本地Kubernetes群集的方法,并且在大多数情况下使用虚拟机生成群集。 所以,当Kubernetes试图从
localhost
地址提取映像时,它连接到虚拟机本地地址,而不是您的计算机地址。此外,您的本地注册表仅绑定在本地主机上,无法从虚拟机访问

修复的想法是让Kubernetes可以访问本地docker注册表,并允许从本地不安全的注册表中提取图像

因此,首先,将PC上的docker注册表绑定到所有接口:

docker run-d-p 0.0.0.0:5000:5000--重新启动=始终--名称注册表:2

然后,检查电脑的本地IP地址。它将是172.X.X.X或10.X.X.X。检查的方式取决于您的操作系统,所以如果您不知道如何获取,只需通过谷歌搜索即可

之后,使用附加选项启动minikube:

minikube start--unsecure registry=“:5000”
,其中“您的本地ip地址”是您的本地ip地址

现在,您可以尝试使用注册表的新地址运行spark作业,K8s已经能够下载您的图像:


spark.kubernetes.container.image=:5000/spark:2.3

非常感谢您的回复@AntonKostenko。实际上,我在OpenStack上使用Kubernetes服务(称为Magnum)。我可以使用kubectl命令。我将尽力了解,我是否可以采用与您建议的解决方案类似的解决方案。对于不使用minikube的情况,您是否有建议。对于Magnum,您可以执行相同的操作,但运行minikube除外。在一个Magnum配置模板中,我看到了选项。该选项也在docker配置中使用。所以试着用它。我试着用localhost:5000,在ubuntu@AntonKostenko上不能用minikube
bin/spark-submit \
    --master k8s://http://localhost:8080 \
    --deploy-mode cluster \
    --name spark-pi \
    --class org.apache.spark.examples.SparkPi \
    --conf spark.executor.instances=5 \
    --conf spark.kubernetes.container.image=localhost:5000/spark:2.3 \
    local:///home/fedora/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar
status: [ContainerStatus(containerID=null, image=localhost:5000/spark:2.3, imageID=, lastState=ContainerState(running=null, terminated=null, waiting=null, additionalProperties={}), name=spark-kubernetes-driver, ready=false, restartCount=0, state=ContainerState(running=null, terminated=null, waiting=ContainerStateWaiting(message=rpc error: code = 2 desc = Error while pulling image: Get http://localhost:5000/v1/repositories/spark/images: dial tcp [::1]:5000: getsockopt: connection refused, reason=ErrImagePull, additionalProperties={}), additionalProperties={}), additionalProperties={})]