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