关于K8S Operator的那点“破”事

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 关于K8S Operator的那点“破”事

Kubernetes Operator是什么

K8S Operator这个东西不好解释,这么说吧,比如有一个应用程序,并且想要将其部署到 k8s 上,并且希望能够实现自动化运维和可扩展性,那么就可以考虑使用 K8S Operator 的框架,将应用程序的管理逻辑抽象为 k8s 资源,并编写自定义 Operator 来管理和运维该应用程序。

还是有点懵?我举个例子:有一个基于 Kafka 的消息队列应用程序,想将其部署到 k8s 并实现自动化运维和可扩展性,就可以使用 Kubernetes Operator 的框架来管理和运维该应用程序了。

如果还是有疑问,更多详情可参考官方文档:https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/operator/

分析之前部署过的Prometheus Operator

官方文档:https://prometheus-operator.dev/

  1. 查看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]#
  1. 查看用于定义 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 自定义资源类型之一。

  1. 接下来看看带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
  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的知识。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
Prometheus Kubernetes 监控
prometheus operator监控k8s集群之外的haproxy组件
prometheus operator监控k8s集群之外的haproxy组件
|
7月前
|
Kubernetes Go API
|
Kubernetes Cloud Native NoSQL
TuGraph Analytics云原生部署:基于K8S Operator的轻量级作业启动方案
TuGraph Analytics作业可以通过Console提交部署到K8S集群,但Console是一个独立的Web系统,部署形态上相对较重。在平台工具系统接入或大数据生态集成场景中,需要更轻量级的快速接入TuGraph Analytics的方案。
|
存储 运维 Kubernetes
K8s Operator总结----(一、)基础概念
如何基于k8s,进行二次定制化开发,系列文章,小试一下。
122 1
|
存储 缓存 Kubernetes
聊一聊K8s Operator在日志采集器中的应用
Kubernetes提供了自定义资源(Custom Resource)和K8s Operator为应用程序的部署提供扩展。本文调研了K8s Operator在各个日志采集器中的应用场景与架构。
666 0
|
存储 Kubernetes Cloud Native
带你读《云原生应用开发:Operator原理与实践》——1.1.2 Kubernetes:云原生基础设施
带你读《云原生应用开发:Operator原理与实践》——1.1.2 Kubernetes:云原生基础设施
带你读《云原生应用开发:Operator原理与实践》——1.1.2 Kubernetes:云原生基础设施
|
Kubernetes Cloud Native API
带你读《云原生应用开发:Operator原理与实践》——2.3.1 Kubernetes API 访问控制
带你读《云原生应用开发:Operator原理与实践》——2.3.1 Kubernetes API 访问控制
|
设计模式 Kubernetes Cloud Native
《云原生应用开发:Operator原理与实践-样章》——第1章 引言——1.1 云原生介绍——1.1.2 Kubernetes:云原生基础设施(1)
《云原生应用开发:Operator原理与实践-样章》——第1章 引言——1.1 云原生介绍——1.1.2 Kubernetes:云原生基础设施(1)
161 0
|
存储 Kubernetes Cloud Native
《云原生应用开发:Operator原理与实践-样章》——第1章 引言——1.1 云原生介绍——1.1.2 Kubernetes:云原生基础设施(2)
《云原生应用开发:Operator原理与实践-样章》——第1章 引言——1.1 云原生介绍——1.1.2 Kubernetes:云原生基础设施(2)
109 0