虚拟化容器,大数据,DBA,中间件,监控。

Jenkins项目自动上线至kubernetes集群

11 11月
作者:admin|分类:容器虚拟化

k8s对接Jenkins

1.jenkins工作流程

1.开发还是一样的写java代码,写好java代码后提交到gitlab仓库中,Jenkins在通过gitlab去拉取这些代码,开发只需要在Jenkins页面上点一下立即构建,就会调用shell命令将代码通过docker build 来构建镜像。
2.dockerfile一般研发同事会写好,如果研发不会写,运维也可以帮忙写,通用是这样的,由运维构建一个只有lnmp的镜像,研发在写dockerfile时from指定lnmp的镜像即可了。
3.构建完docker镜像后会将镜像上传到私有仓库中。
4.一般会在Jenkins服务器远程通过kubectl -s apiserver地址去调用k8s管理命令去启动一个容器,kube-apiserver会调用node节点去私有仓库获取镜像并运行开始工作。
5.如果是全新部署直接使用run命令部署即可,在用expose开放端口,过滤出svc的端口发个邮件提示上线成功。

整个流程就是,开发写代码---将代码上传至gitlab---Jenkins在从gitlab上获取代码并通过shell命令去构建成镜像---将镜像上传至私有仓库---在调用kube-apiserver去调度kubelet创建容器---并上线

2.环境规划

ip 服务 内存
192.168.81.210 kube-apiserver 8080 2G
192.168.81.220 kube-node 2G
192.168.81.230 jenkins(tomcat+jdk)8080 + kubelet 2G
192.168.81.240 gitlab 8080 2G

3.安装gitlab

3.1.安装

[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm

[root@gitlab ~]# yum localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y

安装成功

3.2.配置gitlab

1.修改配置文件
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://192.168.81.240'		#13行,修改为gitlab的地址
prometheus_monitoring['enable'] = false    #1535行,关闭普罗米修斯监控

2.启动gitlab应用服务
[root@gitlab ~]# gitlab-ctl reconfigure

3.每次开机后这样操作才能恢复应用
[root@gitlab ~]# gitlab-ctl restart
[root@gitlab ~]# gitlab-ctl reconfigure

3.3.访问gitlab

访问http://192.168.81.240/users/sign_in
尽量不要让服务器占用80端口
第一次访问需要创建用户,这里账号是root,密码admin123

3.4.修改gitlab nginx端口号

1)修改gitlab.rb
nginx['listen_port'] = 88			#1011行增加

2)修改nginx端口
[root@gitlab ~]# vim /var/opt/gitlab/nginx/conf/gitlab-http.conf 
  listen *:88;
  
3)重启
先重启gitlab,在重载gitlab配置
[root@gitlab ~]# gitlab-ctl restart
[root@gitlab ~]# gitlab-ctl reconfigure

4)访问
http://192.168.81.240:88/

4.gitlab上传代码

4.1.新建一个项目

1)点击create a project

2)填写信息并创建

3)创建完成

刚创建完成的项目下面没有代码是这个样子的

4.2.删除一个project

1)点击settings—general

2)点击advance—expand

3)点击remove project

4.3.上传代码

1)上传源码
[root@gitlab ~]# mkdir /data_web
[root@gitlab ~]# cd /data_web
rz上传源码
[root@gitlab data_web]# unzip know_system.zip 

2)安装git
[root@gitlab data_web]# yum -y install git
[root@gitlab data_web]# cd know_system/

3)git全局设置
[root@gitlab know_system]# git config --global user.name "root"
[root@gitlab know_system]# git config --global user.email "15910468023@163.com"

4)上传代码到gitlab
初始化git
[root@gitlab know_system]# git init

添加一下项目地址
[root@gitlab know_system]# git remote add know_system http://192.168.81.240:88/root/know_system.git

添加一下当前路径的文件
[root@gitlab know_system]# git add .

写一个描述信息
[root@gitlab know_system]# git commit -m "Initial commit knowsystem"

[root@gitlab know_system]# git push -u know_system master

提交成功

4.4.安装docker并编写dockerfile

1)安装
[root@gitlab know_system]# yum -y install docker
[root@gitlab know_system]# vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false 
--registry-mirror=https://registry.docker-cn.com --insecure-registry=192.168.81.240'

