Rancher2.1从搭建集群到pipeline部署项目

栏目: Java · 发布时间: 3年前

内容简介:按照上面的文档进行配置和安装,docker所需要的daemon.json直接使用下面的json代码。我搭设的是1server2master2node的集群 ,选择好角色,粘贴至各主机去运行,在高级选项中写上对应的主机外网ip;master只选择etcd和control,node只选择worker;搭多各master实现高可用也是没问题的。
  • 安装Rancher 2.0

基础环境配置及安装文档

按照上面的文档进行配置和安装,docker所需要的daemon.json直接使用下面的json代码。

要求(列出大致要求,具体步骤特别是 docker 安装部分参照上面的基础环境配置):
- CPU: 4C;
- 内存:8G以上(亲测16G比较舒服,4G的也可以吧,但是部署应用基本上起不来3个Pod);
- Centos/RedHat Linux 7.5+(64位);
- Docker 17.03.2;(用其他版本的立马重新装吧)
- 配好主机名和host,关防护墙和selinux;(/etc/hosts和/etc/hostname)
- 配置Docker镜像加速地址等信息 /etc/docker/daemon.json,如下代码
- 使用非root账户
- 主机名只支持包含 - 和 .(中横线和点)两种特殊符号,不能重复
复制代码
Rancher2.1从搭建集群到pipeline部署项目
# 创建 /etc/docker/daemon.json
{
   "max-concurrent-downloads": 3,
    "max-concurrent-uploads": 5,
    "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://IP:PORT/"],
    "storage-driver": "overlay2",
    "storage-opts": ["overlay2.override_kernel_check=true"],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "3"
    }
}


复制代码
# 配置好环境后执行下面命令创建rancher server(这里需要点耐心等等)
sudo docker run -d --restart=unless-stopped -p 8888:80 -p 8443:443 rancher/rancher

同机子 端口冲突
复制代码
  • 创建第一个集群搭设集群
IP 角色
192.168.242.80 rancher server
192.168.242.81 master1
192.168.242.82 master2
192.168.242.83 node1
192.168.242.84 node2

我搭设的是1server2master2node的集群 ,选择好角色,粘贴至各主机去运行,在高级选项中写上对应的主机外网ip;master只选择etcd和control,node只选择worker;搭多各master实现高可用也是没问题的。

Rancher2.1从搭建集群到pipeline部署项目
  • rke && import && vsphere

2. rancher2.0中K8s Dashbord的安装

rancher2.0 和之前不一样的地方之一就是没有原生Dashboard,需要我们手动安装。

手动安装Dashbord之前需要安装好kubectl。

  • 安装kubectl

    kubectl可以按照官方文档来,如果不能科学上网,可以使用rancher提供的安装包,步骤如下:

    wget -O kubectl https://www.cnrancher.com/download/kubectl/kubectl_amd64-linux
    
    chmod +x ./kubectl
    
    sudo mv ./kubectl /usr/local/bin/kubectl
    
    kubectl cluster-info
    
    kubectl get all
    
    kubectl get nodes
    
    kubectl get nodes --all-namespaces
    
    # kebectl如果安装好执行无效 检查~/.kube/kubeconfig 文件有没有从集群复制过来
    
    复制代码
    Rancher2.1从搭建集群到pipeline部署项目
  • 手动安装Dashbord目前我尝试过两种方法,下面分别进行介绍。

  • 方法1:

使用github上的教程手动安装

Deploy kubernetes-dashboard on Rancher 2.0 cluster exposed using NodePort

其中Step1是安装和验证kubectl。Step2部署dashbord,如果不能翻墙获取不到dashbord镜像。 可以修改其中yaml文件的镜像源,这里提供一个其他人上传的源

siriuszg/kubernetes-dashboard-amd64:v1.10.0
复制代码

或者直接使用这份写好的

kubectl apply -f https://raw.githubusercontent.com/usernamecantbeXXX/kubernetes-dashboard/master/kubernetes-dashboard.yaml
复制代码

然后再Step4处,注意dashbord.yml中name是admin-user,后面生成token的describe secret的命令也需要写上对应的名字。

  • 方法2:

