目錄
- Kubernetes Operator是什么
- 分析之前部署過的Prometheus Operator
- 關于開發自定義的Operator
Kubernetes Operator是什么
K8S Operator這個東西不好解釋,這么說吧,比如有一個應用程序,并且想要將其部署到 k8s 上,并且希望能夠實現自動化運維和可擴展性,那么就可以考慮使用 K8S Operator 的框架,將應用程序的管理邏輯抽象為 k8s 資源,并編寫自定義 Operator 來管理和運維該應用程序。
還是有點懵?我舉個例子:有一個基于 Kafka 的消息隊列應用程序,想將其部署到 k8s 并實現自動化運維和可擴展性,就可以使用 Kubernetes Operator 的框架來管理和運維該應用程序了。
如果還是有疑問,更多詳情可參考官方文檔:kubernetes.io/zh-cn/docs/…
分析之前部署過的Prometheus Operator
官方文檔:prometheus-operator.dev/
- 查看Api Resources,發現prometheus被定義為了 Kubernetes API 中的一個自定義資源:
[root@k8s-a-master prometheus-operator]# kubectl api-resources | grep prometheus prometheusagents promagent monitoring.coreos.com/v1alpha1 true PrometheusAgent prometheuses prom monitoring.coreos.com/v1 true Prometheus prometheusrules promrule monitoring.coreos.com/v1 true PrometheusRule [root@k8s-a-master prometheus-operator]#
- 查看用于定義 Prometheus 實例的自定義資源類型:
[root@k8s-a-master prometheus-operator]# kubectl get prometheus NAME VERSION DESIRED READY RECONCILED AVAILABLE AGE prometheus 3 3 True True 54s
下面的yaml文件是我之前用來創建prometheus實例的,通過它可以自動創建、更新和刪除 Prometheus 實例:
apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus spec: serviceAccountName: prometheus replicas: 3 alerting: alertmanagers: - namespace: default name: alertmanager-example port: web serviceMonitorSelector: matchLabels: team: frontend podMonitorSelector: matchLabels: team: frontend resources: requests: memory: 400Mi enableAdminAPI: false ruleSelector: matchLabels: role: alert-rules prometheus: example ruleNamespaceSelector: {}
上面yaml中 “kind: Prometheus” 是 Prometheus Operator 用于創建 Prometheus 實例的 Kubernetes 自定義資源類型之一。
- 接下來看看帶3個副本的prometheus pod:
[root@k8s-a-master prometheus-operator]# kubectl get pod NAME READY STATUS RESTARTS AGE prometheus-prometheus-0 2/2 Running 0 22s prometheus-prometheus-1 2/2 Running 0 22s prometheus-prometheus-2 2/2 Running 0 22s
- 小總結
通過簡單分析已經很清楚了,Prometheus Operator 是一個 Kubernetes 控制器,它負責監視 Kubernetes API 中的 Prometheus 資源(包括 kind: Prometheus)的變化,并根據資源定義來管理 Prometheus 實例。Prometheus Operator 可以根據 Prometheus 自定義資源中定義的規則來創建、更新和刪除 Prometheus 實例,并且支持自動發現和配置 Prometheus 監控對象,如 Kubernetes Service、Pod 等。
因此,可以將 Prometheus Operator 看作是一種控制器,它通過管理 Kubernetes API 中的 Prometheus 自定義資源,來實現Prometheus 實例的自動化部署和管理。
關于開發自定義的Operator
我很想分享一個開發自定義Operator的案例,但我現在能力有限,不能很快的給大家分享。當然了,我也在不斷的摸索、學習。爭取下次分享出來。
如果想要開發自己的 Operator,這個事情還是有一定難度的,至少需要做好以下技能的儲備:
- Kubernetes基礎:了解 K8S 的基本概念,包括 Pod、Service、Deployment、StatefulSet、DaemonSet 等等。
- Go語言:Operator SDK 基于 Go 編寫,因此需要掌握 Go
- Operator SDK:Operator SDK 是開發 K8S Operator 的開發工具,需要掌握其使用方法。(這一塊我自己還是沒有去看的,需要抽個時間好好看看)
- Kubernetes API:需要了解 K8S API 的使用方式,可以通過 K8S Go client 來與 K8S API 交互。(關于API的使用套路,前面有分享過,可以翻閱。)
關于提到Go語言,其實我一直都在建議運維工程師要把Go學好,如果想要在云原生運維領域深扎、做到高級,不懂Go是不行的,這就是我為什么會偶爾都要分享一下Go的知識。
以上就是K8S Operator部署及自定義詳解的詳細內容,更多關于K8S Operator部署的資料請關注其它相關文章!