[root@gitlab know_system]# systemctl restart docker
[root@gitlab know_system]# docker login 192.168.81.240
Username: admin
Password: 
Login Succeeded



2)编写dockerfile
[root@gitlab know_system]# vim dockerfile
FROM 192.168.81.240/k8s/nginx:1.13
ADD . /usr/share/nginx/html

3)测试一下
[root@gitlab know_system]# docker build -t know_system:v1 .
[root@gitlab know_system]# curl -I 192.168.81.240:8001
HTTP/1.1 200 OK

4.5.更新gitlab上的代码

更新就是先用add添加一下文件,在加一个注释信息,在推送即可

将刚刚修改的dockerfile上传
[root@gitlab know_system]# git add .

[root@gitlab know_system]# git commit -m "add dockerfile"
[master 0d0c281] add dockerfile
 1 file changed, 2 insertions(+)
 create mode 100644 dockerfile
 
[root@gitlab know_system]# git push -u know_system master
Username for 'http://192.168.81.240:88': root 
Password for 'http://root@192.168.81.240:88': 
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 328 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To http://192.168.81.240:88/root/know_system.git
   1300815..0d0c281  master -> master
分支 master 设置为跟踪来自 know_system 的远程分支 master。

5.安装Jenkins

5.1.yum安装Jenkins

1)安装
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
Jenkins公钥文件
[root@jenkins ~]# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
[root@jenkins ~]# yum install java-1.8.0-openjdk -y 
[root@jenkins ~]# yum install jenkins -y

2)修改Jenkins镜像地址,避免页面出现Please wait while Jenkins is getting ready to work ...
[root@jenkins ~]# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

3)启动
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins

jenkins数据都存放在/var/lib/jenkins/

5.2.tomcat安装Jenkins

1)安装jdk1.8
[root@jenkins ~]# yum install java-1.8.0-openjdk -y 

2)安装tomcat
[root@jenkins ~]# cd soft
[root@jenkins soft]# wget http://down.i4t.com/apache-tomcat-8.5.39.tar.gz
[root@jenkins soft]# mkdir /application
[root@jenkins soft]# tar xf apache-tomcat-8.5.39.tar.gz -C /application/
[root@jenkins soft]# mv /application/apache-tomcat-8.5.39/ /application/jenkins
[root@jenkins soft]# rm –rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT

3)下载war包
[root@jenkins soft]# wget http://down.i4t.com/jenkins.war
[root@jenkins soft]# cp jenkins.war /application/jenkins/webapps/ROOT/
[root@jenkins jenkins]# cd /application/jenkins/webapps/ROOT/
[root@jenkins ROOT]# unzip jenkins.war

4)修改Jenkins镜像地址,避免页面出现Please wait while Jenkins is getting ready to work ...
[root@jenkins ~]# vim .jenkins/hudson.model.UpdateCenter.xml 
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

5)启动
[root@jenkins jenkins]# ./bin/startup.sh 

启动完成后日志这样输出

5.3.页面配置Jenkins

5.3.1.解锁Jenkins

密码从这个文件中获取

[root@jenkins ~]# vim .jenkins/secrets/initialAdminPassword 
4fe7d507415547cdb21176a24b316daa

5.3.2.安装Jenkins

自定义安装

安装插件中

如有失败的,安装完成后进入Jenkins后再更新插件

创建用户

实例配置

完成

5.3.3.登录Jenkins

访问http://192.168.81.230:8080/login?from=%2F
用户名密码是刚刚设置的admin/admin

5.3.4.解决第一次登录空白问题

访问http://192.168.81.230:8080/pluginManager/advanced
点击提交
然后重启tomcat

6.Jenkins从gitlab拉取代码

大致流程:首先生成一对密钥,将公钥在gitlab上导入,私钥在jenkins新增一个凭证写入私钥,导入后在jenkins新增一个项目,然后填入gitlab项目地址,并关联凭证,点击构建即可拉取代码

6.1.ssh认证免密登录

6.1.1.生成密钥对

