k8s+jenkins實現自動化部署應用至k8s集羣

1.jenkins環境準備並啓動jenkins服務

1)jdk環境配置

[root@centos7 ~]# ll /app/

k8s+jenkins實現自動化部署應用至k8s集羣
[root@centos7 ~]# cat /etc/profile | tail -n3 #jdk的環境變量
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jarhtml

2)準備好jenkins啓動的war包

[root@centos7 war]# ll

k8s+jenkins實現自動化部署應用至k8s集羣

3)查看jenkins的啓動腳本

[root@centos7 war]# cat start.sh

k8s+jenkins實現自動化部署應用至k8s集羣

4)啓動jenkins

[root@centos7 war]# ./start.sh && tailf test.log

k8s+jenkins實現自動化部署應用至k8s集羣

5)在數據目錄修改hudson更新url,改成國內url,避免jenkins沒法啓動

[root@centos7 ~]# cat .jenkins/hudson.model.UpdateCenter.xml

k8s+jenkins實現自動化部署應用至k8s集羣

6)準備好主機解析或添加到DNS服務器

[root@centos7 ~]# cat /etc/hosts

k8s+jenkins實現自動化部署應用至k8s集羣

7)web端訪問jenkins界面

k8s+jenkins實現自動化部署應用至k8s集羣

8)建立一個jenkins_project項目,並編輯配置

k8s+jenkins實現自動化部署應用至k8s集羣
k8s+jenkins實現自動化部署應用至k8s集羣

9)在jenkins的後端準備好自動化部署腳本k8s_auto_deploy.sh,事先作好公私鑰認證,使得jenkins可以訪問k8s-master-1

[root@centos7 ~]# cat /data/script/k8s_auto_depoy.sh
#!/bin/bash
URL=git@k8s.gitlab.cn:middle-supoort-project/middle-compose-service.git
Starttime=`date +"%Y-%m-%d_%H-%M-%S"`
Method=$1
Branch=$2
t1=`date +"%Y-%m-%d %H:%M:%S"`

     #代碼克隆至jenkins後端
clone_code(){
    cd /root/.jenkins/workspace/jenkins_project && git clone -b $Branch ${URL}&& echo "Clone Finished"
}

 #代碼打包壓縮並遠程推送至k8s-master-1的nginx鏡像製做目錄
Pack_scp(){
    cd /root/.jenkins/workspace/jenkins_project/middle-compose-service/ && tar cvzf nginx.tar.gz * && echo Package Finished
    scp nginx.tar.gz root@k8s-master-1:/data/Dockerfile/nginx/ && ssh root@k8s-master-1 'cd /data/Dockerfile/nginx/ && tar xvf nginx.tar.gz &&rm -f nginx.tar.gz' 
}

 #遠程操做k8s-master-1節點,進行鏡像製做並推送至harbor鏡像倉庫
build_iamge(){
    ssh root@k8s-master-1 "cd /data/Dockerfile/nginx/ && ./build.sh ${Starttime} && echo 'build_image and push_harbor success!'"
}

    #對k8s集羣中的nginx的pod應用進行升級
app_update(){
    ssh root@k8s-master-1 "sed -ri 's@image: .*@image: k8s.harbor.cn/base_application/nginx:${Starttime}@g'  /data/mainfest/nginx.yaml"
    ssh root@k8s-master-1 "kubectl set image deployment/nginx-deployment nginx-container=k8s.harbor.cn/base_application/nginx:${Starttime} -n default --record=true"
                t2=`date +"%Y-%m-%d %H:%M:%S"`
    start_T=`date --date="${t1}" +%s`
    end_T=`date --date="${t2}" +%s`
    total_time=$((end_T-start_T))
    echo "deploy success,it has been spent ${total_time} seconds"   
}

    #k8s集羣中的pod應用進行回滾
app_rollback(){
    ssh root@k8s-master-1 'kubectl rollout undo deployment/nginx-deployment  -n default'
}

    #進行k8s集羣自動部署的主函數
main(){
    case $Method in 
    deploy)
        clone_code
        Pack_scp
        build_iamge
        app_update
    ;;
    rollback)
        app_rollback
    ;;
    esac
}

#執行主函數命令
main $1 $2

10)將jenkins的公鑰配置到gitlab服務的web端,使得jenkins能夠直接拉取代碼無需認證

[root@centos7 ~]# cat .ssh/id_rsa.pub
k8s+jenkins實現自動化部署應用至k8s集羣
k8s+jenkins實現自動化部署應用至k8s集羣nginx

