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