Cloud Native 的定義在於怎麼讓 application 使用 cloud computing 的好處做開發、維運或 CICD,好處有高容錯率、好管理和容易觀察等等。而這次介紹的專案 jenkinsci/kubernetes-plugin
,這是在 Jenkins 上安裝的 plugin,再配合 Kubernetes 的環境,就可以達到上述這些 Cloud Native 的優點。
jenkinsci/kubernetes-plugin
最大的特色在於會跑一個 dynamic agent 在 Kubernetes 裡面,這個 agent 本質上是一個 pod,預設的情況下每一次跑完 CICD 就會刪得非常乾淨,另外再配合 cache 的機制,就可以輕鬆達到既有可靠性和快速的 CICD workflow。不論開發語言也好,平常用的工具也好,官方都有提供 container images,在 Jenkins 裡面就不用預先安裝或移除任何工具,只要指定你想要什麼工具即可,讓 Jenkins 本身也乾乾淨淨。
而這個新穎的 CICD workflow 搭配到 Kubernetes 的好處有 PV、resources limit、namespace 或 taints & tolerations 等等,這樣就可以依照團隊的想法打造從基礎到進階的 CICD workflow。總而言之,想要用更潮的方式玩 CICD,用這個 plugin 準沒錯!
先從 Cloud Native 的概念簡單講述起,為何有這樣的發展?究竟是要解決什麼問題?那又是如何影響到 CICD workflow?除了優點之外,還有什麼缺點嗎?面對這樣的趨勢我們該怎麼結合團隊的需求呢?
之前使用 Jenkins 的方式很單純,基本上就是一台機器,沒有特別使用 slave 的機制。自從搬家到 AWS EKS 後,使用 Jenkins 的方式算是有明顯的突破。從大家熟悉的 Kubernetes 原生的機制說起,PV、PVC 和 StorageClass,減少了管理 storage 的負擔。我們還有使用 jenkinsci/configuration-as-code-plugin
讓 configuration 能夠透過 source control 管理,將 GitOps 的概念結合在裡面。
而 jenkinsci/kubernetes-plugin
因為 dynamic agent 本質上是 pod,也因為它的性質跟 applications 不同,他的 orchestration 就需要一些規範。先用 taints & tolerations 做 worker nodes 的隔離、用 resource limits 限制 compute resources 、serviceAccount 或者甚至繼承你自己定義的 yaml 設定都可以!想怎麼定義就怎麼定義,而且最令人驚豔的是,這些都可以在 Jenkinsfile 裡面寫出來,你所有對 Jenkins agent pod 的設定都可以透過 GitOps 的方式實現。
About Rico
Hello 我是 Rico,來自 DevOps Taiwan 社群的小志工,喜歡參與社群到日常都會穿社群衣服的宅宅。