Spark on k8s Operator 部署安装

1. 背景

受限于公司内网环境,无法构建梯子及部分网络策略,不能使用网络资源直接部署,需要手动编译安装

2. 环境准备

centos 7

Kubernetes > 1.18

helm > 3

KubeSphere > 3.0

git

harbor

golang(第4步可选)

3. 镜像编译

受限于内网网络环境及大陆网络情况,采用阿里云容器镜像服务-------海外机器构建镜像并拉取到本地,上传harbor

1) 编写spark基础镜像工程

vim DockerfileFROM gcr.io/spark-operator/spark:v3.0.0:wq

2) 编写spark-operator基础镜像工程

vim DockerfileFROM gcr.io/spark-operator/spark-operator:v1beta2-1.2.0-3.0.0:wq

3) 将上述两个dockerfile分别上传至github不同项目工程, eg:

①https://github.com/leihongyang/gcr.io-spark-operator-spark-v3.0.0

②https://github.com/leihongyang/gcr.io-spark-operator-spark-operator-v1beta2-1.2.0-3.0.0

4) 采用阿里云容器镜像服务海外构建

https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

第一步,创建镜像仓库(仓库名称和摘要任意填);

第二步,选择github并绑定自己账号,从git仓库中找到之前的项目工程,创建

第三步,在刚刚的镜像仓库中构建规则,并勾选海外构建,立即构建

另一个镜像同样如此操作

5) 拉取镜像至本地,并修改tag上传至内网harbor

拉取操作如图

## 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark:1.0
## 镜像更名,修改仓库
docker tag registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark:1.0 xxxxx:8000/spark-operator/spark:v3.0.0
## 推送镜像
docker push xxxxx:8000/spark-operator/spark:v3.0.0
## 删除老镜像
docker image rm registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark:1.0

4. spark-operator安装

1) 下载源码

git clone http://10.10.12.117/bigdata/spark-on-k8s-operator.git
cd spark-on-k8s-operator

2) 安装,有两种方式

① yaml 手动模式

​ a. 修改manifest/spark-operator.yaml文件中的image值为之前创建的spark-operator镜像

## 安装crd
kubectl apply -f manifest/crds
## 安装operator的服务账号与授权策略
kubectl apply -f manifest/spark-operator-rbac.yaml
## 安装spark任务的服务账号与授权策略
kubectl apply -f manifest/spark-rbac.yaml
## 安装spark-on-k8s-operator
kubectl apply -f manifest/spark-operator.yaml
② helm chart模式

修改charts/spark-operator-charts/values.yaml文件中的image.repository值为harbor中的spark-operator镜像目录

## 修改相关镜像参数后
helm install -n spark spark charts/spark-operator-chart

3) 安装完成

可以看到启动了一个sparkoperator的deployment,伴随着sparkoperator pod,负责监听spark请求

# kubectl get pods -n spark
NAME                             READY   STATUS      RESTARTS   AGE
sparkoperator-7c57499f7b-6rwcf   1/1     Running     0          23s

4) 运行示例

运行官方自带示例

## 修改examples/spark-pi.yaml中的容器镜像为我们之前创建的spark镜像
## 如下所示, 主要修改spec.image 和 imagePullPolicy
## 其中,需要注意namespace和serviceAccount的对应关系,如果运行不成功,大概率是这两个导致的权限问题apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:name: spark-pinamespace: spark
spec:type: Scalamode: clusterimage: "xxxxx:8000/spark-operator/spark:v3.0.0"imagePullPolicy: IfNotPresentmainClass: org.apache.spark.examples.SparkPimainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0.jar"sparkVersion: "3.0.0"restartPolicy:type: Nevervolumes:- name: "test-volume"hostPath:path: "/tmp"type: Directorydriver:cores: 1coreLimit: "1200m"memory: "512m"labels:version: 3.0.0serviceAccount: sparkoperatorvolumeMounts:- name: "test-volume"mountPath: "/tmp"executor:cores: 1instances: 2memory: "512m"labels:version: 3.0.0volumeMounts:- name: "test-volume"mountPath: "/tmp"

