Kubernetes Operator是什么

K8S Operator这个东西欠好解说,这么说吧,比方有一个应用程序,并且想要将其布置到 k8s 上,并且希望能够实现主动化运维和可扩展性,那么就能够考虑运用 K8S Operator 的框架,将应用程序的管理逻辑笼统为 k8s 资源,并编写自界说 Operator 来管理和运维该应用程序。

仍是有点懵?我举个比如:有一个依据 Kafka 的消息行列应用程序,想将其布置到 k8s 并实现主动化运维和可扩展性,就能够运用 Kubernetes Operator 的框架来管理和运维该应用程序了。

假如仍是有疑问,更多概况可参考官方文档:kubernetes.io/zh-cn/docs/…

分析之前布置过的Prometheus Operator

官方文档:prometheus-operator.dev/

  1. 查看Api Resources,发现prometheus被界说为了 Kubernetes API 中的一个自界说资源:
[root@k8s-a-masterprometheus-operator]#kubectlapi-resources|grepprometheus
prometheusagentspromagentmonitoring.coreos.com/v1alpha1truePrometheusAgent
prometheusesprommonitoring.coreos.com/v1truePrometheus
prometheusrulespromrulemonitoring.coreos.com/v1truePrometheusRule
[root@k8s-a-masterprometheus-operator]#
  1. 查看用于界说 Prometheus 实例的自界说资源类型:
[root@k8s-a-masterprometheus-operator]#kubectlgetprometheus
NAMEVERSIONDESIREDREADYRECONCILEDAVAILABLEAGE
prometheus33TrueTrue54s

下面的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 自界说资源类型之一。

  1. 接下来看看带3个副本的prometheus pod:
[root@k8s-a-masterprometheus-operator]#kubectlgetpod
NAMEREADYSTATUSRESTARTSAGE
prometheus-prometheus-02/2Running022s
prometheus-prometheus-12/2Running022s
prometheus-prometheus-22/2Running022s
  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大众号:不背锅运维(喜欢的盆友重视我们):mp.weixin.qq.com/s/H2UDf0xMj…