rancher2.1
rancher 容器管理平台 在生产环境中轻松快捷的部署和管理容器 管理K8s 内置CI/CD 快速搭建 导入和纳管 集中式身份
1. 搭建rancher server
- 安装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账户
- 主机名只支持包含 - 和 .(中横线和点)两种特殊符号,不能重复
复制代码
# 创建 /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实现高可用也是没问题的。
- 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 文件有没有从集群复制过来 复制代码
-
手动安装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版本
按应用商店来搭建操作很简便,接下来只需要生成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上复制
配置完成后启用并显示仓库列表
配置镜像仓库
3.2 部署流水线配置
选择一个项目,点击 编辑配置
如下图,进入修改流水线配置的界面,可以选择对应的分支进行配置,步骤1-Clone由rancher自动写好,步骤2,3,4修改自己配置,大家按需修改,我配置的流程分别是2-build(maven构建),3-publish(打包镜像并推送私有镜像仓库),4-deploy(调用rancherAPI,更新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自动更新。
以上就是一个完整的流程,溜了溜了,玩奥德赛去。。