然后运行kubectl执行创建任务

kubectl apply -f examples/spark-pi.yaml

查看结果

# kubectl get pods -n spark-operator
NAME                             READY   STATUS      RESTARTS   AGE
spark-pi-driver                  0/1     Completed   0          2m
sparkoperator-7c57499f7b-6rwcf   1/1     Running     0          23m# kubectl get sparkapplications -n spark-operator
NAME       AGE
spark-pi   2m

容器运行完毕,可以查看容器日志,了解任务详细情况

# kubectl logs spark-pi-driver -n spark-operator
...
...
...
Pi is roughly 3.140515702578513
...## 在许多info日志中看到我们的输出结果

5. sparkctl编译(可选)

# 启用 Go Modules 功能
export GO111MODULE=on
# 配置 GOPROXY 环境变量
export GOPROXY=https://goproxy.io
# 或者
export GOPROXY=https://mirrors.aliyun.com/goproxy/
# 编译sparkctl工具
cd sparkctl && go build -o sparkctl && cp sparkctl /usr/bin/

这个工具是spark-operator在kubectl上的二次封装

更加规范化,简洁的查看spark任务生命周期

6. FAQ

问题1:

User "system:serviceaccount:sparknamespace:spark" cannot list resource "sparkapplications" in API group "sparkoperator.k8s.io" at the cluster scope

原因: sparknamespace 命名空间中的spark对这个api没有访问权限

解决:查看用户是否存在于这个命名空间中,查看用户是否绑定了clusterrole权限(需要edit,或者完全使用manifest下的授权策略)

问题2:只有driver启动,没有excutor执行

原因:一个可能是k8s apiserver未正常运行,一个是镜像有问题。

解决:在apiserver运行正常的情况下,检查spark task driver的日志,若command是spark-operator则是镜像使用错误,换成spark镜像,正确的command是spark-submit

7. 监控

## 需要额外获取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark_monitor:1.0
docker tag registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark_monitor:1.0 xxxxx:8000/spark-operator/spark:v3.0.0-gcs-prometheus
## 然后将运行的spark job中yaml的image从
##      xxxxx:8000/spark-operator/spark:v3.0.0
## 改为
##      xxxxx:8000/spark-operator/spark:v3.0.0-gcs-prometheus
## 在spec下添加以下内容
============================
monitoring:exposeDriverMetrics: trueexposeExecutorMetrics: trueprometheus:jmxExporterJar: "/prometheus/jmx_prometheus_javaagent-0.11.0.jar"port: 8090
============================
## 重新apply[root@k8s-master-1 spark-on-k8s-operator]# kubectl get pods -n spark-operator -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
spark-pi-d457cb78fd3a5777-exec-1   1/1     Running   0          52s   179.10.196.4    k8s-master-1   <none>           <none>
spark-pi-driver                    1/1     Running   0          66s   179.10.69.244   k8s-worker-3   <none>           <none>
sparkoperator-7c57499f7b-6rwcf     1/1     Running   3          13d   179.10.140.6    k8s-worker-2   <none>           <none># curl 179.10.69.244:8090
...
## 获得的就是本次spark任务的运行时资源使用明细
  1/1     Running   0          66s   179.10.69.244   k8s-worker-3   <none>           <none>

sparkoperator-7c57499f7b-6rwcf 1/1 Running 3 13d 179.10.140.6 k8s-worker-2

curl 179.10.69.244:8090

获得的就是本次spark任务的运行时资源使用明细

