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/

  1. 查看Api Resources,发现prometheus被定义为了 Kubernetes API 中的一个自定义资源:
[root@k8s-a-master prometheus-operator]# kubectl api-resources | grep prometheusprometheusagents                  promagent    monitoring.coreos.com/v1alpha1         true         PrometheusAgentprometheuses                      prom         monitoring.coreos.com/v1               true         Prometheusprometheusrules                   promrule     monitoring.coreos.com/v1               true         PrometheusRule[root@k8s-a-master prometheus-operator]# 
  1. 查看用于定义 Prometheus 实例的自定义资源类型:
[root@k8s-a-master prometheus-operator]# kubectl get prometheusNAME         VERSION   DESIRED   READY   RECONCILED   AVAILABLE   AGEprometheus             3         3       True         True        54s

上面的yaml文件是我之前用来创立prometheus实例的,通过它能够主动创立、更新和删除 Prometheus 实例:

apiVersion: monitoring.coreos.com/v1kind: Prometheusmetadata:  name: prometheusspec:  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 自定义资源类型之一。

  1. 接下来看看带3个正本的prometheus pod:
[root@k8s-a-master prometheus-operator]# kubectl get podNAME                                   READY   STATUS    RESTARTS   AGEprometheus-prometheus-0                2/2     Running   0          22sprometheus-prometheus-1                2/2     Running   0          22sprometheus-prometheus-2                2/2     Running   0          22s
  1. 小总结

通过简略剖析曾经很分明了,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,这个事件还是有肯定难度的,至多须要做好以下技能的储备:

  1. Kubernetes根底:理解 K8S 的基本概念,包含 Pod、Service、Deployment、StatefulSet、DaemonSet 等等。
  2. Go语言:Operator SDK 基于 Go 编写,因而须要把握 Go
  3. Operator SDK:Operator SDK 是开发 K8S Operator 的开发工具,须要把握其应用办法。(这一块我本人还是没有去看的,须要抽个工夫好好看看)
  4. Kubernetes API:须要理解 K8S API 的应用形式,能够通过 K8S Go client 来与 K8S API 交互。(对于API的应用套路,后面有分享过,能够翻阅。)
对于提到Go语言,其实我始终都在倡议运维工程师要把Go学好,如果想要在云原生运维畛域深扎、做到高级,不懂Go是不行的,这就是我为什么会偶然都要分享一下Go的常识。

本文转载于WX公众号:不背锅运维(喜爱的盆友关注咱们):https://mp.weixin.qq.com/s/H2UDf0xMjLKdLvz3ILSFIw