2017-09-04 93 views
2

我的公司已決定過渡到基於微服務的架構。Kubernetes CI/CD管道

在過去的幾個月中,我們一直在研究這件事的架構究竟是什麼樣子。

到目前爲止,我們已經談妥上:

  • DOTNET爲核心業務的發展(儘管是與語言無關的是有點的最終目標)

  • 卡夫卡的消息代理

  • Docker

  • Kubernetes

  • Ansible

我們有概念的工作,這似乎已經打勾所有正確的箱子與管理團隊,是一個絕對的喜悅與合作的一個非常基本的證明。

我的下一個任務是調查開發工作流如何實際工作的選項。他們已經習慣以CI/CD方式工作,其中一些新產品使用Jenkins/Octopus Deploy。

我的問題是:在部署到Kubernetes集羣時,您是否有任何建議設置CI/CD管道的建議?

必備品的名單:

  • 多個環境即集成,測試,用戶驗收測試,運行,生產。

  • 一種方法,不同的業務部門可以獨特地處理到不同環境的部署(開發只能推動集成,測試人員進入測試等)。這可能是他們最大的問題 - 他們習慣於使用八達通,他們喜歡它處理這種問題的方式。

  • 通過點擊按鈕(或儘可能少的步驟)來回滾/部署的能力。

我們將最初部署到我們自己的服務器。

我已經花了幾天的時間尋找選擇,其中有很多。

到目前爲止,詹金斯管道似乎可能是一個很好的開始。 Spinnakar也似乎是一個堅實的選擇。我確實讀過Fabric8,雖然它提供了我所要求的很多東西,但它看起來有點像過度殺傷。

+1

看看[helm](https://helm.sh/)。這是一個K8S包管理器。然後,您的Jenkins部署管道將部署一個服務包,其中包含您的所有服務/部署/狀態集等資源到您的k8s羣集中。 Helm也支持回滾。 – fishi

+0

我會檢查出來 - 謝謝。 –

+0

請看看我爲[類似的問題(https://stackoverflow.com/questions/36408339/best-cd-strategy-for-kubernetes-deployments/48268573#48268573),很想響應聽聽你的認爲! – errordeveloper

回答

2

如果你想使用詹金斯,管道確實是要走的路。我們的設置幾乎可以滿足你的需求,所以讓我解釋一下我們如何設置它。

我們使用安裝了dockerkubectl的Jenkins代理。該代理首先構建docker容器並將其推送到我們的docker註冊中心。然後它會在各個階段呼叫kubectl部署到我們的測試,驗收和生產集羣。

不同業務部門:在管道中,您可以使用an input step來詢問管道是否應該繼續執行。您可以指定誰可以按下按鈕,因此這是您可以如何解決對不同羣集的部署問題。 (理想情況下,當你到CD,人們會認識到按幾次按鈕每天是愚蠢的,他們就會自動完成整個部署。)

回滾:我們依靠Kubernetes的回滾系統這個。

憑證:我們將使用Ansible的不同Kubernetes憑證直接提供給此Jenkins代理。

爲了減少重複代碼,我們引入了一個共享Jenkins Pipeline library,所以以標準化的方式每(微)服務會談到所有Kubernetes簇。

請注意,我們使用純詹金斯,碼頭工人和Kubernetes。有很多軟件可以進一步緩解這一過程,所以讓我們留待其他答案。

+0

謝謝你的建議。這似乎是基於我閱讀/觀看過的其他材料解決此問題的一種常見方式,所以我認爲我會先試用這條路線。讓詹金斯做一堆kubectl apply/set image似乎可以通過helm來解決 - 這是@fishi提到的,​​Jenkins Pipeline有一個插件可以讓你呼叫掌舵。 –

+0

你怎麼知道應該部署什麼和實際部署什麼?我們發現CI將配置直接推送到集羣的方法可能相當脆弱,並且很難在新環境中重新創建所有部署。看看我們的博客 - [The GitOps Pipeline](https://www.weave.works/blog/the-gitops-pipeline),讓我知道你的想法,我非常希望聽到你的反饋。 – errordeveloper