Spark on k8s Operator 部署安装相关推荐

  1. K8S—二进制部署安装(包含UI界面设置)

    安装步骤 一.准备工作 二.部署单master K8S 2.1 部署etcd集群 master 节点 node 节点(1/2) 查看集群状态 2.2 部署docker引擎 node 节点(1/2) 2 ...

  2. 【网址收藏】spark on k8s operator github地址

    https://github.com/GoogleCloudPlatform/spark-on-k8s-operator

  3. Spark on K8S及history服务部署

    Spark on K8S环境部署细节 https://www.cnblogs.com/lanrish/p/12267623.html spark history helm部署 https://gith ...

  4. Spark On K8S(Standalone模式部署)

    Spark on K8S 的几种模式 Standalone:在 K8S 启动一个长期运行的集群,所有 Job 都通过 spark-submit 向这个集群提交 Kubernetes Native:通过 ...

  5. 使用Spring Boot Operator部署SpringBoot到K8S

    点击关注公众号,实用技术文章及时了解 来源:qingmu.io/2020/04/08/ Spring-Boot-Operator-User-Guide 前言 在Kubernetes中部署spring ...

  6. 通过helm在k8s上部署spark(伪集群版)

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 首先要求你的k8s支持helm.阿里云自带的k8s已经包含了对helm的支持.关于服务器k8s的部分这里不讨论,我们考论如何用一个已经好的k8s来进行 ...

  7. Spark Operator 部署及入门示例

    关于存算分离 目前企业级的大数据应用主流还是采用Yarn或者Mesos来进行资源分配和运行调度的,例如我行目前采用Yarn来进行作业调度,并使用HDFS作为大数据的存储平台,这是典型的计算和存储紧耦合 ...

  8. 1.24版本k8s集群安装部署rook-ceph存储集群

    一.初始花基本环境 1.主机环境信息 系统 主机名 主机IP地址 配置说明 AlmaLinux release 8.6 (Sky Tiger) master01 192.168.3.31 k8s管理节 ...

  9. Spark集群完全分布式安装部署

    Spark集群完全分布式安装部署 下载安装 配置Spark 1spark-envsh配置 2slaves配置 3profile配置 复制到其他节点 测试 总结 Spark集群完全分布式安装部署 本文中 ...

最新文章

  1. 简单总结一下 XSS
  2. 76. 最小覆盖子串(滑动窗口)
  3. 一个易用、易部署的Python遗传算法库
  4. Linux SHELL 学习随笔--for 循环
  5. 大神微服务笔记全过程博客
  6. 高德地图 map.setcenter 动画_娄底三维动画制作公司价格2020行情-立艺数字
  7. 实验四+067+冯艳芳
  8. 堆(基本介绍,代码实现,以及例题)
  9. 【优化求解】基于matlab GUI模拟退火算法求解全局最大值最小值问题【含Matlab源码 1242期】
  10. c语言 指针 地址溢出,堆栈溢出,指针在C中
  11. 编译cwm-recovery(含部分修改步骤)[转]
  12. 作为一名优秀的软件测试工程师,需要具备哪些能力?
  13. Linux系统下安装screen
  14. cbrt c语音_如何在C语言中实现功能重载?
  15. Android手机模拟器旋转快捷键
  16. [高数][高昆轮][高等数学上][第一章-函数与极限]09.连续函数的运算和函数的连续性...
  17. 维特比算法在隐马尔可夫模型中的应用
  18. 支付宝面对面支付(境外)
  19. Python爬虫4.2 — ajax(动态网页数据抓取)用法教程
  20. YOLO系列目标检测算法详解

热门文章

  1. 上市公司内审工作内容有哪些
  2. 滴滴 webapp 5.0 Vue 2.0 重构经验分享
  3. 查看git密码_新电脑配置git和github
  4. 四川大学江安校区计算机学院照片,几张图告诉你四川大学江安校区颜值到底有多高...
  5. access查询mysql_2017计算机二级Access数据库生成表查询教程
  6. cmd查看CPU信息
  7. 快速掌握 jQuery 操作 HTML 节点
  8. 基于 Mixup 数据增强的 LSTM-FCN 时间序列分类学习记录
  9. AI绘画 Midjourney
  10. Git 提示Your branch is up-to-date with 'origin/master'