k8s與CICD--利用helm部署應用到kubernetes

前言

本小節應該是這個系列剩下的兩個小節之一了。剩下一個是以前承諾好的drone-wechart插件。本節主要介紹利用helm部署應用到kubernetes中。
至於helm,詳細能夠參考FreeWheel Lead Engineer 張夏寫的一系列文章。總之,k8s中yaml文件的編寫複雜程度直接決定了k8s的使用門檻。利用Kubernetes部署一個應用,須要Kubernetes原生資源文件如deployment、replicationcontroller、service或pod 等。而對於一個複雜的應用,會有不少相似上面的資源描述文件,若是有更新或回滾應用的需求,可能要修改和維護所涉及的大量資源文件,且因爲缺乏對發佈過的應用版本管理和控制,使Kubernetes上的應用維護和更新等面臨諸多的挑戰,helm主要是能解決這些問題。html

helm架構圖

而drone中提供了三個kube-helm插件,用來配合drone,實現k8s的cicd。這三個插件大同小異,我集中總結一下:git

  1. drone-kube
  2. drone-kubernetes
  3. helm

不過全部的插件都是隻能用來更新應用,不能新建。github

整體思路

harbor+helm+drone

  1. 編寫本身的.drone.yaml,放置到項目根目錄下。主要就是引用各類pipeline插件,例如默認添加的git拉取代碼的插件,項目編譯環境的插件,此處針對不一樣語言,能夠定製不一樣的鏡像,例如咱們以前的項目會把common這種基礎庫也作到docker鏡像裏,能夠提升構建速度。以及telegram,line,mail等通知插件。
  2. 提交代碼到github或是gogs等版本控制工具裏,觸發webhook鉤子,通知drone執行整個設計的構建流程。該項目中,須要另外兩個插件,一個是docker鏡像,用於將編譯好的程序作成鏡像,並推到本身的docker registry中。因此須要在根目錄下,編寫本身的DockerFile文件。另一個是上面提到的helm插件。
  3. docker hub因爲牆的緣由,這邊通常是使用harbor,vmware中國團隊基於docker registry作出來的私有鏡像倉庫。
  4. helm能夠選用k8s官方的公共倉庫,通常都會搭建一個本身私倉,結合起來使用。
  5. 新的鏡像推到harbor以後,helm插件就能夠執行部署步驟了。
  6. 最後通常都會引用通知插件,將構建結果通知部署人員。

總結

路漫漫其修遠兮,其實整個helm插件只是能夠知足通常的需求,整個部署過程常常會有必定的部署策略,藍綠,金絲雀等。這一塊須要不一樣的paas平臺,從新實現。另外以前提到的,helm插件只能用來更新,不能新建。因此這一塊須要探索的路還很長。
說到部署策略,不得不說Spinnaker,實現的功能不少,可是足夠的複雜,目前來看,國內只有小紅書用起來了。實現的語言是groovy,也不夠友好(固然主要是我不會).web

相關文章
相關標籤/搜索