jenkins实现k8s自动化发布


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM