DevOps的10個Kubernetes的Operators
Kubernetes Operators是為特定應用程序而構建的,目的是為了簡化在Kubernetes上創建,配置,管理和操作這些應用程序。在本文中,我們將深入研究了Kubernetes Operators的機制,并概述了每個DevOps都需要了解的10個Operators。
Kubernetes和容器技術的出現使應用程序更具可移植性,可擴展性,同時也提高了資源利用率。對于DevOps而言,Kubernetes具有更廣泛的吸引力:能夠大規模配置,管理和操作容器化微服務。
同時Kubernetes也允許他們在應用程序的創建,部署,擴展和配置中實現一定程度的自動化,從而大大降低了程序管理的開銷以及錯誤。
但是,有一點需要注意:對于有狀態應用程序,它可能并沒有我們所希望的那么完美。部署,擴容,操作和配置有狀態的應用程序以及在自動化中進行構建需要DevOps大量的交互。
什么是Kubernetes Operators?
Kubernetes Operators是在Kubernetes集群上構建和驅動每個應用程序的高級原生方法。通過與Kubernetes API的密切合作,它提供了一種一致的方法來自動處理所有應用程序操作流程,而無需任何人工響應。
換句話說,Operator是打包,運行和管理Kubernetes應用程序的一種方式。
Kubernetes Operators使在Kubernetes上創建,配置和管理這些應用程序更加容易。
很多Operators還擴展了整個應用程序生命周期,從而使執行操作任務(例如擴展,升級,備份和恢復復雜的有狀態應用程序)更加容易。
由于它們使用和擴展了Kubernetes API,因此它們緊密集成在Kubernetes框架中。
以下是Kubernetes Operators的一些最常見功能的列表:
- 使用配置項和副本數安裝應用程序。
- 彈性伸縮應用程序
- 啟動升級,自動備份和故障恢復
- 以代碼的方式執行管理任務
Kubernetes Operators如何工作?
Operators利用Kubernetes的可擴展性和模塊化來自動化創建,配置和管理Kubernetes應用程序。
Operators基于自定義Kubernetes控制器(CRD)和自定義資源的概念,并被DevOps用于在Kubernetes上管理應用程序。它們對CRD起作用,以確保群集的實際狀態與CRD中定義的狀態匹配。
來自CoreOs的prometheus Operator就是一個很好的例子。它被部署為自定義Kubernetes控制器,該控制器監視Kubernetes API的四個自定義資源定義:Prometheus,ServiceMonitor,PrometheusRule和AlertManager。
部署后,Prometheus Operator將安裝并配置完整的Prometheus Stack,其中包括Prometheus服務器,Alertmanager,Grafana,主機node_exporter和kube-state-metrics。然后,DevOps可以輕松擴展每個組件的單個副本的數量,進行配置更改,更新警報規則或自動監視新服務。
現在我們已經介紹了Kubernetes Operators的概念,讓我們介紹DevOps最常用的一些Operators。
您應該了解哪些Kubernetes Operators
RBAC Manager Operator
RBAC Manager(https://github.com/FairwindsOps/rbac-manager)是一個來自費爾溫茨的kubernetns Operator,它旨在使RBAC上Kubernetes易于安裝,配置和管理。
Kubernetes授權通常是復雜,重復,需要大量的手動配置并且很難擴展。RBAC Manager大大減少了管理RBAC以及創建,刪除或更新角色綁定,群集角色綁定和服務帳戶所涉及的配置。
通過匯總單個RBAC定義文件中的多個命名空間之間的角色綁定,它可以作為了解RBAC狀態的唯一事實來源。
MongoDB Enterprise Kubernetes Operator
MongoDB Operator(https://docs.mongodb.com/manual/reference/Operator/)幫助DevOps標準化創建大規模的MongoDB集群的過程。該Operator可以接管拆分和管理MongoDB集群所涉及的典型管理任務,包括配置存儲和計算,配置網絡連接和設置用戶。
Kubernetes Operator還集成了其他MongoDB管理工具,例如MongoDB Ops Manager和MongoDB Cloud Manager,以提供備份,監視和性能優化。
HPA Kubernetes Operator
Banzai的HPA Operator(https://github.com/banzaicloud/hpa-Operator)是另一種有用的Operator,它將Pod自動縮放功能添加到Helm charts中。
它監視Kubernetes deployment或StatefulSet,并根據配置中定義的注釋自動創建,刪除或更新“Horizontal Pod Autoscalers ”(HPA)。HPA的Github頁面以Kafka為例。
Kafka的Helm charts并沒有為集群定義任何的HPA規則,這意味著使用該helm chart 部署Kafka并不會在Kafka中實現HPA。
為了確保將HPA作為為Helm chart的一部分,DevOps可以為min和maxReplicas添加注釋。添加后,HPA Operator將根據注釋增加所需數量的HPA副本。HPA Operator還采用了Kube Metrics Adapter公開的基于Prometheus的自定義指標。
Cert-manager Kubernetes Operator
Cert-manager Operator(https://github.com/jetstack/cert-manager)是來自與Jetstack的Kubernetes Operator。它旨在自動化TLS證書的管理和頒發。
DevOps可以使用此Operator來自動執行重復性任務,例如確保證書有效,最新以及正確更新。部署后,Cert-manager將作為Kubernetes deployment運行。
DevOps可以將證書和證書頒發者列表配置為Kubernetes CRD。一旦配置了證書,應用程序就可以使用信任的證書進行即時請求。
ArgoCD Operator
ArgoCD Operator(https://github.com/jmckind/argocd-Operator)管理ArgoCD的整個生命周期以及其相關組件。ArgoCD是CNCF領域中評價最高的專門針對Kubernetes持續交付工具之一。
該Operator可以輕松配置和安裝ArgoCD,也可以輕松升級,備份,還原和擴展ArgoCD組件。該Operator通過監測三個Kubernetes CRD來做到這一點,其中包括ArgoCD(定義ArgoCD集群的所需狀態)和ArgoCDExport(定義用于ArgoCD組件導出和恢復的所需狀態)。
Istio Operator
Istio(https://istio.io/)是服務網格工具,可以管理,協調,保護和監視Kubernetes上部署的微服務之間的通信。Istio Operator(https://istio.io/blog/2019/introducing-istio-Operator/)可以更容易地安裝,升級以及對Istio的故障排除。
安裝僅需要istioctl作為前提條件,因為它們不需要更改API,并且可以輕松實現特定于版本的升級hooks。使用該Operator安裝Istio還可以確保所有API字段都經過驗證。
該OperatorAPI支持所有6種內置安裝配置文件,包括默認,演示,最小和遠程。DevOps和SRE可以從其中任何一種開始,然后進一步進行配置更改,以根據其特定需求定制服務網格。
Etcd Operator
Etcd充當Kubernetes上所有集群數據的存儲數據庫,因此是每個集群的最關鍵組件的組件之一。在Kubernetes上管理和配置etcd集群是一項相對耗時的工作,需要一些手工配置的工作,從而為保證etcd 集群的高可用,可監控和災難恢復增加了復雜度。
ETCD Operator(https://coreos.com/Operators/etcd/docs/latest/)幫助DevOps和SRE更容易創建,配置和管理Kubernetes集群中etcd實例。
團隊可以輕松啟動多個高度可用的etcd實例,而無需指定詳細的配置設置,修改群集規格以調整群集的大小,配置用于災難恢復的自動備份策略以及啟動正常升級而無需停機。
Elastic Cloud on Kubernetes (Elastic Kubernetes Operator)
Kubernetes上的Elastic cloud(ECK)(https://github.com/elastic/cloud-on-k8s)是elastic.co的Kubernetes官方Operator,旨在為在Kubernetes上部署,管理和操作整個Elastic Stack提供無縫的體驗。除了更輕松地在Kubernetes上部署elastic search和Kibana之外,它還簡化了關鍵操作任務,包括管理和監視多個集群,啟動正常升級,擴展集群容量和本地存儲,進行配置更改以及備份。
默認的ECK分發是免費和開源的,有內置功能,包括用于密集存儲,Kibana空間,Canvas和Elastic Maps的frozen indices,還支持監控Kubernetes日志和基礎架構。
Grafana Operator
RedHat提供的Grafana Operator(https://github.com/integr8ly/grafana-Operator)簡化了在Kubernetes上創建,配置和管理Grafana實例的過程。
除了幫助部署Grafana之外,它還支持通過ingress,自動化的dashboard和數據源發現以及儀表板依賴項的安裝使Grafana變的高度可用。可以使用Ansible或通過kubectl命令手動安裝Operator并創建自定義資源。
安裝后,Operator將根據部署期間傳遞的標志在其自身的名稱空間或所有名稱空間中監視儀表板定義,發現儀表板,在出現任何無效json的情況下將錯誤消息添加到儀表板的狀態字段中,并自動安裝指定的插件。
然后,DevOps和SRE可以在GrafanaDataSource中添加數據源以及其他配置文件。
Jaeger Kubernetes Operator
Jaeger Kubernetes Operator(https://github.com/jaegertracing/jaeger-Operator)幫助部署,管理和配置Jaeger實例。安裝DevOps和SRE時,可以為jaeger指定配置選項,包括存儲選項,派生依賴項,注入Jaeger代理sidecar和UI配置等。
安裝完成后,可使用Operator來創建Jaeger實例并將其與部署策略相關聯。DevOps和SRE可以選擇以下支持的三種部署策略:allInOne,production和streaming。使用production策略時,Operator將啟動一個更具可擴展性和高可用性的環境,并分別部署每個后端組件。
allInOne策略旨在用于測試和開發目的,而streaming策略則增強了production策略,并在收集器和后端存儲之間提供了流。