Loading

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
  • 配置阿里云镜像加速

    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
    
    • 镜像加速器获取方式

    image-20230405204454147

部署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即可。

image-20230405204216845

  • 保存配置

    • 点击Continue后进入到Server URL页面,这里显示的是IP(公网ip)地址,不用管直接点击SaveURL

    image.png

    • 设置Rancher语言,在主页面的右下角点击切换一下即可

image.png

添加Client端

Client端Linux服务器同样需要安装Docker,命令见Server端部署

  • 创建项目集群

    image-20230405205020513

    • 进入到选择集群的类型,这里选择自定义就可以

    image-20230405205039949

    • 进入到添加集群-Custom页面,填好信息点击【下一步】

    image-20230405210310299

    • 点击下一步

    image-20230405210402875

  • 添加Linux主机节点

    • 终端中运行复制下来的命令按Enter键等待下载好相应的镜像即可
    • 我们就把主机给添加到所创建的集群中

    image.png

    • 回到Rancher的主界面

    image-20230405210607642

搭建开源服务案例

image-20230405221416856

搭建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 为只读

搭建私有容器镜像案例

阿里云私有镜像地址

image-20230405224058859

添加私有镜像库凭证

服务:registry.cn-shenzhen.aliyuncs.com/dcloud-ccl/dcloud-gateway:v1.1

地址:registry.cn-shenzhen.aliyuncs.com
账号:caichuanliang001
密码:123456

image-20230405223653162

部署镜像

Rancher踩坑记录

容器批量操作的命令

rancher会下载安装较多镜像和容器,删除rancher后需要批量管理

image-20230401105814962

image-20230401105734974

# 停止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的机器上执行)

image-20230401110145221

清空掉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无法解决

image-20230406072118657

需要在服务发现中删除对应服务信息

image-20230406072313121

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
    

image-20220406152002825

  • 选择安装推荐的插件

image-20220406152110340

  • 等待Jenkins把插件安装好即可,安装好后进入实例配置页面,点保存就可以来到Jenkins主界面了

image-20220406152224042

环境配置

可下载环境

  • 进入到全局工具配置设置JDK

image-20220406152442655

  • 配置JDK、Git

    • 路径为主机Jenkins容器内部里的JAVA_HOME,也就是echo $JAVA_HOME查看JAVA_HOME路径
    /opt/java/openjdk
    

    image-20230406074018877

image-20230406074141015

  • 插件页面下载插件
    • Maven Integration、docker Pipeline、docker API 、docker、docker commons

image-20230406074346752

手动配置Maven

参考文章

原因:使用maven自带的settings文件,下载依赖速度太慢

解决方法:docker挂载目录下导入带有阿里云私服地址的settings文件,jenkins中修改maven配置

步骤演示

前提:宿主机挂载映射了docker镜像的jenkins_home目录

宿主机jenkins地址:/root/docker/jenkins

镜像jenkins地址:/var/jenkins_home

1.下载maven3.6.3tar包

地址:https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/?spm=a2c6h.25603864.0.0.24ee2104DYP0ph

image-20230402211716099

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>

image-20230402211856426

image-20230402212349285

image-20230402212807507

image-20230402213226016

3.jenkins修改配置

进入全局工具配置--->修改mavne配置【使用器内部的settings文件】--->修改maven地址

image-20230402213458106

image-20230402213417693

image-20230402213631601

配置Git全局访问凭证

image-20220406233749698

image-20220406233831235

image-20220406234009905

构建maven任务案例

需求:构建微服务后推送到阿里云私有镜像库

项目结构

image-20230406073819955

建立项目

image-20230406075143420

项目配置

image-20230406080038679

shell执行流程:

  1. 登录阿里云容器服务
  2. 构建公共服务(指定容器内公共服务的pom文件地址
  3. 构建指定微服务
  4. 推送容器镜像

image-20230402215613554

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

image-20231205192412139

脚本

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."

执行规则

image-20231205194156789

在执行命令后面加 "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
posted @ 2023-04-02 22:09  yonugleesin  阅读(61)  评论(0编辑  收藏  举报