Spark on kubernetes环境搭建
实验要求
键 | 值 |
---|---|
kubernetes集群 | 版本1.15 |
spark | 版本 2.4.5 |
私建docker仓库 | 已经被kubernetes集群的docker信任 |
jdk | 1.8 |
scala | 2.12 |
构建kubernetes
- 单机测试的话,可以使用minikube
- 为每一台kubernetes节点,下载jdk和Scala,并配置JAVA_HOME和SCALA_HOME
搭建私有docker镜像仓库
- 准备一台单独的设备安装docker,或者,在kubernetes集群中寻找一台设备
- 配置insecure docker仓库,docker镜像仓库本身,以及每一台kubernetes集群中的节点都需要配置
# 编辑/etc/docker/daemon.json,内容如下 { "insecure-registries": ["${设备的外网IP}:5000"] }
- 重启docker,docker镜像仓库所在的设备和kubernetes的每一台设备都需要重启docker
systemctl restart docker.service
- 启动docker 私有仓库
docker run -d --restart=always --name registry-test -p 5000:5000 registry:2
构建spark docker images
- 在一台已经安装了docker的设备上下载spark
wget http://apache.communilink.net/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz
- build spark docker镜像
tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz cd spark-2.4.5-bin-hadoop2.7 # ./bin/docker-image-tool.sh -r ${你的镜像仓库地址} -t ${你的镜像tag} build ./bin/docker-image-tool.sh -r 10.211.55.24:5000 -t v1 build
- 将build好的image导入到自建的docker镜像仓库中
# 方式一 docker push ${你的镜像} # 方式二 ./bin/docker-image-tool.sh -r 10.211.55.24:5000 -t v1 push # 方式三 docker save 10.211.55.24:5000/spark:v1 > tmp.tar scp tmp.tar ${你的镜像仓库}/${path} ssh ${你的镜像仓库} docker load < 10.211.55.24:5000/spark:v1 docker push 10.211.55.24:5000/spark:v1
为spark程序创建serviceaccount和对应的rbac
- 为spark应用程序构建运行需要的角色和账户
kubectl create serviceaccount spark kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default
运行spark的example sparkPi
- 在kubernetes master上运行spark提交脚本
- 在kubernetes master运行proxy
kubectl proxy
- spark运行脚本
bin/spark-submit \ --master k8s://http://127.0.0.1:8001 \ --deploy-mode cluster \ --name spark-pi \ --class org.apache.spark.examples.SparkPi \ --conf spark.executor.instances=5 \ --conf spark.kubernetes.container.image=${你的镜像仓库IP地址}/apache/spark:v1 \ --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \ /opt/spark/examples/jars/spark-examples_2.11-2.4.5.jar
可能会遇到的问题
- spark无法与kubernetes apiserver连接,或者应该是java无法与apiserver连接
- 报错
Exception in thread "main" io.fabric8.kub
- 报错