使用rancher2.1的的应用商店做dashbord部署,到目前(18/11/13)商店上dashbord的版本还是0.6.8或者0.8, 所以我修改了镜像源为 v.10.0版本

Rancher2.1从搭建集群到pipeline部署项目

按应用商店来搭建操作很简便,接下来只需要生成token:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard | awk '{print $1}')
复制代码

ps:

#token无限过期时间,修改工作负载dahbord的 yaml文件的token-ttl
  - args:
- --auto-generate-certificates
- --token-ttl=0

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1wbHNxdiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImY4ZjhiODBmLWUzMzMtMTFlOC1iZjgwLTAwNTA1NmExZWEyMyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.a6UIUisGF9bsQ9Od3DVP0CyeZBoSQ_sO64LrEc9GYfBpcRCRpoXDDqOGGgJb54mu0hNkykCKUdY1dqJHDIjebrsKUKfno-yFR9JXhUItPQrUT6zhHeEzWGjaywe0dGoPdBNcU6C98FHSgWMo1PmTGxXX2odm1fwpSvLLqADmfc8MQEbPbB58B1Z6e0SyNXx6i6hIT6bSqtWznqmzsRWJHnOxHkwaCTNRwm1G1QkrEcC0l2sChWsnkEDvTR2gCRRa5pU0vqBwBRxq6z2h5shRZt0pgiQ_pV1hWcif1nNCnN4iZr2eEkSOpPec5WMwCJ62otBNHBsSRn9JcsRel2rb-A
复制代码

3. Pipeline授权设置

3.1 相关配置

Configuring Pipelines

Gitlab版本需要在9以上,授权账号必须是项目的Maintainer(gitlab 8 里面是master),在gitlab中创建application,callbackurl在rancher上复制

Rancher2.1从搭建集群到pipeline部署项目
Rancher2.1从搭建集群到pipeline部署项目

配置完成后启用并显示仓库列表

Rancher2.1从搭建集群到pipeline部署项目

配置镜像仓库

Rancher2.1从搭建集群到pipeline部署项目

3.2 部署流水线配置

选择一个项目,点击 编辑配置

Rancher2.1从搭建集群到pipeline部署项目

如下图,进入修改流水线配置的界面,可以选择对应的分支进行配置,步骤1-Clone由rancher自动写好,步骤2,3,4修改自己配置,大家按需修改,我配置的流程分别是2-build(maven构建),3-publish(打包镜像并推送私有镜像仓库),4-deploy(调用rancherAPI,更新Pod镜像,完成项目自动部署)。

Rancher2.1从搭建集群到pipeline部署项目

3.2.1 运行脚本的当前目录

在配置rancher pipeline的时候,我们会执行一些 linux 命令,那么首先要搞清楚,命令执行的当前目录的层级。

rancher的pipeline,运行起来后也是一个Pod,构建也是基于Jenkins。

在集群的Default目录下的工作负载,可以找到一个x-xxxx-pipeline的命名空间,其中有一个jenkins的Pod,这个pod启用pipeline功能后就会出现,一直存在。

Rancher2.1从搭建集群到pipeline部署项目

当我们运行一个pipeline后,会生成一个jenkins-slave-xxxxx的pod,展开pod节点可查看pod的日志,也可以进入pod中执行命令,进去这个pod的控制台,执行

cd  ./workspace/pipeline_p-cdk7j-13/
复制代码

可以看到,pipeline第一步clone代码就是在该目录下进行的,这个也是我们在配置pipeline运行脚本的当前目录。

Rancher2.1从搭建集群到pipeline部署项目
Rancher2.1从搭建集群到pipeline部署项目

由于jenkins-slave-xxx这个pod是运行pipeline后动态创建的,属于用后即焚的模式,所以这个pod中拉下来的代码编译后的jar包或者前端dist目录静态文件,都要移动到将要打包的镜像目录中。

3.2.2 build配置

那么知道了当前目录,就可以大胆的开始写配置了

