kubernetes 開發,基于Kubernetes的CI/CDPipeline流水線解決方案

 2023-10-21 阅读 31 评论 0

摘要:Pipeline 介紹 ?要實現在 Jenkins 中的構建工作,可以有多種方式,我們這里采用比較常用的 Pipeline 這種方式。Pipeline,簡單來說,就是一套運行在 Jenkins 上的工作流框架,將原來獨立運行于單個或者多個節點的任務連接起來,實現單個

Pipeline 介紹
?要實現在 Jenkins 中的構建工作,可以有多種方式,我們這里采用比較常用的 Pipeline 這種方式。Pipeline,簡單來說,就是一套運行在 Jenkins 上的工作流框架,將原來獨立運行于單個或者多個節點的任務連接起來,實現單個任務難以完成的復雜流程編排和可視化的工作。

?總體架構
?在開始我們的工作之前,讓我們花一點時間分析開始使用Jenkins使用Kubernetes容器所需的工作流。Kubernetes對于開發者來說是一個驚人的開源容器編排引擎。Kubernetes是由Google發起的,這使Kubernetes在使用多個開源容器項目方面有一個驚人的優勢。默認情況下,Docker更受Kubernetes的使用者支持和青睞。使用Docker容器的工作流程如下圖所示:


?k8s Jenkins構建持續集成流程
?
??Docker技術這些應用場景
?參考文檔:https://blog.csdn.net/xiegh2014/article/details/80456486
?部署準備
?```
?gogs代碼管理
?git服務器安裝參考:https://blog.csdn.net/xiegh2014/article/details/81434421
?
?Harbor鏡像管理
?
?持久化存儲
?NFS安裝
?1、使用yum源安裝
?yum -y install nfs-utils -y
?vim /etc/exports
?/data/qas *(rw,no_root_squash)
?2、啟動nfs服務
?開機啟動
?systemctl enable rpcbind.service
?systemctl enable nfs-server.service
?啟動nfs服務
?systemctl start rpcbind.service
?systemctl start nfs-server.service
?3、檢查 NFS 服務器端是否有目錄共享
?showmount -e 192.168.58.110
?
?GlusterFS集群安裝參考文檔:
?```
?安裝步驟
?```
?創建namespace命名空間:
?kubectl create namespace kube-jenkins
?創建PVC對象:
?kubectl create -f jenkins-pvc.yaml
?創建rbac相關的資源對象:
?kubectl create -f jenkins-rbac.yaml
?創建Jenkins服務:
?kubectl create -f jenkins.yaml
?```
??測試
?```
?node {
? ?stage(' git倉庫拉代碼') { // for display purposes
? ? ? ? sh "echo 'git checkout'"
? ?}
? ?stage('構建代碼') {
? ? ? ? sh "echo 'Build...'"
? ?}
? ?stage('自動化測試') {
? ? ? ? sh "echo 'deploy...'"
? ?}
? ?stage('發布代碼K8S') {
? ? ? ? sh "echo 'deploy...'"
? ?}
}
?```
?離線包下載
? ? ? 鏈接:https://share.weiyun.com/5pCfEWm 密碼:kq3dwn
? ? ? 鏈接:https://share.weiyun.com/5pf0e0G 密碼:pejdye
? ? ? 鏈接:https://share.weiyun.com/5m4ADMk 密碼:x4uh4c
? ? ? 鏈接:https://share.weiyun.com/5FFbM3B 密碼:y4fcff
? ? ??
? ? ??
?openssl pkcs12 -export -out admin.pfx -inkey admin-key.pem -in admin.pem -certfile ca.pem
?傳統CICD存在的問題
?Jenkins 安裝完成了,接下來我們不用急著就去使用,我們要了解下在 Kubernetes 環境下面使用 Jenkins 有什么好處。

?我們知道持續構建與發布是我們日常工作中必不可少的一個步驟,目前大多公司都采用 Jenkins 集群來搭建符合需求的 CI/CD 流程,然而傳統的 Jenkins Slave 一主多從方式會存在一些痛點,比如:

?- 主 Master 發生單點故障時,整個流程都不可用了
?- 每個 Slave 的配置環境不一樣,來完成不同語言的編譯打包等操作,但是這些差異化的配置導致管理起來非常不方便,維護起來也是比較費勁
?- 資源分配不均衡,有的 Slave 要運行的 job 出現排隊等待,而有的 Slave 處于空閑狀態
?- 資源有浪費,每臺 Slave 可能是物理機或者虛擬機,當 Slave 處于空閑狀態時,也不會完全釋放掉資源。
?Pipeline&CICD優點
?正因為上面的這些種種痛點,我們渴望一種更高效更可靠的方式來完成這個 CI/CD 流程,而 Docker 虛擬化容器技術能很好的解決這個痛點,又特別是在 Kubernetes 集群環境下面能夠更好來解決上面的問題,下圖是基于 Kubernetes 搭建 Jenkins 集群的簡單示意圖:
?- 服務高可用,當 Jenkins Master 出現故障時,Kubernetes 會自動創建一個新的 Jenkins Master 容器,并且將 Volume 分配給新創建的容器,保證數據不丟失,從而達到集群服務高可用。
?- 動態伸縮,合理使用資源,每次運行 Job 時,會自動創建一個 Jenkins Slave,Job 完成后,Slave 自動注銷并刪除容器,資源自動釋放,而且 Kubernetes 會根據每個資源的使用情況,動態分配 Slave 到空閑的節點上創建,降低出現因某節點資源利用率高,還排隊等待在該節點的情況。
?- 擴展性好,當 Kubernetes 集群的資源嚴重不足而導致 Job 排隊等待時,可以很容易的添加一個 Kubernetes Node 到集群中,從而實現擴展。
?缺點
?jnlp-slave pod 無法刪除
?如果 jnlp-slave pod創建失敗,它會不斷的嘗試創建新的pod,并試圖連接jenkins,一段時間后,就會創造很多失敗的jnlp-slave pod。如果遇到這種情況,需 ?要盡早中斷任務并刪除失敗的pod。(需要手動刪除jnlp-slave pod)

kubernetes 開發,GIT地址
https://github.com/xgh2016/k8s-CICD-Pipeline

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/164018.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息