Jenkins X基本概念:Jenkins K8S helm Draft gitops
概念
Jenkins X是基于Kubernetes的持續集成、持續部署平臺。也是Jenkins的子項目。Jenkins X旨在使程序員在研發過程中能夠輕松遵循DevOps原理和最佳實踐。
介紹
Jenkins X是研發過程和工具的選擇,以及將所有東西包裝成一個易于學習和使用的內聚單元的膠水。從事軟件行業的人總是傾向于重新發明輪子。我們花了無數個小時試圖找出如何更快地開發我們的應用程序,以及如何擁有一個盡可能接近生產的本地環境。我們花時間搜索工具,使我們能夠更有效地打包和部署我們的應用程序。我們設計形成連續輸送管道的步驟。我們編寫腳本來自動執行重復的任務。然而,我們無法逃避這樣一種感覺:我們很可能正在重新創造別人已經做過的事情。Jenkins X旨在幫助我們做出這些決定,并幫助我們為工作選擇正確的工具。這是一個行業最佳實踐的集合。在某些情況下,Jenkins X是定義這些實踐的人,而在其他情況下,它幫助我們采用其他人的實踐。
比如當我們開始一個新的項目,Jenkins x將創建結構和所需的文件。如果我們需要一個kubernetes集群,其中包含選擇、安裝和配置的所有工具,Jenkins X將執行此操作。如果我們需要創建git存儲庫、設置webhook和創建連續的傳遞管道,我們只需要執行一個jx命令。
原則
“DevOps是旨在縮短將源代碼發布到生產環境時間的一組實踐。這里不僅僅減少從源代碼更改到最后生產環境發布的時間差,同時還要確保系統的高質量,”
DevOps項目的目標是:
1、更快的上市時間
2、提高部署頻率
3、更短的修復時間
4、降低發布失敗率
5、更快的平均恢復時間
高效團隊應該每天能夠部署多次,遠高于每周一次到每月一次的行業平均水平。
從“提交的代碼”狀態到“生產中的代碼”狀態的時間應少于一小時,更改失敗率應少于15%,而業界平均比例高達31-45%。
從故障中恢復的平均時間也應少于一小時。
Jenkins X從最初的設計就是基于這些原則,允許團隊應用DevOps最佳實踐來達到行業頂峰的績效目標。
最佳實踐
以下最佳實踐被認為是成功運行DevOps方法的關鍵:
1、松耦合架構
2、自助服務配置
3、自動部署和管理資源
4、持續構建/集成和交付
5、自動發布管理
6、增量測試
7、基礎結構配置為代碼
8、全面的配置管理
9、基于主干的開發和功能標志
Jenkins X將許多業界熟悉的方法和組件整合到一個系統中,從而最大程度地減少了復雜性。
架構
Jenkins X建立在松耦合架構的DevOps模型的基礎上,用以支持多個團隊可重復的方式部署大量分布式微服務。
概念模型
構建
Jenkins X建立在以下核心組件之上:
Kubernetes & Docker
該系統的核心是Kubernetes,它已成為DevOps的事實上的虛擬基礎架構平臺。現在,每個主要的云提供商都提供Kubernetes基礎架構服務。如果需要,Kubernetes也可以內部安裝在私有云基礎架構上。還可以使用Minikube安裝程序在本地開發硬件上創建測試環境。
在功能上,Kubernetes平臺擴展了以跨越多個物理節點的Docker容器。
簡而言之,Kubernetes提供了一個同類的虛擬基礎架構,可以通過添加或刪除節點來動態擴容。每個節點都可參與單個大型專用虛擬網絡空間。
Kubernetes中的部署單位是Pod,pod可以包含一個或多個Docker容器和一些元數據。Pod中的所有容器共享相同的虛擬IP地址和端口空間。Kubernetes的部署是聲明式的。當用戶指定要部署Pod的版本和數量后,Kubernetes通過跨節點部署或刪除Pod來決定從當前狀態到所需狀態所需的操作。關于如何配置Pod的具體特性則被系統可用資源,所需資源和標簽匹配的影響。部署后,Kubernetes會定期進行健康狀況檢查,通過終止和替換無響應的Pod來確保每種類型的Pod所需保持數量。
為了確定某種結構,Kubernetes允許創建虛擬命名空間Namespace,該命名空間可用于邏輯上分隔Pod,并將Pod組與特定資源相關聯。例如,命名空間中的資源可以共享一個安全策略。資源名稱在命名空間內必須唯一,但可以在不同命名空間中重用。
在Jenkins X模型中,一個Pod相當于一個已部署的微服務實例(在大多數情況下)。在需要水平擴展微服務的情況下,Kubernetes允許部署多個相同運行實例的Pods,而每個實例都有其自己的虛擬IP地址。它們可以聚合到一個稱為服務Service的虛擬節點中,該節點有唯一的靜態IP地址和與該服務名稱匹配的本地DNS條目。對該服務的調用會動態隨機映射到某個健康Pod實例的IP。服務還可以用于重新映射端口。在Kubernetes虛擬網絡中,可以使用以下格式的使用完全域名來調用服務:“…svc.cluster.local”,可以將其縮寫為 “.” 或在屬于相同名稱空間Namespace的情況下僅為“”。比方說,在“finance” 的名稱空間下調用RESTful服務“payment”,就可以在代碼中根據調用代碼的位置來決定是“http://payments.finance.svc.cluster.local”,“http://payments.finance”或只是“http://payments”。
Kubernetes代表了一個強大且不斷更新的可用于大規模部署服務的平臺。但是一般研發人員也很難理解和操作Kubernetes的負責配置。Jenkins X為Kubernetes帶來了一組默認配置和一些簡化的工具,這些工具目的就是優化DevOps和簡化松耦合服務的管理。
“jx”命令行工具提供了對Kubernetes實例進行一些常見操作的簡單方法,例如查看日志和連接到容器實例。此外,Jenkins X通過擴展Kubernetes命名來創建Environments,這些Environments可以流水線的方式鏈接在一起形成不斷升級的發布管道。
Jenkins X Environment可以給研發團隊的一個給定虛擬基礎架構環境,例如Dev,Staging,Production等。通過定義環境之間的升級規則,構建完的代碼可以在流水線里的各個環境上進行自動或手動發布。每個環境均按照GitOps方法進行管理環境的狀態在Git存儲庫里來維護,向Git存儲庫提交或回滾變更會觸發Kubernetes中給定環境狀態的相應改變。
在Jenkins X的系統里,我們可以使用jx create cluster命令直接創建Kubernetes集群,從而在發生故障時輕松地復制集群。同樣,我們可以使用“jx upgrade platform” 在現有集群上升級Jenkins X平臺。Jenkins X支持通過jx context處理多個Kubernetes集群,并支持jx environment切換在同一個集群中的不同環境。
開發人員應了解Kubernetes提供在整個群集中分發配置和安全憑證的功能。ConfigMap可用于為非機密配置元數據創建名稱/值對name/value pairs的集合,同時Secrets則對安全憑證和令牌執行加密保護的機制。Kubernetes還提供了一種為Pod指定資源配額的機制,這對于優化跨節點的部署是必要的。
默認情況下,Pod狀態為瞬態。刪除該Pod時,寫入Pod本地文件系統的所有數據都會丟失。開發人員應注意,作為Node常規負載平衡過程的一部分,Kubernetes可能會在任何時候單方面決定刪除Pods實例并重新創建它們,因此本地數據可能隨時丟失。如果需要保存狀態數據,則需要聲明持久保留的儲存空間,并將其安裝在特定Pod的文件系統中。
Helm and Draft
用戶如果直接與Kubernetes交互,可以使用kubectl命令行進行手動配置,或將各種類型的YAML數據傳遞給Kubernetes API Server。這個操作過程可能很復雜,并且容易出現人為錯誤。根據DevOps的“將代碼配置為代碼”原則,Jenkins X利用Helm和Draft兩個開源軟件來為用戶的應用程序創建原子配置單元。
Helm通過Chart的方式簡化了Kubernetes的配置。Chart是一組文件,這些文件共同指定了將給定應用程序或服務部署到Kubernetes中所需的元數據。Helm并沒有使用基于Kubernetes API的一系列樣板YAML文件,而是使用模板語言從單個共享值集來創建所需的YAML規范文件。這使得在可重用的Kubernetes應用程序進行部署時,可以選擇性地重新定義配置。
參考:JenkinsX官網
- 發表于: 2019-10-14
- 原文鏈接:https://kuaibao.qq.com/s/20191014A0RHBX00?refer=cp_1026
總結
以上是生活随笔為你收集整理的Jenkins X基本概念:Jenkins K8S helm Draft gitops的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git-svn 在ubuntu deep
- 下一篇: Jenkins X:基于Kubernet