环境以下
//前三个为K8s集群中的节点html
主机名 | IP | 运行服务 | |
---|---|---|---|
docker-k8s01 | 192.168.171.151 | docker+registry | |
docker-k8s02 | 192.168.171.150 | docker | |
docker-k8s03 | 192.168.171.152 | docker | |
Jenkins | 192.168.171.153 | Jenkins+gitlab+docker |
Jenkins采用war包的方式部署,须要用到tomcat环境,自行参考博文,进行部署;java
Docker 部署nginx
K8s 安装部署web
1、部署registry私有仓库
//任意节点均可部署**docker
一、运行registry容器
[root@docker-k8s01 ~]# docker run -itd --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry
二、配置各个节点指向私有仓库
//选择其中一个节点操做 [root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service //修该下面的配置项,以便指定其私有仓库的监听地址 ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000 //将已经配置好的文件发送到各节点 [root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s02:/usr/lib/systemd/system/ [root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s03:/usr/lib/systemd/system/ [root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service jenkins:/usr/lib/systemd/system/
三、各节点重启docker服务,使之生效
//每一个节点都须要执行 [root@docker-k8s01 ~]# systemctl daemon-reload [root@docker-k8s01 ~]# systemctl restart docker
2、部署Jenkins服务
//部署Jenkins以前,自行部署Tomcat服务,参考开头连接便可vim
//进入tomcat的webapps目录,根据实际状况而定,这里我直接删除了 [root@jenkins ~]# cd /usr/local/tomcat/webapps/ [root@jenkins webapps]# rm -rf * [root@jenkins webapps]# ls //刚刚上传上来发现tomcat自动给我解压了 jenkins jenkins.war //接下来指定Jenkins的家目录 [root@jenkins webapps]# vim ../bin/catalina.sh #!/bin/sh //在开头添加以下内容 export CATALINA_OPTS="-DJENKINS_HOME=/data/jenkins" export JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.ClassicPluginStrategy.noBytecodeTransformer=true" [root@jenkins webapps]# cd ../bin/ [root@jenkins bin]# ./catalina.sh start //启动tomcat //肯定端口已启动 [root@jenkins bin]# ss -anput | grep 8080 tcp LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=12236,fd=49))
3、配置Jenkins服务
要想实现Jenkins的CI/CD,必须有GitLab、GitLab HOOK、Git Lab Authentication这三个插件,国内不太好下载这几个插件。浏览器
一、配置Jenkins web界面
//浏览器访问tomcat服务的IP+端口/Jenkins(访问前最好先断掉外网,不然在输入密码后,会让在线安装插件,比较慢,并且颇有可能安装失败)tomcat
//查看密码 [root@jenkins ~]# cat /data/jenkins/secrets/initialAdminPassword 3eb89452e2614173a548a9d4cfe9fcc3
//输入密码后稍等一会出现以下图
//建立相应用户
登陆成功后,以下**
bash
二、配置所需插件
//关闭浏览器页面,对Jenkins添加插件
[root@jenkins ~]# rm -rf /data/jenkins/plugins/ [root@jenkins ~]# tar zxf plugins.tar.gz -C /data/jenkins/ //重启tomcat使之生效 [root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh stop [root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh start
//再次访问Jenkins的web界面
//能够看到已经变成了中文页面,说明插件配置生效
4、部署gitlab
一、安装gitlab
//下载gitlab的rpm包 [root@jenkins ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm [root@jenkins ~]# rpm -ivh gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm [root@jenkins ~]# vim /etc/gitlab/gitlab.rb external_url 'http://192.168.171.153:90' //将本来的域名更改成本机IP unicorn['listen'] = '192.168.171.153' //这两行在下方是有注释的,这里我直接添加了 unicorn['port'] = 3000 [root@jenkins ~]# gitlab-ctl reconfigure
接下来的操做可参考文章开头连接中的Gitlab安装部署来接着部署,最后保证能够将远端的库克隆到本地便可
**
//能够看到本地已经访问到gitlab [root@jenkins ~]# ls -d test1/ test1/
5、配置Jenkins建立一个任务
//脚本中的IP,192.168.171.151为私有仓库的IP,最后的192.168.171.151为k8s集群中master的IP地址 #!/bin/bash backupcode="/data/backcode/$JOB_NAME/$BUILD_NUMBER" #这里引用了Jenkins的默认变量 mkdir -p $backupcode chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/* rsync -acP "$JENKINS_HOME"/workspace/"$JOB_NAME"/* $backupcode echo From 192.168.171.151:5000/nginx > "$JENKINS_HOME"/workspace/Dockerfile echo COPY ./"$JOB_NAME"/* /usr/share/nginx/html/ >> "$JENKINS_HOME"/workspace/Dockerfile docker rmi 192.168.171.151:5000/nginx docker build -t 192.168.171.151:5000/nginx /"$JENKINS_HOME"/workspace/. docker push 192.168.171.151:5000/nginx ssh root@192.168.171.151 kubectl delete deployment nginx ssh root@192.168.171.151 kubectl apply -f /root/nginx.yaml
//脚本填写后,先别保存,根据如下操做复制一下Jenkins的地址
6、开启Jenkins的匿名访问权限
7、gitlab上开启容许向本身发送web hook
//这是由于我是把Jenkins和gitlab装在了一台服务器上
//保存后,下拉页面,便可看到新添加的web-hook,点击以下,进行测试
//返回状态码200,则表示配置无误
8、配置Jenkins免密登陆k8s群集的master节点
//Jenkins配置以下
//下方IP为k8s群集master的IP [root@jenkins ~]# ssh-copy-id root@192.168.171.151
9、测试持续CI/CD效果
一、k8s群集运行nginx资源对象
二、客户端访问nginx
三、在gitlab进行版本的更新迭代测试
[root@jenkins ~]# cd test1/ [root@jenkins test1]# git config --global user.name "test" [root@jenkins test1]# git config --global user.email "test@test.com" [root@jenkins test1]# echo "test--version==v1" > index.html [root@jenkins test1]# git add * [root@jenkins test1]# git commit -m "Test CI/CD" [root@jenkins test1]# git push origin master
//在进行上述操做后,便可在Jenkins新建的任务中,看到构建成功的信息
//再次访问nginx首页,发现已经变成了咱们在gitlab上提交的内容
//历史版本内容存放路径以下
[root@jenkins data]# pwd /data //这个目录下记录的是历史版本的代码 [root@jenkins data]# tree backcode/ backcode/ └── test-01 ├── 1 │ └── README.md └── 2 ├── index.html └── README.md [root@jenkins workspace]# pwd /data/jenkins/workspace //此目录下是将新代码构建成镜像的关键所在,Dockersfile就在这个目录下 [root@jenkins workspace]# ls Dockerfile test-01