jenkins實現k8s自動化發布


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM