Linkis on kubernetes

#重点解决问题
1.每个人在部署过程中，都会遇到包冲突，操作系统不兼容，openjdk，hotspot 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

#部署文档
    
##基础镜像及各服务镜像编译方法

  目前所有微服务镜像都上传到dockerhub，https://hub.docker.com/repository/docker/wedatasphere/linkis
  
  出于对虚机部署版本的考虑，新增了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=wedatasphere \
       --docker-password=***** \
       --docker-email=wedatasphere@webank.com
  
  二.NFS/ceph 搭建
  
     搭建NFS或者ceph完成后，publicservice等微服务的deployment需要修改nfs的地址
  
  三.基础镜像创建文件（使用官方维护的镜像可以跳过该步骤）
   自己制作基础镜像方法如下：
   *  环境变量设置
   
        > 设置harbor的地址环境变量
        ```
        export HARBOR_LINKIS=
        ```
      
   * 基础镜像编译打包
        > 打包
        ```
        cd Linkis/emr-base
        docker build -t $HARBOR_LINKIS/linkis:emr-base-spark2.4.4 .
        ```
        > 推送
        ```
        docker push  $HARBOR_LINKIS/linkis:emr-base-spark2.4.4 
        ```
   * 基础依赖包编译
        ```
        mvn clean install -Dmaven.test.skip=true
        ```

   * 替换各个微服务Dockerfile的基础镜像为自己的私服地址
        ```
        find . -name Dockerfile | xargs grep -rl "FROM wedatasphere/linkis" | xargs sed -i "" "s?FROM wedatasphere/linkis?FROM $HARBOR_LINKIS/linkis?"
        find . -name "*.yaml" | xargs grep -rl "image: wedatasphere/linkis" | xargs sed -i "" "s?image: wedatasphere/linkis?image: $HARBOR_LINKIS/linkis?"
        ```
   
   * 编译各微服务镜像
   
        > 各个微服务basedir下面有对应 module 的 Dockerfile
    与公司内部的CI/CD集成，可以通过mvn docker插件直接编译docker镜像
        ```
        sh k8s/package.sh
        sh k8s/build.sh
        sh k8s/push.sh
        ```
     
  四、K8S部署
    
    1.大数据环境配置
      > 主要涉及 hadoop，hive，spark环境配置，需要将几个组件的配置在k8s各个节点上
      
      ｜ 组件 ｜ 版本 |  节点目录 ｜
      ｜ ---  | --- |  ---    |
      | hadoop | 2.7.7 | /opt/hadoop/hadoop-2.7.7 |
      | hive  | 2.3.6  | /opt/hive/apache-hive-2.3.6-bin |
      | spark | 2.4    | /opt/spark/spark-2.4.4-bin-hadoop2.7 |   
      
    2.启动eureka
      eureka部署在k8s的任意一个node节点上就可以
      启动eureka成功后
      修改Linkis/k8s/linkis-eureka-configmap.yaml中的eurekaUrl
      
    3.修改k8s目录下的linkis-*- configmap.yaml
      特别注意配置文件的正确性，避免后续部署的低级问题出现，如数据库连接不上，hdfs地址不正确等等
      例如gateway/linkis.properties 复制到k8s/linkis-gateway-configmap.yaml
      
    4.运行k8s目录下的 
      sh init.sh
      观察eureka上注册的服务，一共22个，都启动成功基本就没有问题
