导航菜单
首页 >  netcore+gitlab+jenkins+docker+harbor+k8s自动发布项目  > k8s的持续集成(jenkins+gitlab+k8s)

k8s的持续集成(jenkins+gitlab+k8s)

实验环境

IP

主机名

192.168.3.101

k8s-master1

192.168.3.102

k8s-master2

192.168.3.103

k8s-master3

192.168.3.104

k8s-worker1

192.168.3.105

k8s-worker2

192.168.3.106

k8s-worker3

192.168.3.107

k8s-jenkins

192.168.3.108

k8s-registry

192.168.3.109

k8s-gitlab

192.168.3.220/192.168.3.109

gitlab

总体流程:

在开发机开发代码后提交到gitlab之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry之后将在k8s-master上执行rc、service的创建,进而创建Pod,从私服拉取镜像,根据该镜像启动容器一.验证k8s群集是否搭建好!

root@k8s-master1 docker.yml#kubectl get node

二. 部署私有仓库(192.168.3.108)1.基于docker部署代码语言:txt复制首先部署dockeryum install -y yum-utils device-mapper-persistent-data lvm2wget -O /etc/yum.repos.d/aliyun.base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce-18.09.9-3.el7# 启动docker,并设置docker开机自启 systemctl start docker && systemctl enable docker # 配置加速,并设置驱动 cat /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"]}EOFjavascript:;# 加载daemon并重启dockersystemctl daemon-reload && systemctl restart docker 代码语言:txt复制##下载registry镜像 docker pull registry ##基于registry镜像,启动一台容器 docker run -itd --name registry -p 5000:5000 --restart=always registry:latest ##修改仓库地址vim /usr/lib/systemd/system/docker.service #13行修改ExecStart=/usr/bin/dockerd --insecure-registry 192.168.3.108:5000##重启docker systemctl daemon-reload && systemctl restart docker.service ##验证registry是否安装成功##把容器重命名一个标签docker pull httpddocker tag httpd:latest 192.168.3.108:5000/web:v1 docker tag httpd:latest 192.168.3.108:5000/web:v2docker ps##上传容器到私有仓库docker push 192.168.3.108:5000/web:v1docker push 192.168.3.108:5000/web:v2代码语言:txt复制##将集群中的所有docker都加入私有仓库(k8s-master2 k8s-master3 k8s-worker1 k8s-worker2 k8s-worker3 k8s-jenkins)vim /usr/lib/systemd/system/docker.service #13行修改ExecStart=/usr/bin/dockerd --insecure-registry 192.168.3.108:5000 ##重启dockersystemctl daemon-reload && systemctl restart docker.service##测试下载docker pull 192.168.3.108:5000/web:v1

然后重要的地方到了,建立 yaml配置文件让kubernetes自己控制容器集群。

用来模拟我们部署的服务

代码语言:txt复制[root@localhost master]# vim deploy.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: webspec: replicas: 2 selector:matchLabels:name: web template:metadata: labels:name: webspec: containers: - name: webimage: 192.168.3.108:5000/web:v1imagePullPolicy: Alwaysports:- containerPort: 80[root@localhost master]# kubectl apply -f deploy.yaml可是容器的ip只能在容器本机上访问,集群内的其他主机和集群外的主机都没办法访问,这个时候就需要将容器的端口映射到服务器上的端口了,所以需要做一个service的模板。service 模板可以将容器的端口映射到服务器的端口上,并且可以固定映射在服务器上的端口。代码语言:txt复制[root@localhost master]# vim deploy-svc.yaml apiVersion: v1kind: Servicemetadata: labels:name: web name: webspec: type: NodePort ports: - port: 80targetPort: 80nodePort: 31234 selector:name: web[root@localhost master]# kubectl apply -f deploy-svc.yaml

访问一下http://192.168.1.21:31234/

三. gitlab和jenkins加入私有仓库(192.168.3.107)1.安装docker代码语言:txt复制yum install -y yum-utils device-mapper-persistent-data lvm2wget -O /etc/yum.repos.d/aliyun.base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce-18.09.9-3.el7# 启动docker,并设置docker开机自启 systemctl start docker && systemctl enable docker # 配置加速,并设置驱动 cat /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"]}EOFjavascript:;# 加载daemon并重启dockersystemctl daemon-reload && systemctl restart docker

2.git和jenkins加入私有仓库

