K8S?Operator部署及自定義詳解
Kubernetes Operator是什么
K8S Operator這個(gè)東西不好解釋,這么說(shuō)吧,比如有一個(gè)應(yīng)用程序,并且想要將其部署到 k8s 上,并且希望能夠?qū)崿F(xiàn)自動(dòng)化運(yùn)維和可擴(kuò)展性,那么就可以考慮使用 K8S Operator 的框架,將應(yīng)用程序的管理邏輯抽象為 k8s 資源,并編寫自定義 Operator 來(lái)管理和運(yùn)維該應(yīng)用程序。
還是有點(diǎn)懵?我舉個(gè)例子:有一個(gè)基于 Kafka 的消息隊(duì)列應(yīng)用程序,想將其部署到 k8s 并實(shí)現(xiàn)自動(dòng)化運(yùn)維和可擴(kuò)展性,就可以使用 Kubernetes Operator 的框架來(lái)管理和運(yùn)維該應(yīng)用程序了。
如果還是有疑問(wèn),更多詳情可參考官方文檔:kubernetes.io/zh-cn/docs/…
分析之前部署過(guò)的Prometheus Operator
- 查看Api Resources,發(fā)現(xiàn)prometheus被定義為了 Kubernetes API 中的一個(gè)自定義資源:
[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 實(shí)例的自定義資源類型:
[root@k8s-a-master prometheus-operator]# kubectl get prometheus NAME VERSION DESIRED READY RECONCILED AVAILABLE AGE prometheus 3 3 True True 54s
下面的yaml文件是我之前用來(lái)創(chuàng)建prometheus實(shí)例的,通過(guò)它可以自動(dòng)創(chuàng)建、更新和刪除 Prometheus 實(shí)例:
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 用于創(chuàng)建 Prometheus 實(shí)例的 Kubernetes 自定義資源類型之一。
- 接下來(lái)看看帶3個(gè)副本的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
- 小總結(jié)
通過(guò)簡(jiǎn)單分析已經(jīng)很清楚了,Prometheus Operator 是一個(gè) Kubernetes 控制器,它負(fù)責(zé)監(jiān)視 Kubernetes API 中的 Prometheus 資源(包括 kind: Prometheus)的變化,并根據(jù)資源定義來(lái)管理 Prometheus 實(shí)例。Prometheus Operator 可以根據(jù) Prometheus 自定義資源中定義的規(guī)則來(lái)創(chuàng)建、更新和刪除 Prometheus 實(shí)例,并且支持自動(dòng)發(fā)現(xiàn)和配置 Prometheus 監(jiān)控對(duì)象,如 Kubernetes Service、Pod 等。
因此,可以將 Prometheus Operator 看作是一種控制器,它通過(guò)管理 Kubernetes API 中的 Prometheus 自定義資源,來(lái)實(shí)現(xiàn)Prometheus 實(shí)例的自動(dòng)化部署和管理。
關(guān)于開(kāi)發(fā)自定義的Operator
我很想分享一個(gè)開(kāi)發(fā)自定義Operator的案例,但我現(xiàn)在能力有限,不能很快的給大家分享。當(dāng)然了,我也在不斷的摸索、學(xué)習(xí)。爭(zhēng)取下次分享出來(lái)。
如果想要開(kāi)發(fā)自己的 Operator,這個(gè)事情還是有一定難度的,至少需要做好以下技能的儲(chǔ)備:
- Kubernetes基礎(chǔ):了解 K8S 的基本概念,包括 Pod、Service、Deployment、StatefulSet、DaemonSet 等等。
- Go語(yǔ)言:Operator SDK 基于 Go 編寫,因此需要掌握 Go
- Operator SDK:Operator SDK 是開(kāi)發(fā) K8S Operator 的開(kāi)發(fā)工具,需要掌握其使用方法。(這一塊我自己還是沒(méi)有去看的,需要抽個(gè)時(shí)間好好看看)
- Kubernetes API:需要了解 K8S API 的使用方式,可以通過(guò) K8S Go client 來(lái)與 K8S API 交互。(關(guān)于API的使用套路,前面有分享過(guò),可以翻閱。)
關(guān)于提到Go語(yǔ)言,其實(shí)我一直都在建議運(yùn)維工程師要把Go學(xué)好,如果想要在云原生運(yùn)維領(lǐng)域深扎、做到高級(jí),不懂Go是不行的,這就是我為什么會(huì)偶爾都要分享一下Go的知識(shí)。
以上就是K8S Operator部署及自定義詳解的詳細(xì)內(nèi)容,更多關(guān)于K8S Operator部署的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
K8s中的臨時(shí)容器Ephemeral?Containers使用
這篇文章主要介紹了K8s中的臨時(shí)容器Ephemeral?Containers使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查
這篇文章主要介紹了詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
k8s中如何實(shí)現(xiàn)pod自動(dòng)擴(kuò)縮容詳解
在實(shí)際生產(chǎn)系統(tǒng)中,經(jīng)常會(huì)遇到某個(gè)服務(wù)需要擴(kuò)容的場(chǎng)景,可能會(huì)遇到由于資源緊張或者工作負(fù)載降低而需要減少服務(wù)實(shí)例數(shù)量的場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于k8s中如何實(shí)現(xiàn)pod自動(dòng)擴(kuò)縮容的相關(guān)資料,需要的朋友可以參考下2022-08-08
K8s中Pod處于Pending狀態(tài)的八種原因分析
文章詳細(xì)介紹了Pod處于Pending狀態(tài)的八種常見(jiàn)原因,并提供了相應(yīng)的排查和解決方法,這些原因包括資源不足、調(diào)度約束、存儲(chǔ)依賴、鏡像問(wèn)題、配額限制、網(wǎng)絡(luò)暗礁、系統(tǒng)級(jí)異常以及冷門陷阱,每種原因都附帶了具體的診斷方法和解決建議,感興趣的朋友一起看看吧2025-02-02
Kubernetes如何限制不同團(tuán)隊(duì)只能訪問(wèn)各自namespace實(shí)現(xiàn)
這篇文章主要為大家介紹了Kubernetes如何限制不同團(tuán)隊(duì)只能訪問(wèn)各自namespace實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
帶你學(xué)會(huì)k8s?更高級(jí)的對(duì)象Deployment
這篇文章主要為大家介紹了k8s還有更高級(jí)的"對(duì)象"Deployment使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解
這篇文章主要為大家介紹了Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
k8s編排之StatefulSet知識(shí)點(diǎn)詳解二
這篇文章主要為大家介紹了k8s編排之StatefulSet知識(shí)點(diǎn)的部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