第一步 build,选择的类型是运行脚本,执行mvn clean package命令,选用的镜像是我自己打包maven3.6镜像。 如果公司有自己的maven私服,那么打包maven镜像的时候,可以设置好setting.xml文件,上传到前面配置的harbor仓库就可以了;如果是自己的demo项目,那么也可以换成公共的maven:latest;这种情况下也可以把setting.xml上传到代码根目录中,在复制出来放到maven中,适用于不想打包maven镜像,但又有公司私服的情况

mkdir -p /root/.m2 && mv setting.xml /root/.m2
复制代码

值得注意的是公共的maven:latest镜像,其jdk环境是openjdk,一些老项目用openjdk可能会有一些奇奇怪怪的问题,无法通过mvn编译,我就遇到过项目中如果有图片验证码的时候,base64找不到jar包的情况,所以我才自己打包了个Oracle jdk的maven。

另外,mvn package 后面最好不要带 -U,带上会去检查依赖的版本是否最新,会很慢很慢的。

Rancher2.1从搭建集群到pipeline部署项目

3.2.3 publish配置

这一步主要是用build构建后的包,根据代码中的Dockerfile打包成镜像,当前目录依然是git clone后的目录,指定Dockerfile的相对位置,并命名打包后的惊醒名,其中镜像名中的:${CICD_EXECUTION_SEQUENCE}是rancher提供的变量,我用这个来区分镜像的版本,有好几个,具体大家输入后去选择,也可以查看官方的文档。

Rancher2.1从搭建集群到pipeline部署项目

下面讲下dockerfile的配置:

一般的web后台项目,mvn编译后把jar包放到tomcat目录中,其中的base_image是cnetos7+ tomcat8+oraclejdk8

Rancher2.1从搭建集群到pipeline部署项目

而springboot项目由于内置了tomcat,就直接复制出jar到镜像目录中,然后直接运行

Rancher2.1从搭建集群到pipeline部署项目

对于前端的vue项目,基础镜像用的是dockerhub上的公共nodejs镜像node:current-slim,同样先把代码复制出来,再npm install,最后npm start(npm run dev),我是直接去跑dev环境。

ps:如果是build出静态文件的可以再打包个nginx镜像

Rancher2.1从搭建集群到pipeline部署项目

另外,对于vue项目用dev环境的要开放下host限制

/build/webpack.dev.conf.js

watchOptions: {
  poll: config.dev.poll,
},
# 1.不检查host
disableHostCheck: true
复制代码

/config/index.js

proxyTable: {
  '/updance': {
  # 2.target指定为后台pod节点的ip+port
    target: 'http://192.168.242.83:32583',
    changeOrigin: true,
    pathRewrite: {
      '^/updance': '/updance'
    }
  }
},
# 3.host设置为0.0.0.0
host: '0.0.0.0'
复制代码

3.2.4 deploy配置

最后一步,调用rancher的API更新pod节点,这里基础镜像选什么都可以了,因为不需要依赖镜像

Rancher2.1从搭建集群到pipeline部署项目
curl -k -u token-zcgsp:****************************************** \
-X PUT \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"containers":[{"image":"harbor.bluemoon.com.cn/rancher/buying-center-parent:'${CICD_EXECUTION_SEQUENCE}'","name":"snc-backed"}]}' \
'https://192.168.242.80/v3/project/c-zrq7x:p-kql7m/workloads/deployment:default:snc-backed'
复制代码

rancher的API再pod节点的更多选项查看

Rancher2.1从搭建集群到pipeline部署项目
Rancher2.1从搭建集群到pipeline部署项目

3.3 运行pipeline

配置完成后,相关的配置会生成一份 .rancher-pipeline.yml 文件,可以下载到本地,也可以上传到对应的代码分支。

执行之前要先创建号pod节点,后面最后一步的API修改才能成功执行

执行过程可以实时观看运行日志, 各步骤成功执行就是绿色的,红色的话就是失败,最后查看pod节点,可以看到pod自动更新。

Rancher2.1从搭建集群到pipeline部署项目

以上就是一个完整的流程,溜了溜了,玩奥德赛去。。


以上所述就是小编给大家介绍的《Rancher2.1从搭建集群到pipeline部署项目》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具