写点什么

Rancher2.1 从集群搭建到 Pipeline 部署完整教程

2020 年 4 月 23 日

Rancher2.1从集群搭建到Pipeline部署完整教程

编者按:

本文来自 Rancher 用户许先学的投稿。Rancher Kubernetes 管理平台 ,能够让用户在生产环境中轻松快捷的部署和管理容器及 Kubernetes。Rancher 2.x 版本内置的 CI/CD Pipeline,让用户得以快速搭建团队所需的 CI/CD 流水线。本文将分享用户自身的最佳实践,step by step 完成从集群搭建到 Pipeline 部署的完整流程。


1. 搭建 Rancher Server


安装 Rancher 2.0


Rancher 的安装过程很简单,你可以按照官方的基础环境配置及安装文档,进行配置和安装:


https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/basic-environment-configuration/


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 账户

  • 主机名仅只支持包含 - 和 .(中横线和点)两种特殊符号,不能重复


配置要求最好按照官方建议的来:



# 创建 /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 80:80 -p 443:443 rancher/rancher
复制代码


创建第一个集群


快速搭建集群的更详细教程可参照官方文档:


https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/quick-start-guide/#top



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



添加集群


RKE & import & vsphere


2. Rancher2.0 中 K8S Dashboard 的安装


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


手动安装 Dashboard 之前需要安装好 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 文件有没有从集群复制过来
复制代码



手动安装 Dashboard


目前我尝试过两种方法,下面分别进行介绍。


  • 方法 1:


使用 github 上的教程手动安装:


https://gist.github.com/superseb/3a9c0d2e4a60afa3689badb1297e2a44


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


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


或者直接使用这份写好的


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


然后在第四步的地方,注意 dashboard.yml 中 name 是 admin-user,后面生成 token 的 describe secret 的命令也需要写上对应的名字。


  • 方法 2:


使用 Rancher 2.1 的的应用商店做 dashboard 部署,目前为止商店上 dashboard 的版本还是 0.6.8 或者 0.8, 所以我修改了镜像源为 v.10.0 版本



按应用商店来搭建操作很简便,接下来只需要生成 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
复制代码


3. Pipeline 授权设置


3.1 相关配置


Rancher Pipeline 配置的官方文档在此供参考:https://www.cnrancher.com/docs/rancher/v2.x/cn/tools/pipelines/configurations/


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




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



配置镜像仓库:



3.2 部署流水线配置


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



如下图,进入修改流水线配置的界面,可以选择对应的分支进行配置。


步骤 1-Clone 由 Rancher 自动写好;


步骤 2、3、4 修改自己配置,大家按需修改;


我配置的流程分别是 2-build(maven 构建),3-publish(打包镜像并推送私有镜像仓库),4-deploy(调用 Rancher API,更新 Pod 镜像,完成项目自动部署)。



3.2.1 运行脚本的当前目录


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


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


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



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


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


可以看到,pipeline 第一步 clone 代码就是在该目录下进行的,这个也是我们在配置 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,带上会去检查依赖的版本是否最新,会很慢很慢的。



3.2.3 Publish 配置


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



下面讲下 dockerfile 的配置:


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



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



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


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



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


/build/webpack.dev.conf.jswatchOptions: {  poll: config.dev.poll,},# 1.不检查hostdisableHostCheck: true/config/index.jsproxyTable: {  '/updance': {  # 2.target指定为后台pod节点的ip+port    target: 'http://192.168.242.83:32583',    changeOrigin: true,    pathRewrite: {      '^/updance': '/updance'    }  }},# 3.host设置为0.0.0.0host: '0.0.0.0'
复制代码


3.2.4 Deploy 配置


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



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 节点的更多选项查看




3.3 运行 pipeline


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


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


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



以上就是 Rancher 2.1 从集群搭建到 Pipeline 部署完成的完整的流程。


作者介绍:

许先学,Java 开发工程师。

欢迎后续技术讨论 :906696264@qq.com

简书地址:https://www.jianshu.com/u/749dce579f00


2020 年 4 月 23 日 17:23847

评论

发布
暂无评论
发现更多内容

玛雅公约软件系统开发|玛雅公约APP开发

开發I852946OIIO

系统开发

银行业大数据应用及HiveQLjoin分析

garlic

极客大学架构师训练营

前端不得不懂的架构知识(中)

执鸢者

架构 前端

架构师训练营第三周”代码重构“作业

随秋

极客大学架构师训练营

架构师训练营 2 期 - 第 8 周命题作业

Geek_no_one

极客大学架构师训练营

架构师训练营第 1 期 week12

张建亮

极客大学架构师训练营

第八周 作业

Jack

【第十二周】课后作业

云龙

第十二周作业(作业二)

Geek_83908e

架构师一期

第八周总结

孤星

许可区块链是许多金融应用未来的关键特性

CECBC区块链专委会

比特币区块链

别再用智能合约时代的思维,去思考下一代区块链应用

CECBC区块链专委会

区块链 计算机

推进工业互联网和区块链创新发展

CECBC区块链专委会

区块链 互联网

架构师训练营 第八周作业

文江

架构师训练营第 1 期 - 第 12 周学习总结

Anyou Liu

极客大学架构师训练营

宝马区块链负责人:我们是如何让区块链技术与汽车产业结合的?

CECBC区块链专委会

大数据

可能会重塑未来移动支付市场的格局

CECBC区块链专委会

货币

FFmpeg使用基础(音视频开发入门)

赖猫

Codurance不太一样

sherlockq

第八周作业

孤星

架构之书:雄心与《C++语言的设计与演化》

lidaobing

c++ 架构

《社会中的数据可视化》PDF免费下载

计算机与AI

数据可视化

性能优化总结二

Mars

生产环境全链路压测建设历程之七: 淘宝网2012年双十一库存超卖问题的本质

数列科技杨德华

架构师训练营第 1 期 - 第 12 周课后练习

Anyou Liu

极客大学架构师训练营

数字人民币红包迎战“双十二” 六大行钱包全接入

CECBC区块链专委会

数字人民币

架构师训练营 1 期第 12 周:数据应用(一)- 作业

piercebn

极客大学架构师训练营

架构师训练营 2 期 - 第八周总结

Geek_no_one

极客大学架构师训练营

第十二周作业(作业一)

Geek_83908e

架构师一期

架构师训练营第 1 期第 12 周学习总结

好吃不贵

极客大学架构师训练营

性能优化练习

Mars

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

Rancher2.1从集群搭建到Pipeline部署完整教程-InfoQ