Categories
程式開發

開源項目WKSctl:使用GitOps管理Kubernetes集群


WKSctl一個開源項目,用於通過SSH安裝、引導和管理Kubernetes集群,包括其插件。 WKSctl是 Cluster API (CAPI) 按照GitOps方式所提供的一個項目。 Kubernetes集群是由YAML文件配置的,WKSctl在Git的每次推送後都會應用更新,從而允許用戶按需擁有可複制的集群。

CAPI是一個Kubernetes項目,能夠讓用戶以聲明的方式創建、配置和管理集群,就像使用Deployment或Service等其他Kubernetes資源那樣。目前,AWSVMware vSphere等基礎設施供應商提供了其他的CAPI實現。 WKSctl有一個有趣的特點,它只需一個SSH端點列表以及引導Kubernetes的目標虛擬機的關聯憑據即可。

最近,InfoQ採訪了Weaveworks的Alexis Richardon(CEO)Mark Ramm(產品總監)Cornelia Davis(CTO)Mark Emeis(工程師經理)以了解更多關於WKSctl的信息。

InfoQ:什麼是WKSctl?您為什麼要構建另外一個Kubernetes工具?

Alexis Richardson:目前,有像kopsKubeadm這樣自行安裝(roll your own,簡稱RYO)的安裝程序,也有像rancherkindminikube這樣打包好的安裝程序。 WKSctl讓我們擁有RYO的強大功能,同時兼有打包好的安裝程序的功能,適用於開發者、數據中心和雲端。

WKSctl是CAPI的一個開源實現,而不是Kubernetes的一個發行版。它是一個GitOps安裝程序和控制器,適用於上游Kubernetes集群。 WKSctl訂閱一個存儲庫(使用Flux),其包含Kubernetes和其他我們希望安裝的部件。然後,WKSctl構建並引導該集群。我們要做就是給WKSctl提供一個SSH端點列表,剩下的事就由WKSctl完成。一旦該集群啟動並運行,如果我們在Git中更改了該集群的配置,那麼WKSctl會把這些更改應用到該集群上。

它的總體的好處是可以靈活地使用Kubernetes的多個不同的發行版本。我們可以有可複制的集群,想複製多少次就可以復制多少次。集群自身是牛而不是寵物。我們認為,理想情況下,集群應該是百分之百可丟棄的,當集群處於不正確的狀態時,我們應該得到通知。

InfoQ:WKSctl的典型使用場景是什麼?

Richardson:WKSctl的目的不是進行機器配置。因此,WKSctl的理想用戶是使用Terraform、vSphere、Salt、Ansible或Chef來自己配置機器的人。因此,用戶可以使用WKSctl在這些機器上安裝和引導Kubernetes。但是,如果我們不想配置機器,那麼,也可以用Firekube,它比WKSctl更進一步。 Firekube使用一個vanilla Kubernetes,並用WKSctl把它安裝在Ignite(Firecracker虛擬機)集群上。

另一個使用場景是多雲或混合雲,這方面有更先進的模式,我們稱之為“master-of-masters,簡稱MoM”模式。在這個模式中,我們將擁有一個MoM集群,它會在每個目標環境中供應Kubernetes主管理集群,後續我們就可以供應任意數量的Kubernetes集群了。

開源項目WKSctl:使用GitOps管理Kubernetes集群 1

圖源:GitOps和集群API:Master-of-Masters

InfoQ:WKSctl是如何運行的?它是CLI還是一個Kubernetes控制器,還是兩者兼有?

Mark Emeis:兩者兼有。 WKSctl用CLI引導Kubernetes集群中的第一個節點,然後安裝WKSctl控制器以管理其他master和worker節點的安裝。 WKSctl CLI基於Git存儲庫創建一個集群,安裝Flux以​​訂閱該Git存儲庫,這就是我們所謂的“Git到Kubernetes的調解循環”。最終,WKSctl安裝一個自定義資源控制器,以便根據從Git收到的配置來應用集群級的更改。

開源項目WKSctl:使用GitOps管理Kubernetes集群 2

Cornelia Davis:有兩個調解循環。 Flux是一個調解器,監控Git存儲對集群配置的所有更改。本質上,它的工作是把這些來自Git的東西提交給etcd。第二個調解器是WKSctl控制器,它就像Kubernetes中的replication控制器那樣監控etcd。

InfoQ:如何給Kubernetes集群打補丁和升級?是否有停機時間?

Mark Ramm:WKSctl對CAPI manifest的更改做出反應。當運維人員改變Kubernetes的版本時,控制器更新master節點,然後是worker節點。當集群被有效更新時,需要構建應用程序以重新處理調度。對於應用來說,遵循12因素應用程序模式是個良好的開端。

InfoQ:我們能否自定義集群架構以解耦組件,比如有專門用於etcd的虛擬機而API組件位於另外的服務器中?

Ramm:默認情況下,WKSctl啟動時,會有worker節點和3個master節點。我們希望保持簡單。如果要做更複雜的事情,我們會推薦使用我們的商業產品WKP。總體上,我們看到WKSctl發生的情況是,用戶在按需創建開發和測試集群,這些集群是短暫的(規模不大)。很多集群來來去去,而不是只有一個大集群。我們發現,一般情況下,出於權限和安全的原因,企業用戶傾向於使用更多的集群而不是一個大型集群。另外,當我們水平擴展集群時,系統的擴展很容易,這跟創建大型集群剛好相反。

InfoQ:在社區中,WKSctl的採用情況怎樣?

Ramm:德國電信是剛開始使用WKSctl的客戶。最近,他們分享了一個小視頻,演示了WKSctl在他們的環境中的工作情況。

原文鏈接:

WKSctl: a Tool for Kubernetes Cluster Management Using GitOps