《 Kubebuilder v2 使用指南 》-P1-總覽篇

《 Kubebuilder v2 使用指南 》

Gitbook

《 Kubebuilder v2 使用指南 》專欄已整理打包爲gitbook電子書,閱讀更緊湊和連貫,推薦點擊直達:
Gitbook-《 Kubebuilder v2 使用指南 》

前言

K8s內置的build-in 資源類型,可以組合使用以滿足絕大部分場景的部署需求,更進一步地,對於追求更高自由度、有特殊需求的場景下,在kubernetes v1.7 後的版本開始支持CRD(CustomResourceDefinition),無需修改組件代碼,即可通過CRD向APIServer注入自定義資源的方式,對內置資源進行上層封裝,實現自定義環境部署和運行邏輯。APIServer會根據CRD的指定,自動生成CRD的restful路徑,有關此路徑的restful請求,轉發給對應的CRD controller,以外部插件的形式實現了對k8s內置資源以及內置控制邏輯的擴展,很大程度地增加了管理和使用kubernetes的靈活性。

而作爲kubernetes的進階玩法,上手CRD需要一定的k8s使用經驗和go開發基礎。此前通過閱讀controller部分的源碼:Kubernetes Controller源碼閱讀 ,可清晰地認識到管理每種資源的設計核心是控制器。控制器通過informer機制,與apiserver交互,按照預先設計的邏輯,對watch資源進行不斷地修正、收斂,使資源的狀態 不斷接近、最終達成指定的目標狀態。顯而易見的是,CRD的設計核心,同樣也是控制器。

Why kubebuilder

如果參照內置controller的實現,用client-go來從頭到尾自己擼一個CRD controller,比較繁瑣。好在CRD功能從alpha到現在已經有一年有餘了,市面上已有多款CRD腳手架工具。比較常用的有Kubernetes OperatorKubebuilder,兩者大概對比了一下,其中Kubernetes Operator由CoreOS出品,包管理用的是go dep;而Kubebuilder由k8s-sig官方團隊打造,包管理使用的是go mod。go mod比較友好的是不依賴GOPATH,大概率會成爲今後的主流,且還是官方的團隊出品。因此,選擇了Kubebuilder

Kubebuilder 使用步驟

kubebuilder構建CRD一般分爲如下幾步:

  • 1.項目初始化
  • 2.設計CRD的結構,具體來說即CRD資源的Spec和Status結構設計
  • 3.設計和實現CRD Controller(Reconciler)的運行邏輯
  • 4.本地調試和測試
  • 5.正式發佈到k8s中運行

專欄內的各篇文章,大致按照這幾個步驟來進行編排。

專欄導航

Kubebuilder的官方文檔友好度尚可,直接以CRD CronJob對build-in Job資源的管理舉例,但個人感覺精細度略顯不足,且目前全網kubebuilder v2版本的第三方文檔都很缺乏,所以在使用過程中踩了不少坑。因此開一個專欄,從零開始,將我的CRD實例的設計的思路、代碼實現、使用過程中遇到的問題 整理出來放在專欄中,希望給後面看到的朋友提供一些幫助,對於如何設計和實現自己所需要的CRD以及利用kubebuilder有更爲清晰的認識。

專欄有以下幾篇文章:

Github

專欄中基於kubebuilder構建的CRD實例完整的代碼已經放入github中,僅供參考:

https://github.com/yinwenqin/CRD-Unit

Reference

https://book.kubebuilder.io/

https://book-v1.book.kubebuilder.io/basics/simple_controller.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章