【編者的話】「人間四月芳菲盡,山寺桃花始怒放。」 愈來愈多專門給 Kubernetes 作應用發佈的工具開始繽紛呈現,幫助你們管理和發佈不斷增多的 Kubernetes 應用。在作技術選型的時候,咱們須要給業務選擇一個最好的工具、最穩的底座。那咱們又該如何比較和衡量這些工具的呢?在這篇文章中阿里一線工程師給你們分享本身獨特的體驗。洗盡鉛華,一塊兒品味這「山寺桃花」。前端
近年來,伴隨着雲原生社區(CNCF Community)的迅猛發展,愈來愈多的應用跑在了 Kubernetes 上。慢慢地,你們的關注點也逐漸從資源層轉移到應用層。一方面,咱們看到在有愈來愈多新的 Kubernetes Operators 出現,用來自動化應用的部署和運維。另外一方面,隨着各路大型雲廠商入場,Kubernetes 服務之後就會像家裏的水和電同樣爲所欲爲可用,本身再去動手搭建已經沒有了意義。因而人們提出了「Kubernetes 將會消失」,這其實指的是以 Kubernetes 爲底座來面向全世界任何一個雲以及數據中心交付應用,會是接下來的必然趨勢。關於這個趨勢,咱們團隊的同窗專門寫過一篇關於《雲原生時代, Kubernetes 多集羣架構初探》的文章,歡迎你們進一步閱讀。
git
基於 Kubernetes 作應用發佈的工具,咱們有着許多選擇,其中不乏業界知名項目 Jenkins X、Spinnaker,也有創業公司出來的小工具好比 Argo Rollout。不過在這其中,咱們團隊如今主要使用的是 Tekton。這裏也有個重要的背景,那就是咱們團隊要面向多雲/多集羣交付的,是複雜有狀態的阿里巴巴中間件應用。這因素我立刻會詳細介紹到。github
可能還有部分同窗還不瞭解 Tekton 項目是什麼?這裏我先簡單介紹下。Tekton 是一款 Kubernetes 原生的應用發佈框架,主要用來構建 CI/CD 系統。它本來是 Knative 項目裏面一個叫作 build-pipeline 的子項目,用來做爲 knative-build 的下一代引擎。然而,隨着 Kubernetes 社區裏各類各樣的需求涌入,這個子項目慢慢成長爲一個通用的框架,可以提供靈活強大的能力去作基於 Kubernetes 的構建發佈。web
可能很多同窗會感到疑惑,有這麼多功能豐富、聲名遠揚的項目,爲何咱們選擇了灰姑娘般的 Tekton?客官別急,容咱們先來梳理一下這個平臺底座的要求:架構
接下來咱們在幾個候選項目之間作比較:框架
能夠看到,Tekton 在靈活實現定製化功能、Kubernetes 原生性、以及社區裏的受歡迎程度等方面能夠說仍是優點明顯的。這也是爲何,咱們團隊在負責阿里中間件複雜有狀態應用的交付工做時,選擇了在 Tekton 之上構建應用交付體系。
less
接下來咱們將分享使用 Tekton 自動化應用發佈的實踐案例。運維
一個基於 Tekton 的應用發佈平臺的架構以下:
這裏的流程大體是:ide
Tekton CD 裏的操做具體分爲如下幾種狀況:工具
接下來,咱們看一個建立應用的簡單例子:
這個例子裏面咱們生成了一個 Tekton Pipeline。運行這個 Pipeline 就能夠將應用發佈到 Kubernetes 集羣上。
用戶操做的邊界就是 Git,以後全部流程都是自動化的。那麼整個過程當中用戶怎麼獲得反饋信息呢?這裏主要有:
上面給你們介紹了 Tekton 項目的基本原理、以及使用 Tekton 作底座進行應用發佈的主要流程。在這裏總結一些經驗體會:
另外,Tekton 2019 發展規劃中還包括了 conditional execution,cancelling or pausing a workflow,resuming a paused or failed workflow,enforcing timeouts on Tasks and Pipelines 等功能。站在巨人的肩膀上,將來的應用發佈平臺將會更增強大。
Q:請比較一下 Drone 和 Tekton,thx!
A:Drone 是一個 CI/CD 工具,Tekton 是用來作 CI/CD 的框架。Tekton 在更底層,也更爲靈活。
Q:Tekton 做爲一個執行引擎,可能會有不少執行節點串聯運行,不一樣節點中運行狀態和日誌是如何反饋的?
A:Tekton Pipeline 自己就是 Kubernetes API object,咱們經過彙總 Status 來透出運行狀態。因爲 Tekton Pipeline 啓動的都是 Kubernetes Pod,咱們能夠複用原有的基礎設施去收集,而後作一遍彙總。
Q:Tekton 如何與 GitOps 結合?
A:咱們作了一個相似於 flux(https://github.com/fluxcd/flux)的 Operator,經過監聽 webhook 事件等來觸發操做。
Q:Tekton 集成方面有哪些特性?
A:靈活以及很是雲原生。比傳統工具更好在 Kubernetes 跟其餘組件作集成。比方說,跟 Flagger 等在 Kubernetes 提供金絲雀發佈策略的組件結合,作雲原生應用發佈。
Q: Tekton 既然做爲 Knative 項目裏面一個叫作 build-pipeline 的子項目,那請問下 Tekton 和 Knative 有什麼不一樣或者對比優缺點嗎,我最近有準備作 Knative,今天有幸看到這個分享,正好請教一下?
A:Knative 是 Serverless Framework,跟 Tekton 解決的不是一個層面的事情,沒有比較性。相反,他們能夠 inter-operate,Knative 裏就使用了 Tekton。
Q:個人見解是 CD 和 CI 都只是 Tekton 的 Task,可否講下大家的 CI?
A:你好,咱們作的是 CD。不僅是 Tekton Task,也用了其餘的 Tekton 原生功能,好比 Pipeline、PipelineResource 等。咱們作的是面向多雲/多集羣交付的、面向複雜有狀態的阿里巴巴中間件應用的發佈平臺。
Q:大家作的這個和 Jenkins X Pipeline Operator and Tekton 的區別和二者的優缺點?
A:Jenkins X 是 CloudBees 團隊基於原來 Jenkins 的需求,再使用 Tekton、Prow 等搭建的 CI/CD 平臺。這也側面說明了 Tekton 等雲原生工具的優點。但 Jenkins X 作的比較重。並且以 CI 端爲主,不支持複雜的發佈策略。
Q:請問有什麼好的 GitOps trigger?咱們使用的的是 Phabricator, 一直沒有找到適合的trigger。
A:這個主要看工具自己(好比 Phabricator)提供什麼樣的 Git trigger,而後才能集成到如 flux 這樣的 GitOps 工具中。
Q:請比較一下 Prow 和 Tekton,發現 Kubernetes,Prometheus 以及 Tenkton 自己都是使用了 Prow。
A:Prow 是一款基於 GitHub 作的 Chatbot 工具。Tekton 則是用來實現後面對接的 CI/CD 的底層框架。本人剛好也是早期參與 Prow 項目,因此多說一點這個工具的歷史。一開始 GitHub 功能不夠強大,這個工具只是爲了彌補 GitHub 的不足之處,主要是要通過 review 不能讓人手動合併代碼。後來功能作着作着變多了,有些被 GitHub 重複了。可是功能集合仍是比 GitHub 多,並且 CNCF 裏的 infra 默認使用。
【首屆雲原生應用大賽火熱報名中】報名連接:http://t.tb.cn/7aDijN
9月2日前,使用任意語言開發一個能夠被容器化、運行在 K8s 上的應用,並把該應用作成 Helm Charts 格式提交便可參賽!蘋果 Airpods,Cherry鍵盤、天貓精靈等豐厚禮品等你拿!