2.k8s的master節點的準備

1)準備存放nginx應用鏡像製做的路徑,當前目錄爲空,其代碼配置文件均已放在gitlab服務器中

[root@k8s-master-1 ~]# ll /data/Dockerfile/nginx
total 0git

2)拉取harbor中的鏡像的認證文件

[root@k8s-master-1 ~]# ll /etc/docker/certs.d/k8s.harbor.cn/harbor_ca.crt
k8s+jenkins實現自動化部署應用至k8s集羣web

3)k8s集羣中nginx的yaml清單文件

[root@k8s-master-1 data]# vim /data/mainfest/nginx.yaml

k8s+jenkins實現自動化部署應用至k8s集羣

4)經過nginx.yaml文件啓動pod資源和service資源

[root@k8s-master-1 ~]# kubectl apply -f /data/mainfest/nginx.yaml

k8s+jenkins實現自動化部署應用至k8s集羣

5)查看nginx的pod應用以及service資源是否啓動

[root@k8s-master-1 ~]# kubectl get pod -n default

k8s+jenkins實現自動化部署應用至k8s集羣

6)查看service資源

[root@k8s-master-1 ~]# kubectl get service -n default

k8s+jenkins實現自動化部署應用至k8s集羣

7)web端訪問

k8s+jenkins實現自動化部署應用至k8s集羣

3.將nginx的鏡像構建等相關配置文件上傳到gitlab

1)如下爲nginx的鏡像配置文件,均在develop分支下

k8s+jenkins實現自動化部署應用至k8s集羣

2)製做nginx鏡像的Dockerfile文件

k8s+jenkins實現自動化部署應用至k8s集羣

3)build.sh鏡像的構建及自動推送至harbor的腳本

k8s+jenkins實現自動化部署應用至k8s集羣

4)index.html頁面文件

k8s+jenkins實現自動化部署應用至k8s集羣

5)nginx的主配置文件

k8s+jenkins實現自動化部署應用至k8s集羣

6)nginx的server訪問路徑配置文件

k8s+jenkins實現自動化部署應用至k8s集羣

3.當即構建jenkins工程,實現自動化部署nginx應用至k8s集羣

1)以上均準備完畢,開始構建jenkins工程

k8s+jenkins實現自動化部署應用至k8s集羣

2)選擇相應的分支後構建方法

k8s+jenkins實現自動化部署應用至k8s集羣

3)開始構建工程

k8s+jenkins實現自動化部署應用至k8s集羣

4)查看控制輸出

k8s+jenkins實現自動化部署應用至k8s集羣

5)查看k8s當前正在運行nginx的pod容器

[root@k8s-master-1 ~]# kubectl get pod -n default

k8s+jenkins實現自動化部署應用至k8s集羣

6)再查看當前正在運行pod的鏡像源地址,可見被自動更新

[root@k8s-master-1 ~]# kubectl describe pod nginx-deployment-b856886fb-9mzrm -n default

k8s+jenkins實現自動化部署應用至k8s集羣

7)查看nginx的yaml清單文件,也被自動修改

[root@k8s-master-1 ~]# cat /data/mainfest/nginx.yaml | grep "image:.*"

k8s+jenkins實現自動化部署應用至k8s集羣

8)查看harbor鏡像倉庫,查看構建的新鏡像是否成功推送到此harbor倉庫中

k8s+jenkins實現自動化部署應用至k8s集羣

9)web端訪問更新的nginx版本,可見實現自動化更新

k8s+jenkins實現自動化部署應用至k8s集羣

10)假設開發人員將gitlab中的index.html的版本更新爲1.13版

k8s+jenkins實現自動化部署應用至k8s集羣

11)再次構建發佈更新

k8s+jenkins實現自動化部署應用至k8s集羣

12)查看控制檯輸出結果

k8s+jenkins實現自動化部署應用至k8s集羣

13)web端訪問nginx應用

k8s+jenkins實現自動化部署應用至k8s集羣

4.若當前版本有問題,須要回滾,執行如下回滾操做

1)jenkins的控制檯選擇rollback回滾

k8s+jenkins實現自動化部署應用至k8s集羣

2)回滾過程的日誌查看

k8s+jenkins實現自動化部署應用至k8s集羣

3)web端驗證訪問,可見回滾成功

k8s+jenkins實現自動化部署應用至k8s集羣

相關文章
相關標籤/搜索