生成公私钥
[root@jenkins application]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:uq0yNtNj6IN3E9j2sgC4Qw1IIPDcdfXQ3btNYoMVzw8 root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
|*.    . ..o. ..o |
|+o . . .   o. oo.|
|..o .       .oE +|
| .o         . +oo|
|.... o  S    . ++|
|.. .. +.       ..|
|o  ..+.o         |
| .. X.Bo.        |
|   +.O+*.        |
+----[SHA256]-----+

6.1.2.在gitlab上添加公钥

进入gitlab点击右上角的图像—setting----ssh keys—将公钥填入—add key

获取公钥并粘贴到gitlab上
[root@jenkins ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC99sW1Sv/bumVPVTGR3BujNK8CdR3AJh8arvNkFlyKo6MCUaFENb8oqSQuB3yrAf2RDjWSL3MQgk0IXTEr5I/1oiXDUrkIKI3wGnx/mhnS1ZDkcCf4eBOJvC/GYIO7jYW88Vr/WHmlseMj0aXfxssBAYD7aEB0QJj/jgNEoFkLgchDqnK+EHGvKGZ2gline93OWDbNcvrdOFfCj3Vb+nyzTjbIhfVjhK+PzB5vHKoMTpfkK0hHyQCJl+mVN6n1DZkq7Ehz1OWwfY2ycayEXfsVKSIiiplf1syk1TD5eLRzsJsj5SF+hSLP4G2HAswWNPHBNRokewArn7CjsiRMEul3 root@jenkins

6.1.3.在Jenkins上添加凭据(私钥)

获取私钥

[root@jenkins ~]# cat .ssh/id_rsa

1)点击管理詹金斯-----管理凭证

2)点击全局

3)点击添加凭据

4)填写凭据信息—类型选择ssh—写上username(随便起)—enter directly—add

5)将私钥导入

6.2.拉取代码

6.2.1.新建一个item

1)新建item

2)获取gitlab代码地址

通过ssh连接gitlab因此获取gitlab ssh地址

3)配置源码管理

4)设置构建执行的命令

6.2.2.拉取gitlab代码

1)点击项目名即可进入

2)立即构建

3)查看构建日志

6.2.3.查看项目在服务器上的存储路径

位于/var/lib/jenkins/workspace/这个目录,这里面会存放gitlab上的代码

7.jenkins自建docker镜像

7.1.在jenkins上安装docker并配置私有仓库

1)安装docker
[root@jenkins ~]# yum -y install docker

2)配置私有仓库
[root@jenkins ~]# vim /etc/sysconfig/docker

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false 
--registry-mirror=https://registry.docker-cn.com --insecure-registry=192.168.81.240'

3)重启
[root@jenkins ~]# systemctl restart docker

4)登录私有仓库
[root@jenkins ~]# docker login 192.168.81.240
Username: admin
Password: 
Login Succeeded

7.2.配置构建镜像

只需要修改项目执行的命令就可以了

1)点击配置

2)配置执行的命令

两种方式
1)固定死版本
docker build -t 192.168.81.240/k8s/know_system:v$BUILD_ID .
docker push 192.168.81.240/k8s/know_system:v$BUILD_ID 

点表示dockerfile路径,jenkins从Gitlab上拉取了代码,目前当前项目是在代码路径的

2)使用变量
jenkins有很多变量可以在页面上找
项目不可能一成不变,因此采用变量方式
docker build -t 192.168.81.240/k8s/know_system:v$BUILD_ID .
docker push 192.168.81.240/k8s/know_system:v$BUILD_ID 

主要用到此变量

7.3.jenkins自建镜像

1)点击构建

构建失败会出来雷电的图标

查看输出发现构建成功

2)查看harbor仓库的镜像

3)创建一个看看

1.pull镜像
[root@gitlab harbor]# docker pull 192.168.81.240/k8s/know_system:v5

2.运行镜像
[root@gitlab harbor]# docker run -it -d -p 9999:80 192.168.81.240/k8s/know_system:v5

3.查看容器的地址
[root@gitlab harbor]# docker inspect focused_goodall | less

4.访问页面
[root@gitlab harbor]# curl  -I 172.17.0.2
HTTP/1.1 200 OK

5.拿真机去访问,注意标题一会和升级后的对比

7.4.升级镜像并运行查看

1)修改页面代码

两种方式:第一种在gitlab服务器修改,然后推送至gitlab,第二种直接在gitlab页面编辑