代码语言:txt复制vim /usr/lib/systemd/system/docker.service #13行修改ExecStart=/usr/bin/dockerd --insecure-registry 192.168.3.108:5000 ##重启dockersystemctl daemon-reload && systemctl restart docker.service##测试下载docker pull 192.168.3.108:5000/web:v13.jenkins服务器向k8smaster做免密登录代码语言:txt复制[root@k8s-jenkins ~]# ssh-keygen -t rsa[root@k8s-jenkins ~]# ssh-copy-id 192.168.3.101四.安装jenkins(192.168.3.107)1.创建Jenkins挂载目录并授权权限代码语言:txt复制[root@jenkins ~]# tar -zxf jdk-8u231-linux-x64.tar.gz[root@jenkins ~]# mv jdk1.8.0_131 /usr/java#注意 这里有位置敏感,不要多一个“/”[root@jenkins ~]# vim /etc/profile #在最下面写export JAVA_HOME=/usr/javaexport JRE_HOME=/usr/java/jreexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATHexport CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar[root@jenkins ~]# source /etc/profile//环境变量生效[root@jenkins ~]# java -version//验证环境变量2. 安装tomcat代码语言:txt复制[root@jenkins ~]# tar -zxf apache-tomcat-7.0.54.tar.gz [root@jenkins ~]# mv apache-tomcat-7.0.54 /usr/local/tomcat7[root@jenkins ~]# cd /usr/local/tomcat7/webapps/[root@jenkins webapps]# rm -rf *[root@jenkins webapps]# cp /root/jenkins.war . #这几步是jenkins的包放进了tomcat里[root@jenkins webapps]# vim /usr/local/tomcat7/conf/server.xml //修改tomcat的字符集代码语言:txt复制[root@jenkins webapps]# cd /usr/local/tomcat7/bin/ [root@jenkins bin]# vim catalina.sh export CATALINA_OPTS="-DJENKINS_HOME=/data/jenkins" export JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.ClassicPluginStrategy.noBytecodeTransformer=true" //这两行添加的是jenkins的家目录位置,这个很重要 [root@jenkins bin]# ./catalina.sh start //启动tomcat

浏览器访问: 192.168.3.107:8080/jenkins

等待插件的安装等待插件的安装junran123!junran123!

jenkins搭建完成

搜索:GitLab

五.安装gitlab(192.168.3.109)1.安装依赖包代码语言:txt复制yum -y install curl policycoreutils openssh-server openssh-clients postfix gitsystemctl enable sshd systemctl start sshd systemctl enable postfix systemctl start postfix

2.安装gitlab-ce

代码语言:txt复制[root@git ~]# cat> /etc/yum.repos.d/gitlab-ce.repo "$JENKINS_HOME"/workspace/Dockerfileecho COPY ./"$JOB_NAME"/* /usr/local/apache2/htdocs/ >> "$JENKINS_HOME"/workspace/Dockerfiledocker rmi 192.168.3.108:5000/web:v1docker build -t 192.168.3.108:5000/web:v1 /"$JENKINS_HOME"/workspace/.docker push 192.168.3.108:5000/web:v1ssh root@192.168.3.101 kubectl delete deployment webssh root@192.168.3.101 kubectl apply -f /root/app/deploy.yaml$JOB_NAME:项目名称$BUILD_NUMBER:第几次构建$JENKINS_HOME:jenkins的家目录

完事以后先别保存,首先复制一下上面的jenkins地址,然后去gitlab上绑定webhook

保存,登陆gitlab,点击下图这个设置

因为不可以本地使用的webhook

下面是解决方法

再次添加webhook

回到Jenkins开启匿名访问权限

好了,jenkins和gitlab 都已经互相的ssh通过了,然后我们最后需要做的一个ssh是关于jenkins

注意,这里是从gitlab和jenkins向master节点做免密登录。

///注意,这里是从git和jenkins向master节点做免密登录。

代码语言:txt复制[root@k8s-jenkins ~]# ssh-keygen -t rsa[root@gitlab ~]# ssh-copy-id root@192.168.3.101[root@k8s-jenkins ~]# ssh-keygen -t rsa[root@jenkins ~]# ssh-copy-id root@192.168.3.101

好了,环境全部部署完毕!!!。开始测试

五、测试

测试的方法很简单,就是在gitlab上新建代码,删除代码,修改代码,都会触发webhook进行自动部署。最终会作用在所有的nginx容器中,也就是我们的web服务器。

这里我修改了之前建立的 index.html文件 保存以后,就打开浏览器 一直访问kubernetes-node 里面的容器了

访问一下http://192.168.3.101:31234/

如果没有变,应该注意查看是否在jenkins上构建完成,等以小会就可以了。

构建成功

相关推荐: