Kubernetes Operator 是什么
K8S Operator 这个货色不好解释,这么说吧,比方有一个应用程序,并且想要将其部署到 k8s 上,并且心愿可能实现自动化运维和可扩展性,那么就能够思考应用 K8S Operator 的框架,将应用程序的治理逻辑形象为 k8s 资源,并编写自定义 Operator 来治理和运维该应用程序。
还是有点懵?我举个例子:有一个基于 Kafka 的音讯队列应用程序,想将其部署到 k8s 并实现自动化运维和可扩展性,就能够应用 Kubernetes Operator 的框架来治理和运维该应用程序了。
如果还是有疑难,更多详情可参考官网文档:https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/o…
剖析之前部署过的 Prometheus Operator
官网文档:https://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 的常识。
本文转载于 WX 公众号:不背锅运维(喜爱的盆友关注咱们):https://mp.weixin.qq.com/s/H2UDf0xMjLKdLvz3ILSFIw