记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

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回滚流程:新建一个项目将回滚命令粘贴到执行命令方框中,点击自动构建即可回滚



转载请标明出处【Jenkins项目自动上线至kubernetes集群】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论