K3S-CICD
# 集群规划
主机 | IP | 内存 | 硬盘 | 应用 |
---|---|---|---|---|
master201 | 192.168.213.201 | 8G | 40G | K3S |
slave202 | 192.168.213.202 | 4G | 40G | K3S |
slave203 | 192.168.213.203 | 4G | 40G | K3S |
master211 | 192.168.213.211 | 4G | 40G | K3S |
slave212 | 192.168.213.212 | 4G | 40G | K3S |
slave213 | 192.168.213.213 | 4G | 40G | K3S |
middleware221 | 192.168.213.221 | 4G | 40G+100G | Mysql+NFS+Rancher |
middleware222 | 192.168.213.222 | 10G | 40G+100G | Harbor+Jenkins+Gitlab |
图例:
# 版本
组件 | 版本 | 备注 |
---|---|---|
CentOS | 7.9.2009 (Core) | CentOS-7-x86_64-Minimal-2009.iso |
K3S | v1.25.3+k3s1 | - |
Mysql | 5.7.39 | K3S外部存储 |
Jenkins | jenkins:2.377-centos7 | CI/CD |
Harbor | v2.2.3 | Docker镜像存储仓库 |
Gitlab | gitlab-ce:15.5.4-ce.0 | Git仓库 |
Rancher | 2.6.9 | K3S界面管理 |
Docker | 20.10.18 | - |
Docker Compose | v2.10.2 | - |
# 系统信息
系统 | 地址 | 账号 | 密码 |
---|---|---|---|
Rancher | https://rancher.ok96.cn:8443/ | admin | Rancher123456 |
Harbor | http://192.168.213.222:22280 | admin | Harbor12345 |
Jenkins | http://192.168.213.222:7080 | admin | Admin123 |
Gitlab | http://192.168.213.222:8929 | root | gTgBikdfbPhNSzcztYyGfXMauatWUP52HsZbZowmgow= |
- | jenkins | Jenkins123 | - |
NFS | 192.168.213.221 | 目录:/data/share | - |
# 自动构建部署流程图
# 环境部署步骤
# 初始化准备(ALL of SERVER)
# 设置各个主机名称
在201上执行命令:
hostnamectl set-hostname master201
在202上执行命令:
hostnamectl set-hostname slave202
在203上执行命令:
hostnamectl set-hostname slave203
在211上执行命令:
hostnamectl set-hostname master211
在212上执行命令:
hostnamectl set-hostname slave212
在213上执行命令:
hostnamectl set-hostname slave213
在221上执行命令:
hostnamectl set-hostname middleware221
在222上执行命令:
hostnamectl set-hostname middleware222
# 部署Docker(ALL of SERVER)
# 上传附件
上传BinaryInstallation.zip压缩包到/data目录下
# 解压赋权并安装
命令:
yum install -y unzip
cd /data && unzip BinaryInstallation.zip
cd /data/BinaryInstallation && chmod -R 777 docker-init.sh
./docker-init.sh
2
3
4
# 安装完成
# 关闭防火墙(ALL of SERVER)
# 关闭防火墙
执行命令
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
sysctl -p
2
3
4
5
6
7
8
9
10
11
12
13
14
# 重启Docker
执行命令
systemctl restart docker
# 部署Harbor(222)
# 上传附件
上传harbor-offline-installer-v2.2.3.tgz压缩包到/data目录下
# 解压
执行命令
cd /data
tar xzvf harbor-offline-installer-v2.2.3.tgz
2
# 新建文件harbor.yml
内容可以参考harbor.yml.tmpl
修改 hostname: 192.168.213.222 为本机IP
修改 端口
修改 数据存储地址/data/harbor/data
注释 https
命令
cd /data/harbor
vi harbor.yml
2
输入文本内容
hostname: 192.168.213.222
http:
port: 22280
harbor_admin_password: Harbor12345
database:
password: root123
max_idle_conns: 50
max_open_conns: 1000
data_volume: /data/harbor/data
trivy:
ignore_unfixed: false
skip_update: false
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.2.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 安装
执行命令
sh /data/harbor/install.sh
# 安装完成验证
执行命令
docker ps -a
# Docker配置Harbor(ALL of SERVER)
# 配置daemon.json
tee /etc/docker/daemon.json <<-'EOF'
{
"log-driver":"json-file",
"log-opts":{
"max-size":"1000m",
"max-file":"3"
},
"insecure-registries":[
"192.168.213.222:22280"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 注意
若是在Harbor部署的服务器(222)执行后,需要重启Harbor,等待系统启动
cd /data/harbor && docker-compose down && docker-compose up -d
docker ps -a
2
# 登录docker
docker login 192.168.213.222:22280
账号:admin
密码:Harbor12345
2
3
# 部署Mysql(221)
# 编排文件并启动
mkdir /data/mysql5-7 && cd /data/mysql5-7
vi docker-compose.yml
2
输入文件内容
version: '3.1'
services:
mysql-k3s:
image: mysql:5.7.39
restart: always
container_name: mysql-k3s
environment:
MYSQL_ROOT_PASSWORD: xiaoku@mysql2205#
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 2205:3306
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./logs:/logs
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
启动
docker-compose up -d
# 创建K3S数据库
创建数据库名称为k3s
# 部署K3S集群(201~213)
# 部署Master(201)
# 部署
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.25.3+k3s1 sh -s - \
--datastore-endpoint="mysql://root:xiaoku@mysql2205#@tcp(192.168.213.221:2205)/k3s" \
--docker \
--write-kubeconfig ~/.kube/config \
--write-kubeconfig-mode 666
2
3
4
5
# 查看Token
命令及返回
[root@localhost BinaryInstallation]# cat /var/lib/rancher/k3s/server/node-token
K10bf621cb0bfb8fdbdb87ea0940589b78779b0088c8fdab2a4f5d65ee8d95770bb::server:2a5ed69b7abe52c01a4ab99b5ad836cf
2
# 部署Slave(202~203)
# 部署(202~203)
Token为201返回的数据
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.25.3+k3s1 \
K3S_URL=https://192.168.213.201:6443 \
K3S_TOKEN=K10bf621cb0bfb8fdbdb87ea0940589b78779b0088c8fdab2a4f5d65ee8d95770bb::server:2a5ed69b7abe52c01a4ab99b5ad836cf \
sh -s - \
--docker
2
3
4
5
# 设置202和203 Slave角色(201)
201执行命令
kubectl label node slave202 node-role.kubernetes.io/worker=worker
kubectl label node slave203 node-role.kubernetes.io/worker=worker
# 部署Master(211)
# 部署
token使用201获取的值
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.25.3+k3s1 sh -s - server \
--token=K10bf621cb0bfb8fdbdb87ea0940589b78779b0088c8fdab2a4f5d65ee8d95770bb::server:2a5ed69b7abe52c01a4ab99b5ad836cf \
--datastore-endpoint="mysql://root:xiaoku@mysql2205#@tcp(192.168.213.221:2205)/k3s" \
--docker \
--write-kubeconfig ~/.kube/config \
--write-kubeconfig-mode 666
2
3
4
5
6
# 部署Slave(212~213)
# 部署(212~213)
Token为201返回的数据
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.25.3+k3s1 \
K3S_URL=https://192.168.213.211:6443 \
K3S_TOKEN=K10bf621cb0bfb8fdbdb87ea0940589b78779b0088c8fdab2a4f5d65ee8d95770bb::server:2a5ed69b7abe52c01a4ab99b5ad836cf \
sh -s - \
--docker
2
3
4
5
# 设置212和213 Slave角色(211)
211执行命令
kubectl label node slave212 node-role.kubernetes.io/worker=worker
kubectl label node slave213 node-role.kubernetes.io/worker=worker
# 完成部署
k3s kubectl get nodes
# 注
# 卸载
使用安装脚本安装了 K3s,那么在安装过程中会生成一个卸载 K3s 的脚本。
卸载 K3s 会删除集群数据和所有脚本。要使用不同的安装选项重新启动集群,请使用不同的标志重新运行安装脚本。
要从 server 节点卸载 K3s,请运行:
/usr/local/bin/k3s-uninstall.sh
要从 agent 节点卸载 K3s,请运行:
/usr/local/bin/k3s-agent-uninstall.sh
# 查看状态
systemctl status k3s
systemctl status k3s-agent
# 查看节点
k3s kubectl get nodes
# 查看版本
使用kubectl version 命令,输出的信息会显示client和server的版本信息,client代表kubectl版本信息,server代表的是master节点的k8s版本信息
[root@localhost ~]# kubectl version
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.0+k3s1", GitCommit:"26e9405767263a2915723cb72b1ffd7f50687a8f", GitTreeState:"clean", BuildDate:"2022-09-12T20:11:31Z", GoVersion:"go1.19", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.0+k3s1", GitCommit:"26e9405767263a2915723cb72b1ffd7f50687a8f", GitTreeState:"clean", BuildDate:"2022-09-12T20:11:31Z", GoVersion:"go1.19", Compiler:"gc", Platform:"linux/amd64"}
2
3
4
5
6
# 部署Rancher(221)
# 申请下载证书
例:阿里云申请完成后,下载Nginx证书
上传至221服务器,目录:/data/rancher/certs下
文件:
rancher.pem 改名cert.pem
rancher.key改名key.pem
下载根证书 WoSign-RSA-root.crt改名cacerts.pem
# 编排文件并启动
编排文件
vi /data/rancher/docker-compose.yml
编辑输入
version: '3.1'
services:
rancher-server:
image: rancher/rancher:v2.6.9
restart: unless-stopped
container_name: rancher-server
ports:
- 8082:80
- 8443:443
volumes:
- ./rancher:/var/lib/rancher/
- ./ssl/cert.pem:/etc/rancher/ssl/cert.pem
- ./ssl/key.pem:/etc/rancher/ssl/key.pem
- ./ssl/cacerts.pem:/etc/rancher/ssl/cacerts.pem
privileged: true
mem_limit: 2048m
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
启动
cd /data/rancher && docker-compose up -d
# 配置Rancher集群
# 浏览器访问证书申请域名地址
例:rancher.ok.cn
则:访问https://rancher.ok96.cn:8443/
# 根据提示查找密码
命令:
[root@localhost rancher]# docker logs rancher-server 2>&1 | grep "Bootstrap Password:"
2022/09/26 05:45:32 [INFO] Bootstrap Password:
rdx4fpcg696hkdq6dmfk7sfzlq7cgknv8kfmp9m58k6bchzldd6ndt
2
3
4
# 输入新密码
例:密码为 Rancher123456
# 设置中文
# 导入集群
# 点击导入已有集群
# 点击通用
# 输入集群名称,点击创建
# 复制命令
【在运行支持的 Kubernetes 版本的 Kubernetes 集群上,运行以下 kubectl 命令,以将其导入到 Rancher】提示的命令,粘贴到201服务器上执行
# K3s集群Master201服务器上执行
# 刷新rancher首页
等待一段时间后,状态为Active
# 若需更新证书
新申请下来的证书直接替换
目录:/data/rancher/ssl
文件:
cacerts.pem
cert.pem
key.pem
然后重启即可
docker-compose down && docker-compose up -d
# 部署NFS(ALL of SERVER)
# 安装命令
因为每台K8S都可能需要使用到挂载,故每台都需要执行安装
yum -y install nfs-utils rpcbind
systemctl enable rpcbind.service
systemctl enable nfs-server.service
systemctl start rpcbind.service
systemctl start nfs-server.service
2
3
4
5
6
# 服务端配置(221)
服务端IP:192.168.213.221
服务点目录:/data/share
# 创建共享文件夹
mkdir -p /data/share
# NFS配置
修改配置文件
vi /etc/exports
增加下面这一行数据,指定的ip地址为客户端的地址,地址可以是一个网段(如:192.168.0.0/24)
/data/share 192.168.213.0/24(rw,no_root_squash,no_all_squash,sync)
加载配置文件,在相关软件启动后执行
exportfs -arv
# 客户端测试(201)
# 创建共享文件夹
命令
mkdir -p /home/nfs_share
# 挂载测试
命令
mount -t nfs 192.168.213.221:/data/share /home/nfs_share
2
# 查看挂载情况
命令
df -TH
# 卸载
命令
umount /home/nfs_share
# 部署Gitlab(222)
mkdir /data/gitlab
cd /data/gitlab&& vi docker-compose.yml
2
输入内容
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:15.5.4-ce.0'
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.213.222:8929' #若有域名可以写域名
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:22'
volumes:
#将相关配置映射到当前目录下的config目录
- './config:/etc/gitlab'
#将日志映射到当前目录下的logs目录
- './logs:/var/log/gitlab'
#将数据映射到当前目录下的data目录
- './data:/var/opt/gitlab'
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
登录账号:root
登录密码:在服务启动后,查看config/initial_root_password文件
cat /data/gitlab/config/initial_root_password
Password: gTgBikdfbPhNSzcztYyGfXMauatWUP52HsZbZowmgow=
2
3
启动
docker-compose up -d
# 部署Gitlab(方式二)
# 创建项目
进入页面【k3s-项目/命名空间】点击创建项目
输入创建名称:公共组件 点击创建
# 创建命名空间
点击创建命名空间
输入名称:cicd 点击创建
# 创建工作负载
进入页面【k3s-工作负载-Deployments】点击创建
# Containers
镜像:gitlab/gitlab-ce:14.0.6-ce.0
端口:集群IP 8929
环境变量:
变量名称 | 变量值 |
---|---|
GITLAB_OMNIBUS_CONFIG | external_url 'http://192.168.213.201:8929'; gitlab_rails['gitlab_shell_ssh_port'] = 2222; |
# 存储挂载NFS
卷插件选择:NFS
输入名称:nfs221
服务端部署信息:/data/share 192.168.213.221
挂载点 | 卷内子路径 |
---|---|
/etc/gitlab | gitlab/config |
/var/log/gitlab | gitlab/logs |
/var/opt/gitlab | gitlab/data |
# 点击创建完成启动
# 服务发现
进入服务发现页面,编辑配置,修改配置 增加外网ip
输入:192.168.213.201
# 浏览器访问
# 登录密码(221)
因为密码是初始化后的文件内容,而部署时将文件挂载在NFS上,故 直接登录221服务器上即可查看GitLab初始化密码
C8a4/zTtKRT0c64LSTLRxgpK1zQLEst2JbRhEfpFyWk=
命令
cd /data/share
cat gitlab/config/initial_root_password
2
# 部署Jenkins(222)
# 制作镜像
# 构建镜像
由于原生镜像没有安装maven和git,故我们重新写一个Dockerfile生成镜像,编写Dockerfile文件
mkdir /data/jenkins
cd /data/jenkins && vi Dockerfile
2
输入以下内容
FROM jenkins/jenkins:2.377-centos7
USER root
RUN yum install -y maven
2
3
# 生成镜像
执行命令
docker build -t jenkins:2.377-centos7-mvn .
# 创建启动
编辑文件
cd /data/jenkins && vi docker-compose.yml
输入内容
version: '3'
services:
jenkins:
image: 'jenkins:2.377-centos7-mvn'
container_name: jenkins
restart: always
user: root
ports:
- '7080:8080'
- '7050:50000'
volumes:
- './jenkins_home:/var/jenkins_home'
- '/var/run/docker.sock:/var/run/docker.sock'
- '/usr/bin/docker:/usr/bin/docker'
2
3
4
5
6
7
8
9
10
11
12
13
14
启动
cd /data/jenkins && docker-compose up -d
# 浏览器访问
访问地址:192.168.213.222:7080
# 登录密码
[root@middleware222 share]# cat /data/jenkins/jenkins_home/secrets/initialAdminPassword 564de39cc45347589909febf57e73383
# 初始化配置
# 初始化Jenkins
# 初始化
使用管理员账号登录后安装推荐的插件
修改管理员信息:
登录名:admin
账号:admin
密码:Admin123
2
3
# 配置
# 查看java和maven安装地址
进入jenkins容器内执行
[root@middleware222 ~]# docker exec -it jenkins /bin/sh
sh-4.2# mvn -version
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 11.0.16.1, vendor: Eclipse Adoptium
Java home: /opt/java/openjdk
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
sh-4.2#
2
3
4
5
6
7
8
9
# 配置JDK
登录到Jenkins管理后台,点击 Manage Jenkins --> Global Tool Configuration
点击新增JDK
自动安装 前面的勾选,去掉,输入别名和JAVA_HOME
别名:jdk11
JAVA_HOME:/opt/java/openjdk
2
点击应用
# 配置Maven
同JDK配置页面
取消自动安装,输入配置信息
别名:maven305
MAVEN_HOME:/usr/share/maven
2
点击保存
# 自定义安装插件
安装插件:
Docker Pipeline
GitLab
2
# 测试Jenkins
# 测试(docker-maven)
# 创建流水线任务
# pipeline脚本
输入内容,点击保存
pipeline {
agent any
stages {
stage('TestMaven') {
steps {
sh 'mvn -version'
}
}
stage('TestDocker') {
steps {
sh 'docker images'
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 构建触发器(关联Gitlab)
选择:触发远程构建 (例如,使用脚本)
例如Token:imtest
后续则可以使用接口地址触发构建
JENKINS_URL/job/imtest1/build?token=imtest
# 立即构建
查看控制台
# 初始化Harbor
登录Harbor
地址:http://192.168.213.222:22280/
账号:admin
密码:Harbor12345
2
3
创建公开项目:imdemo
创建公开项目:cicd
# 初始化Gitlab
# 登录
地址:192.168.213.222:8929
账号:root
登录密码:在服务启动后,查看config/initial_root_password文件
cat /data/gitlab/config/initial_root_password
2
3
4
# 创建用户
用户信息,例:
账号:jenkins
密码:Jenkins123
2
# 创建用户
# 初始化密码
在创建完成账号时,密码是不可填写的,在编辑中,初始化一下密码
登录先重置一下密码,然后保存登录到首页
# 初始化项目(root权限)
# 创建组
创建组名:ar3d
# 创建空项目
项目名称:ok-springboot-imdemo
# 创建dev分支
# 提交项目代码
附件:ok-springboot-imdemo-dev.zip 上传至dev
# 赋权账号
Members:
# GitLab+Jenkins配置
# 设置jenkins 用户ssh秘钥
登录到jenkins服务器(222),生成秘钥
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
查看公钥
cat /root/.ssh/id_rsa.pub
登录GitLab使用Jenkins用户
点击 ssh keys,将公钥内容复制到网页,点击添加秘钥
# 获取Access Tokens
登录jenkins帐号,获取Access Tokens
点击后返回:glpat-39WoU5Bou4bn6-sqvgPb
# Jenkins配置Git/GitLab
# Jenkins配置GitLab
点击 系统管理--> 系统配置 -->配置 -->Gitlab
Connection Name "随便填,"Git Host URL"填GitLab的访问地址,然后点"Add"------"jenkins",如下所示
选择gitlalb api,输入 jenkins 用户创建的token
glpat-39WoU5Bou4bn6-sqvgPb
选择 gitlab api token,点击测试连接,出现 Success,表示成功
# Jenkins配置Git
点击 Manage Jenkins --> Configure System -->配置 -->Git plugin
设置Git插件的全局配置,然后点击最下面的保存。
# 创建Jenkins-job(gitlab)
# 新建Item:ok-springboot-imdemo
点击"流水线",点击Ok
# 配置
# 流水线
选择"SCM",选择"Git",然后去GitLab中复制项目地址,粘贴到"Repository URL",然后点击"credentials"后面的添加按钮
类型,选择 Username with password
用户名 填 jenkins
密码 填 Jenkins123
添加后选择
# 构建触发器
填写job名称:ok-springboot-imdemo
则Url:
http://192.168.213.222:7080/job/ok-springboot-imdemo/build?token=ok-springboot-imdemo
保存应用
# Rancher+Jenkins+Harbor+GitLab
# Rancher创建密文-Harbor(K3S)
进入页面【存储-密文】点击创建,选择镜像仓库
输入Harbor信息
# Rancher更新镜像构建
# 下载CLI
下载地址,点击版本号
点击Linux版本下载
# 下载kubectl
获取版本
https://dl.k8s.io/release/stable.txt
返回版本号:v1.25.4
下载地址则为:
https://dl.k8s.io/release/v1.25.4/bin/linux/amd64/kubectl
# 构建镜像并上传
上传cli及kubectl至222服务器,创建及上传目录:/data/rancher/docker
编写Dockerfile
cd /data/rancher/docker && vi Dockerfile
输入文件内容,保存退出
FROM alpine:3.16.3
copy ./rancher-linux-amd64-v2.6.9.tar.gz /usr/bin/rancher-linux-amd64-v2.6.9.tar.gz
copy ./kubectl /usr/bin/kubectl
RUN cd /usr/bin/ \
&& tar zxvf rancher-linux-amd64-v2.6.9.tar.gz \
&& mv rancher-v2.6.9/rancher . \
&& rm rancher-linux-amd64-v2.6.9.tar.gz \
&& rm -r rancher-v2.6.9 \
&& chmod u+x kubectl
2
3
4
5
6
7
8
9
10
11
构建镜像并上传至harbor
docker build -t 192.168.213.222:22280/cicd/rancher-cli:1.0.0 .
docker push 192.168.213.222:22280/cicd/rancher-cli:1.0.0
2
# Jenkins构建微服务镜像
进入ok-springboot-imdemo,点击立即构建
立即构建-查看日志,第一次会报错。
复制镜像地址:192.168.213.222:22280/imdemo/ok-springboot-imdemo:3
# Rancher创建微服务
# 创建项目
进入页面:
创建项目:demo
# 创建命名空间
进入页面
创建项目:ok
# 创建负载
进入页面:
命名空间选择:ok
名称:ok-springboot-imdemo
镜像:192.168.213.222:22280/imdemo/ok-springboot-imdemo:3
端口:8610 监听30010
完成创建后页面访问:
http://192.168.213.201:30010/ok-springboot-imdemo/hello
# Gitlab触发Jenkins
# Gitlab取消限制策略
禁止向本地连接发送请求
由于Gitlab和Jenkins安装在同台服务器,且Gitlab 10.6 版本以后为了安全,默认不允许向本地网络发送webhook请求。先将禁止取消。
点击勾选[Allow requests to the local network from web hooks and services],并保存
# Jenkins取消限制策略
由于Gitlab和Jenkins安装在同台服务器
勾选[匿名用户具有可读权限]
修改222服务器jenkins docker-compose.yml文件
增加文件内容
environment:
- JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
2
# 配置触发
进入Gitlab页面:
打开代码仓库,进入回调配置页面。需要仓库维护者权限才能看到此菜单。
Url从本文档的jenkins任务配置中获取:
http://192.168.213.222:7080/job/ok-springboot-imdemo/build?token=ok-springboot-imdemo
点击增加
完成提交代码自动构建
# 触发Rancher更新镜像
# 创建API密钥
进入页面:
输入描述并创建
# 复制持有者令牌
令牌:token-hcht8:wq4s7cwnxj64s5492rtcnz7hsp27dmzl8qxmwgz9v5kl56lqftr4bj
# 复制API地址
地址:https://rancher.ok96.cn:8443/v3
更新命令:
docker run --rm --name ranchercli 192.168.213.222:22280/cicd/rancher-cli:1.0.0 sh -c "rancher login https://rancher.ok96.cn:8443/v3 --token token-hcht8:wq4s7cwnxj64s5492rtcnz7hsp27dmzl8qxmwgz9v5kl56lqftr4bj"
# 复制项目PROJECT ID
进入页面,查看yaml:
找到name及namespace:
name: p-4ltfh
namespace: c-m-hwhwchxr
2
即PROJECT ID: c-m-hwhwchxr:p-4ltfh
# 复制项目ContainerName
进入页面:
复制容器名称:container-0
# 更新镜像命令说明
命令:
rancher login ${Rancher.URL} --token ${rancher} --context ${RancherProjectId}
rancher kubectl set image deployment.apps/${projectConfig.projectName} ${containerName}=${IMAGE_FULL_PATH} -n ${K8S_NAMESPACE}
2
其中:
${Rancher.URL}:为api地址【https://rancher.ok96.cn:8443/v3】
${rancher}:为token【token-hcht8:wq4s7cwnxj64s5492rtcnz7hsp27dmzl8qxmwgz9v5kl56lqftr4bj】
${RancherProjectId}:为ProjectId【c-m-hwhwchxr:p-4ltfh】
${projectConfig.projectName}:为项目名称【ok-springboot-imdemo】
${containerName}:为容器名称【container-0】
${K8S_NAMESPACE}:为命名空间名称【ok】
${IMAGE_FULL_PATH}:为更新容器镜像的地址
2
3
4
5
6
7
# 更新镜像容器命令示例
示例:更新容器镜像为【192.168.213.222:22280/imdemo/ok-springboot-imdemo:7】
docker run --rm --name ranchercli 192.168.213.222:22280/cicd/rancher-cli:1.0.0 sh -c "rancher login https://rancher.ok96.cn:8443/v3 --token token-hcht8:wq4s7cwnxj64s5492rtcnz7hsp27dmzl8qxmwgz9v5kl56lqftr4bj --context c-m-hwhwchxr:p-4ltfh && rancher kubectl set image deployment.apps/ok-springboot-imdemo container-0=192.168.213.222:22280/imdemo/ok-springboot-imdemo:7 -n ok"
# 附件
百度云下载:
链接:https://pan.baidu.com/s/1IXSRk4wSI_-ppAhn1PaFPg
提取码:izt1
2
说明
文件名称 | 说明 | 备注 |
---|---|---|
harbor-offline-installer-v2.2.3.tgz | harbor安装包 | https://github.com/goharbor/harbor/releases/ |
BinaryInstallation.zip | Docker二进制安装包 | - |
ok-springboot-imdemo-dev.zip | 微服务工程示例代码 | - |