blob: c4a6a8323c4b8f73f5f5f3666b9e32ac628a58a5 [file] [log] [blame]
Linkis on kubernetes
#重点解决问题
1.每个人在部署过程中,都会遇到包冲突,操作系统不兼容,openjdkhotspot jdk兼容问题,docker交付可以从根本上解决这些问题
2.docker基于cgroup资源隔离,共享文件系统,namespace 可以轻量限制计算资源,秒级扩缩容
例如:限制某个进程只能使用CPU一个核的20%资源
cd /sys/fs/cgroup/cpu
touch test
$ echo 10000 > cpu.cfs_quota_us
$ echo 50000 > cpu.cfs_period_us
启动一个进程,请不要在生产做这样操作!!!!
$ while :; do :; done &
记录当前进程Id
$ echo pid >> tasks
#部署文档
##基础镜像及各服务镜像编译方法
目前所有微服务镜像都上传到dockerhubhttps://hub.docker.com/repository/docker/zhangrong1027/linkis,webank
申请的镜像仓库下来,我们会持续维护docker到新镜像仓库
出于对虚机部署版本的考虑,新增了pom_k8s.xml,默认打包方式跟之前保持一致,如果想要自己编译镜像,需要引用pom_k8s.xml
mvn clean package -f gateway/gateway-ujes-support/pom_k8s.xml
一.创建kubernetes docker secret
k8s/registry.yaml 修改对应harbor的账号,密码,镜像仓库地址
或者手动创建secret,后续拉取镜像使用,私有docker仓库请修改成私有reposity地址
$kubectl create secret docker-registry registry-key \
--docker-server=https://hub.docker.com \
--docker-username=zhangrong1027 \
--docker-password=***** \
--docker-email=brian.rongzhang@gmail.com
二.NFS/ceph 搭建
搭建NFS或者ceph完成后,publicservice等微服务的deployment需要修改nfs的地址
三.基础镜像创建文件(使用官方维护的镜像可以跳过该步骤)
自己制作基础镜像方法如下:
基础镜像基于centos最新版本
目录结构如下
--linkis
--emr-base
--Dockerfile
--README.MD
--hadoop
--etc
--conf
-- hdfs-site.xml
-- yarn-site.xml
-- map-red.xml
...
-- hive
--conf
-- jdk-8u211-linux-x64.tar.gz
-- scala-2.11.0.tgz
-- spark-2.4.4-bin-hadoop2.7.tgz
### 基础镜像编译
cd Linkis/emr-base
docker build -t zhangrong1027/linkis:emr-base-spark2.4.4 .
推送基础镜像到harbor
docker push zhangrong1027/linkis:emr-base-spark2.4.4
### 编译各微服务镜像
各个微服务basedir下面有对应module dockerfile
与公司内部的CI/CD集成,可以通过mvn docker插件直接编译docker 镜像
编译
Linkis 根目录执行
mvn clean package -f gateway/gateway-ujes-support/pom_k8s.xml
docker images | grep linkis-gateway
可以看到已经编译好的镜像
docker push zhangrong1027/linkis:linkis-gateway
四、K8S部署
1.启动eureka
eureka部署在k8s的任意一个node节点上就可以
启动eureka成功后
修改Linkis/k8s/linkis-eureka-configmap.yaml中的eurekaUrl
2.修改k8s目录下的linkis-*- configmap.yaml
特别注意配置文件的正确性,避免后续部署的低级问题出现,如数据库连接不上,hdfs地址不正确等等
例如gateway/linkis.properties 复制到k8s/linkis-gateway-configmap.yaml
3.运行k8s目录下的
sh init.sh
观察eureka上注册的服务,一共22个,都启动成功基本就没有问题
五、spark 是虚机部署的情况下,k8s环境虚拟2层网络打通虚机 ip
静态路由+iptables/netfilter地址伪装
executorpodsvc 网络通
executor添加静态路由表
route add -net 127.0.0.1 netmask 255.255.0.0 gw 127.0.0.1
route add -net 127.0.0.1 netmask 255.255.0.0 gw 127.0.0.1
k8s node节点上做ip masque
iptables -t nat -A POSTROUTING -s 127.0.0.1/24 -d 127.0.0.1/16 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 127.0.0.1/24 -d 127.0.0.1/12 -j MASQUERADE