jenkins实现k8s自动化发布
与jenkins集成实现ci/cd
ip地址 | 服务 | 内存 |
---|---|---|
10.0.0.5 | kube-apiserver 8080 | 1G |
10.0.0.6 | jenkins(tomcat + jdk) 8080 | 1G |
10.0.0.7 | gitlab 8080,80 | 2G |
以前是物理机,虚拟机立即构建,scp推过去,更新
现在是容器里,打成镜像,推镜像过去,镜像迭代更新
1.安装gitlab并上传代码
# 1.安装
[root@k8s-node-2 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm
[root@k8s-node-2 ~]# ll
-rw-r--r-- 1 root root 569408968 Jan 6 10:54 gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm
[root@k8s-node-2 ~]# yum localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y
# 2.修改配置文件
[root@k8s-node-2 ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.7'
prometheus_monitoring['enable'] = false #搜一下
# 3.应用并启动服务
[root@k8s-node-2 ~]# gitlab-ctl reconfigure
# 4.使用浏览器访问http://10.0.0.7,修改root用户密码,创建project
root
12345678
# 5.上传代码到git仓库
[root@k8s-node-2 /srv]# mkdir xiaoniao
[root@k8s-node-2 /srv]# cd xiaoniao/
[root@k8s-node-2 /srv/xiaoniao]# rz -E
rz waiting to receive.
[root@k8s-node-2 /srv/xiaoniao]# ll
-rw-r--r-- 1 root root 91014 Aug 22 10:03 xiaoniaofeifei.zip
[root@k8s-node-2 /srv/xiaoniao]# unzip xiaoniaofeifei.zip
[root@k8s-node-2 /srv/xiaoniao]# git config --global user.name "Administrator"
[root@k8s-node-2 /srv/xiaoniao]# git config --global user.email "admin@example.com"
[root@k8s-node-2 /srv/xiaoniao]# git init
[root@k8s-node-2 /srv/xiaoniao]# git remote add origin http://10.0.0.7:3000/root/xiaoniaofeifei.git
[root@k8s-node-2 /srv/xiaoniao]# git add .
[root@k8s-node-2 /srv/xiaoniao]# git commit -m "Initial commit"
[root@k8s-node-2 /srv/xiaoniao]# git push -u origin master
Username for 'http://10.0.0.7:3000': root
Password for 'http://root@10.0.0.7:3000': 12345678
2.安装jenkins,并自动构建docker镜像
2.1.安装jenkins
# 1.拖四个包上来
[root@k8s-node-1 /opt]# ll
-rw-r--r-- 1 root root 9128610 Aug 22 10:05 apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root root 166044032 Aug 22 10:05 jdk-8u102-linux-x64.rpm
-rw-r--r-- 1 root root 89566714 Aug 22 10:05 jenkin-data.tar.gz
-rw-r--r-- 1 root root 77289987 Aug 22 10:05 jenkins.war
# 2.解压并启动服务
[root@k8s-node-1 /opt]# rpm -ivh jdk-8u102-linux-x64.rpm
[root@k8s-node-1 /opt]# mkdir /app
[root@k8s-node-1 /opt]# tar xf apache-tomcat-8.0.27.tar.gz -C /app
[root@k8s-node-1 /opt]# rm -fr /app/apache-tomcat-8.0.27/webapps/*
[root@k8s-node-1 /opt]# mv jenkins.war /app/apache-tomcat-8.0.27/webapps/ROOT.war
[root@k8s-node-1 /opt]# tar xf jenkin-data.tar.gz -C /root
[root@k8s-node-1 /opt]# /app/apache-tomcat-8.0.27/bin/startup.sh
[root@k8s-node-1 /opt]# netstat -lntup
2.2.访问jenkins
访问http://10.0.0.6:8080/,默认账号密码admin:123456
2.3.配置jenkins拉取gitlab代码凭据
# 1.生成秘钥对
[root@k8s-node-1 ~]# ssh-keygen
# 2.复制公钥粘贴gitlab上
[root@k8s-node-1 ~]# cat .ssh/id_rsa.pub
xxxx
# 3.jenkins上创建全局凭据
[root@k8s-node-1 ~]# cat .ssh/id_rsa
2.4.拉取代码测试
git拉取的地址去gitlab上复制
2.5.编写dockerfile并测试
# 1.在小鸟的目录下写dockerfile
[root@k8s-node-2 /srv/xiaoniao]# vim dockerfile
FROM 10.0.0.5:5000/nginx:1.13 #这个是已有的镜像 拿来测试一下
add . /usr/share/nginx/html #把这个目录的所有代码放到代码目录下
# 2.测试
[root@k8s-node-2 /srv/xiaoniao]# docker build -t xiaoniao:v1 .
[root@k8s-node-2 /srv/xiaoniao]# docker run -d -p 82:80 xiaoniao:v1
2.6.上传dockerfile和.dockerignore到私有仓库
[root@k8s-node-2 /srv/xiaoniao]# git add .
[root@k8s-node-2 /srv/xiaoniao]# git commit -m 'add dockerfile'
[root@k8s-node-2 /srv/xiaoniao]# git push -u origin master
Username for 'http://10.0.0.7:3000': root
Password for 'http://root@10.0.0.7:3000': 12345678
2.7.点击jenkins立即构建,自动构建docker镜像并上传到私有仓库
# 立即构建v2 查看私有仓库
[root@k8s-master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/_manifests/tags/
v2
3 .jenkins自动部署应用到k8s
3.1.配置文件
# 1.node节点执行master操作
[root@k8s-node-1 ~]# kubectl -s 10.0.0.5:8080 get nodes
NAME STATUS AGE
10.0.0.6 Ready 1d
10.0.0.7 Ready 1d
# 2.写脚本做判断 是第一次创建还是更新
if [ -f /tmp/xiaoniao.lock ];then
docker build -t 10.0.0.5:5000/$JOB_NAME:v$BUILD_ID .
docker push 10.0.0.5:5000/$JOB_NAME:v$BUILD_ID
kubectl -s 10.0.0.5:8080 set image -n $JOB_NAME deploy $JOB_NAME $JOB_NAME=10.0.0.5:5000/$JOB_NAME:v$BUILD_ID
echo "更新成功"
else
docker build -t 10.0.0.5:5000/$JOB_NAME:v$BUILD_ID .
docker push 10.0.0.5:5000/$JOB_NAME:v$BUILD_ID
kubectl -s 10.0.0.5:8080 create namespace $JOB_NAME
kubectl -s 10.0.0.5:8080 run $JOB_NAME -n xiaoniao --image=10.0.0.5:5000/$JOB_NAME:v$BUILD_ID --replicas=3 --record
kubectl -s 10.0.0.5:8080 expose -n $JOB_NAME deployment $JOB_NAME --port=80 --type=NodePort
port=`kubectl -s 10.0.0.5:8080 get svc -n $JOB_NAME|grep -oP '(?<=80:)\d+'`
echo "你的项目地址访问是http://10.0.0.7:$port"
touch /tmp/$JOB_NAME.lock
fi
3.2.网页配置
3.3.查看结果
[root@k8s-master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/_manifests/tags/
v2 v3
3.4.测试更新
立即构建 提示更新成功
3.5.一键回滚
kubectl -s 10.0.0.5:8080 rollout undo -n xiaoniao deployment xiaoniao