CI环境搭建记录
Rancher
Rancher介绍
-
什么是Rancher
- 地址:https://rancher.com/
- 中文文档:https://docs.rancher.cn/
- 是一个开源的企业级PaaS容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台
- Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台
- 通信模型介绍
- Client-Server模式
- 每个Linux主机是Client端,需要连接到Rancher的Server端
-
特性
- 基础设施编排
- 可以使用任何公有云或者私有云的Linux主机资源
- Linux主机可以是虚拟机,也可以是物理机
- Rancher仅需要主机有CPU,内存,本地磁盘和网络资源,从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的
- 容器编排与调度
- 包含了当前全部主流的编排调度引擎,例如Docker Swarm, Kubernetes, 和Mesos
- 同一个用户可以创建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理应用
- 除了Swarm,Kubernetes和Mesos之外,Rancher还支持自己的Cattle容器编排调度引擎
- Cattle被广泛用于编排Rancher自己的基础设施服务以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理与升级
- 基础设施编排
部署Rancher2.X
前置环境安装
- 安装Docker
# 基于 Linux CentOS 7.8 + Docker-20.10.10
# 1.先安装yml
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2.设置阿里云镜像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3. 安装docker
yum -y install docker-ce-20.10.10-3.el7
#4. 查看docker版本
docker -v
#5. 启动docker
systemctl start docker
#6. 查看docker 启动状态
systemctl status docker
-
配置阿里云镜像加速
- 为啥要配置?Rancher依赖组件多,不配置下载镜像慢容易出问题
- 阿里云入口地址 https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://hhp6jcc1.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
- 镜像加速器获取方式
部署Server端
-
安装Rancher
- 创建Rancher挂载目录
mkdir -p /data/rancher_home/rancher mkdir -p /data/rancher_home/auditlog
- 部署Rancher
docker run -d --privileged --restart=unless-stopped -p 80:80 -p 443:443 \ -v /data/rancher_home/rancher:/var/lib/rancher \ -v /data/rancher_home/auditlog:/var/log/auditlog \ --name rancher_demo rancher/rancher:v2.5.7
-
登录Rancher
- 启动成功rancher后, 可以打开浏览器输入IP地址来进入Rancher
- 登录地址为:http://+IP ,如:http://47.106.69.xxx
- 配置账号密码,填写完账号密码后直接Continue即可。
-
- 配置账号密码,填写完账号密码后直接Continue即可。
-
保存配置
- 点击Continue后进入到Server URL页面,这里显示的是IP(公网ip)地址,不用管直接点击SaveURL
- 设置Rancher语言,在主页面的右下角点击切换一下即可
添加Client端
Client端Linux服务器同样需要安装Docker,命令见Server端部署
-
创建项目集群
- 进入到选择集群的类型,这里选择自定义就可以
- 进入到添加集群-Custom页面,填好信息点击【下一步】
- 点击下一步
-
添加Linux主机节点
- 终端中运行复制下来的命令按Enter键等待下载好相应的镜像即可
- 我们就把主机给添加到所创建的集群中
- 回到Rancher的主界面
搭建开源服务案例
搭建mysql8.0
镜像:mysql:8.0
环境变量:
MYSQL_ROOT_PASSWORD=123456
路径映射
/home/data/mysql/data
/var/lib/mysql:rw
/etc/localtime
/etc/localtime:ro
在创建 Docker 容器时,加上 “-v /etc/localtime:/etc/localtime:ro” 参数
让容器使用宿主机的时间,容器时间与宿主机时间同步,:ro 指定该 volume 为只读
搭建私有容器镜像案例
添加私有镜像库凭证
服务:registry.cn-shenzhen.aliyuncs.com/dcloud-ccl/dcloud-gateway:v1.1
地址:registry.cn-shenzhen.aliyuncs.com
账号:caichuanliang001
密码:123456
部署镜像
Rancher踩坑记录
容器批量操作的命令
rancher会下载安装较多镜像和容器,删除rancher后需要批量管理
# 停止rancher相关容器
docker stop `docker container ls -a |grep k8s |awk '{print $1}'`
docker stop `docker container ls -a |grep rancher |awk '{print $1}'`
# 删除rancher相关容器
docker rm `docker container ls -a |grep k8s |awk '{print $1}'`
docker rm `docker container ls -a |grep rancher |awk '{print $1}'`
# 删除状态为停止的容器
docker rm `docker ps -q -f status=exited`
# 删除rancher相关镜像
docker rmi --force `docker images | grep rancher | awk '{print $3}'`
# 只显示容器名称
docker ps -a --format "table {{.Names}}" | grep -v "NAMES"
客户端删除后重装,遗留文件未清除导致安装报错
注意:这个报错第一次安装也会出现,属于rancher依赖下载时间过长导致,依赖下载好,客户端与服务端建立通信后就正常了。这个操作只针对删除客户端后重新加入集群失败。
Rancher集群多次安装集群失败,报错: Failed to bring up Etcd Plane: etcd cluster is unhealthy
这个问题的主要原因还是上个集群的一些配置没有清除,导致配置文件不同步之类的原因,下面的命令在集群的master上执行就行(或者是在安装rancher的机器上执行)
清空掉rancher相关的容器和进行后执行
rm -rf /etc/cni /etc/kubernetes /opt/cni /opt/rke /run/secrets/kubernetes.io /run/calico /run/flannel /var/lib/calico /var/lib/etcd /var/lib/cni /var/lib/kubelet /var/lib/rancher/rke/log /var/log/ontainers /var/log/pods /var/run/calico
删除服务后仍然占用端口
删除服务后,对应接口仍然被占用,通过命令kill占用端口的pid无法解决
需要在服务发现中删除对应服务信息
Jenkins
部署Jenkins
安装Jenkins
- 创建Jenkins持久化目录
mkdir -p /root/docker/jenkins
- 运行部署容器
docker run -d \
-u root \
--name xdclass_jenkins \
-p 9302:8080 \
-v /root/docker/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins/jenkins:2.319.3-lts-jdk11
第一行:表示将该容器在后台运行
第二行:表示使用root用户来运行容器
第三行:表示给这个容器命名,后面可以通过这个名字来管理容器
第四行:表示将主机的9302端口映射到8080端口上,后面就可以通过主机ip:9302来访问Jenkins,端口是可以更改的,根据自行需要
第五行:表示将本地/root/docker/jenkins目录映射为/var/jenkins_home目录,这就是第二步中的持久化目录。
第六、七行:表示把本地/var/run/docker.sock文件映射在容器中/var/run/docker.sock文件。这一步的目的就是为了把容器中的Jenkins可以与主机Docker进行通讯。
第八行:指定使用哪一个镜像和标签
- 网络安全组开发端口 9302
运行jenkins
-
Jenkins安装和查看运行情况
- docker ps来查看是否运行
- 在浏览器输入ip+端口号,我这里是 120.79.128.42:9302 , 即可进入到Jenkins登录页面
-
网络安全组记得开放 9302 端口
-
获取登录Jenkins的密码, 把获取的密码复制上去
cat /root/docker/jenkins/secrets/initialAdminPassword
- 选择安装推荐的插件
- 等待Jenkins把插件安装好即可,安装好后进入实例配置页面,点保存就可以来到Jenkins主界面了
环境配置
可下载环境
- 进入到全局工具配置设置JDK
-
配置JDK、Git
- 路径为主机Jenkins容器内部里的JAVA_HOME,也就是echo $JAVA_HOME查看JAVA_HOME路径
/opt/java/openjdk
- 插件页面下载插件
- Maven Integration、docker Pipeline、docker API 、docker、docker commons
手动配置Maven
原因:使用maven自带的settings文件,下载依赖速度太慢
解决方法:docker挂载目录下导入带有阿里云私服地址的settings文件,jenkins中修改maven配置
步骤演示
前提:宿主机挂载映射了docker镜像的jenkins_home目录
宿主机jenkins地址:/root/docker/jenkins
镜像jenkins地址:/var/jenkins_home
1.下载maven3.6.3tar包
2.修改映射文件
# 解压tar包
tar -axvf apache-maven-3.6.3-bin.tar.gz
# 复制maven到宿主机映射目录
cp -r apache-maven-3.6.3 /root/docker/jenkins/maven-3.6.3
# 修改settings.xml
cd /root/docker/jenkins/maven-3.6.3/conf/
vim settings.xml
## 添加Maven私服或中央仓库
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
3.jenkins修改配置
进入全局工具配置--->修改mavne配置【使用器内部的settings文件】--->修改maven地址
配置Git全局访问凭证
构建maven任务案例
需求:构建微服务后推送到阿里云私有镜像库
项目结构
建立项目
项目配置
shell执行流程:
- 登录阿里云容器服务
- 构建公共服务(指定容器内公共服务的pom文件地址)
- 构建指定微服务
- 推送容器镜像
Shell脚本部署
参考博文
CentOS 7 升级 git 版本到 2.x - 掘金 (juejin.cn)
【centos】——安装Maven&Git - 掘金 (juejin.cn)
CentOS 7 安装 JDK 11-腾讯云开发者社区-腾讯云 (tencent.com)
Git安装
# 下载
yum -y install git
# 查看版本
git --version # 输出旧版本:git version 1.8.3.1
# 移除旧版本
yum remove git
yum remove git-*
#添加了 end point 库,就可以直接安装 git 2.x
yum install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
yum install git
# 查看版本
git --version # 输出新版本 git version 2.41.0
Maven安装
# 新建目录
mkdir -p /usr/local/software/maven
cd /usr/local/software/maven
# 官网下载maven的tar.gz包
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
# 解压缩到指定位置
tar -zxvf apache-maven-3.6.3-bin.tar.gz
# 修改环境变量
# 打开/aetc/profile文件
vi /etc/profile
# 添加如下内容
export MAVEN_HOME=/usr/local/software/maven/apache-maven-3.6.3 #增加此行
export PATH=${JAVA_HOME}/bin:${MAVEN_HOME}/bin:$PATH #修改此行
# 执行修改的文件并进行初始化
source /etc/profile
# 查看版本
mvn -v
Java11安装
# 安装
yum install java-11-openjdk-devel
# 如果你的系统中还装有不同版本的 JDK 的话。你需要运行:
alternatives --config java
脚本
Git凭据存储器
# 在命令行中配置Git以使用凭据存储器,这样你只需输入一次用户名和密码。之后Git将为后续操作记住这些凭据。
git config --global credential.helper store
# 下载代码
git clone https://xxxxx
新建文件
# 新建文件
mkdir -p /usr/local/dcloud/deploy
touch /usr/local/dcloud/deploy/deploy.sh
# 把下面的代码复制进deploy
vim deploy.sh
# 添加执行权限
chmod +x deploy.sh
shell脚本
替换下面的用户名和密码和代码路径
#!/bin/bash
# 检查参数数量,它应该是偶数
if [ $(($# % 2)) -ne 0 ]; then
echo "Usage: $0 <service-name1> <version-number1> [<service-name2> <version-number2> ...]"
exit 1
fi
# 停止脚本在出错时继续运行
set -e
build_service() {
local service_name=$1
local version=$2
echo "Building $service_name..."
cd /usr/local/dcloud/d-cloud/dcloud-$service_name
mvn install -Dmaven.test.skip=true dockerfile:build
echo "Logging in to Aliyun Docker Registry for $service_name..."
docker login --username=你的用户名 registry.cn-shenzhen.aliyuncs.com --password=你的密码
echo "Tagging Docker image for $service_name..."
docker tag dcloud/dcloud-$service_name:latest registry.cn-shenzhen.aliyuncs.com/dcloud-ccl/dcloud-$service_name:$version
echo "Pushing image to Aliyun Docker Registry for $service_name..."
docker push registry.cn-shenzhen.aliyuncs.com/dcloud-ccl/dcloud-$service_name:$version
echo "Deployment of $service_name completed successfully."
}
# 更新Git仓库
echo "Updating Git repository..."
cd /usr/local/dcloud/d-cloud
git pull origin master
# 构建基础服务
echo "Building dcloud-common..."
cd /usr/local/dcloud/d-cloud/dcloud-common
mvn clean install
# 处理每个服务
while [ $# -gt 0 ]; do
build_service $1 $2 &
shift 2
done
# 等待所有后台进程完成
wait
echo "All services have been deployed successfully."
执行规则
在执行命令后面加 "link v1.3"则会构建dcloud-link并上传v1.3版本到阿里云镜像仓库,可以同时构建多个服务,命令如下
cd /usr/local/dcloud/deploy
./deploy.sh gateway v1.2 link v1.3 account v1.2 shop v1.3 data v1.2