[root@gitlab know_system]# vim index.html 
<title>知识点目录--update</title>

[root@gitlab know_system]# git add  .
[root@gitlab know_system]# git commit -m "update index"
[root@gitlab know_system]# git push know_system master

真实环境都这么做

在gitlab上找到index.html点击进去点击edit即可编辑,编辑完点击下面的commit

2)拉取代码推送

页面直接点击构建

构建成功v6版

3)pull下来运行并测试

[root@jenkins know_system]# docker pull 192.168.81.240/k8s/know_system:v6
Trying to pull repository 192.168.81.240/k8s/know_system ... 
v6: Pulling from 192.168.81.240/k8s/know_system
Digest: sha256:40861239ba01a79729aa049fa512f24ad39fa354468ec7ca743f9bc8130067fd
[root@jenkins know_system]# docker run -itd -p 8999:80 192.168.81.240/k8s/know_system:v6
db15aa294faa6c172e10bce573ae233a648f6fb8fd37ae111cc87ee233c75e2d

访问页面已经更新,已经和v5版不一样

8.jenkins自动发布

8.1.编写自动发布脚本

首先安装kubectl命令
[root@jenkins ~]# yum -y install kubernetes-client
测试一下
[root@jenkins ~]# kubectl -s 192.168.81.210:8080 get nodes
NAME             STATUS    AGE
192.168.81.220   Ready     23d

脚本内容
#!/bin/bash
image_name=know_system
k8s_name=know-system
harbor_ip=192.168.81.240
harbor_xm=k8s
k8s_master="192.168.81.210:8080"
k8s_node=192.168.81.220
if [ -f /tmp/${image_name}.lock ];then
        docker build -t ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID .
        docker push ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID
        kubectl -s $k8s_master set image -n $k8s_name deploy $k8s_name $k8s_name=${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID
        echo "更新成功"
else
        docker build -t ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID .
        docker push ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID
        kubectl -s $k8s_master create namespace $k8s_name
        kubectl -s $k8s_master run $k8s_name -n $k8s_name --image=${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID --replicas=3 --record
        kubectl -s  $k8s_master expose -n $k8s_name deployment $k8s_name --port=80 --type=NodePort
        port=`kubectl -s $k8s_master get svc -n $k8s_name | grep -oP '(?<=80:)\d+'`
        echo "你的项目地址是http://${k8s_node}:${port}"
        touch /tmp/${image_name}.lock
fi

8.2.修改项目配置

只需要修改命令为脚本内容即可

8.3.自动构建

8.3.1.第一次构建是run一个

点击立即构建

查看日志输出

访问页面内容

查看k8s上创建的资源

8.3.2.第二次构建就是更新

更新代码

点击构建–看日志

查看harbor仓库

访问页面,查看是否更新

已更新

8.4.自动回滚

8.4.1.命令回滚

kubectl -s 192.168.81.210:8080 rollout undo -n know-system deployment know-system

8.4.2.jenkins自动回滚

新建一个项目

直接填上回滚命令即可

依旧点击自动构建

点击自动构建—看日志

已成功

查看页面已回滚成功

8.4.3.回滚记录

[root@k8s-master ~]# kubectl rollout history deployment -n know-system 

9.总结

jenkins自建镜像流程:首先提交代码到gitlab,jenkins服务器生成密钥文件,将公钥导入到gitlab中,在jenkins页面新增一个凭据,将私钥写入,然后在新增一个项目,源码管理选择Git,写入Gitlab ssh地址,并关联好凭据,构建命令写成执行dockerfile的命令并推送到harbor上,保存后点击自动构建即可

jenkins自动发布流程:首先编写一个脚本,如果第一次发布,发布成功后提示一个项目访问地址,往后再发布就提示更新成功,然后将脚本粘贴到项目配置中的执行命令部分即可,然后点击自动构建,会调用k8s去创建deployment资源和svc资源,然后访问应用即可

jenkins回滚流程:新建一个项目将回滚命令粘贴到执行命令方框中,点击自动构建即可回滚

浏览537 评论0
返回
目录
返回
首页
docker-compose容器集群编排详解(十二) k8s使用glusterfs做持久化存储(十三)