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

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。如果不能FQ获取不到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.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节点,这里基础镜像选什么都可以了,因为不需要依赖镜像:

 

 

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

 

拓展阅读

如何构建Kubernetes CI/CD流水线

如何选择最佳CI工具:Drone VS. Jenkins

如何在Rancher2.0上快速部署Datadog

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

 
posted @ 2020-01-13 10:27  TonyBen2018  阅读(384)  评论(0)    收藏  举报