Kubernetes

K8s Operator 完整详解

·13 分钟阅读·5032 字

K8s Operator 完整详解 的详细笔记

📋 目录

K8s Operator 完整详解

核心概念 Operator 是 K8s 的扩展机制,通过 CRD + Controller 将运维知识编码为自动化程序。

1. 核心定义

Operator 是基于 Kubernetes 扩展机制 CRD + Controller 构建的领域专用业务控制器,目的:把复杂有状态软件(数据库、消息队列、GPU集群、监控组件、LLM训练平台)的运维流程代码化,交给集群自动管理,替代人工手动操作。

1.1. 底层两大基石

  1. **CRD(CustomResourceDefinition 自定义资源)**扩展 K8s API,新增自定义资源类型(原生只有 Pod/Deployment/Service/PVC,CRD 可以新增 GPUClusterPrometheusNginxCluster 等),用户可以像操作原生资源一样 kubectl applykubectl get
  2. Controller 自定义控制器
    常驻运行的程序(一般部署为 Deployment),持续监听对应 CR 资源的增删改事件,执行业务运维逻辑(调参、扩容、升级、故障修复、组件部署)。 简单一句话:
    CRD = 新增一种资源配置文件;Operator Controller = 持续 reconcile(调谐)这个资源,保证集群真实状态匹配用户期望状态。

2. 核心设计思想:调谐循环 Reconcile Loop

所有 Operator 底层都是无限循环逻辑:

  1. 观察 Observe:拉取当前自定义 CR 期望配置 + 集群当前真实资源状态(Pod/DS/ConfigMap/Service)
  2. 对比 Compare:对比期望 vs 真实,找出差异
  3. 修正 Reconcile:增删改集群资源,消除差异,让真实状态对齐期望
  4. 阻塞等待资源就绪(等待Pod启动、存储挂载、组件健康)
  5. 回到第一步无限循环,持续监控

2.1. 举个直观例子:NVIDIA GPU Operator

用户提交 CR ClusterPolicy,描述期望:开启DCGM、开启MIG、驱动版本535、启用device-plugin

Controller 循环对比:

  • 宿主机驱动未安装 → 自动创建DaemonSet部署驱动
  • containerd未配置nvidia runtime → 修改节点配置
  • dcgm-exporter不存在 → 创建DaemonSet、ServiceMonitor
  • device-plugin异常重启 → 自动重建Pod
    节点/组件变更后自动同步修复,无需人工运维。

3. 原生控制器 vs Operator 区别

3.1. 1)原生内置控制器(Deployment/StatefulSet/DS)

只提供通用基础能力:无业务逻辑。

Deployment 只会管理无状态副本扩缩容、滚动更新;不知道GPU驱动、监控、数据库怎么运维

3.2. 2)Operator 自定义控制器

绑定特定软件领域知识,内置完整运维逻辑:

  • Prometheus Operator:懂监控栈,自动创建StatefulSet、Alertmanager、Grafana、ServiceMonitor、告警规则
  • NVIDIA GPU Operator:懂GPU整套虚拟化栈、驱动、MIG、DCGM、调度组件
  • MySQL Operator:懂数据库备份、主从切换、扩容、故障恢复
  • Volcano Operator:懂分布式训练Gang调度、GPU资源排队、任务优先级

4. Operator 标准组成完整结构

一套标准Operator包含5部分:

  1. CRD 资源定义
    声明自定义资源字段、校验规则、打印列,kubectl get crd 可查看。
    GPU Operator 核心CR:ClusterPolicy;Prometheus Operator:PrometheusAlertmanagerServiceMonitor
  2. Controller 控制程序
    二进制程序,监听API Server CR事件,执行Reconcile调谐逻辑,一般以Deployment运行。
  3. Webhook(可选但生产必备)
  • Mutating Webhook:创建CR前自动填充默认值、修改配置
  • Validating Webhook:校验非法配置,直接拒绝提交(比如GPU显存配置非法、版本不兼容)
  1. 配套模板资源
    Controller 内置各类资源模板:DaemonSet、ConfigMap、Secret、Service、RBAC权限、ServiceAccount,根据CR配置动态渲染创建。
  2. RBAC 权限
    给Controller绑定权限:增删Pod/DS/ConfigMap/CRD/ServiceMonitor等资源,否则无法创建组件。

5. 工作完整流程(以 NVIDIA GPU Operator 举例)

  1. 集群安装 Operator Helm 包,自动创建:CRD、Controller Deployment、RBAC、Webhook;
  2. 用户编写 ClusterPolicy CR yaml,定义GPU集群期望配置(驱动版本、是否开启DCGM、MIG、vGPU、分时切片);
  3. kubectl apply -f cluster-policy.yaml 提交到apiserver;
  4. GPU Operator Controller 监听到新增ClusterPolicy资源,进入Reconcile循环;
  5. 对比集群现状,逐步补齐所有组件:
  6. 在GPU节点自动部署驱动DaemonSet,编译安装宿主机NVIDIA内核驱动;
  7. 自动修改containerd配置,启用nvidia-cdi runtime;
  8. 部署nvidia-device-plugin DaemonSet,配置MIG/Time-Slicing;
  9. 部署dcgm-exporter,自动生成ServiceMonitor对接Prometheus;
  10. 部署nvidia-container-toolkit,生成CDI设备文件;
  11. 持续循环监控:任意组件删除、版本不匹配、节点配置变更,立刻自动修复;
  12. 修改ClusterPolicy CR(关闭MIG、升级驱动版本),Controller自动滚动更新全节点组件。

6. 你运维AI集群最常用的两类Operator详解

6.1. NVIDIA GPU Operator(GPU集群核心)

6.1.1. 管理整套GPU虚拟化+调度+监控全栈组件:

  • NVIDIA内核驱动持久化DaemonSet
  • nvidia-container-toolkit / CDI 容器虚拟化配置
  • nvidia-device-plugin DaemonSet(GPU扩展资源调度)
  • DCGM + dcgm-exporter GPU硬件监控
  • MIG硬件分片、Time-Slicing分时切片配置管理
  • 自动RBAC、节点标签、污点协同配置

6.1.2. 解决痛点

裸金属手动部署驱动、device-plugin、DCGM多节点运维成本极高;驱动升级、MIG切换需要逐台操作,Operator一键全局管控。

6.2. Prometheus Operator(监控标准Operator)

新增CR资源:

  • Prometheus:定义Prometheus实例存储、副本、保留时长
  • Alertmanager:告警组件配置
  • ServiceMonitor:自动抓取Pod/DS metrics(dcgm-exporter、HAMi、业务Agent)
  • PrometheusRule:告警规则CR,不用手动写ConfigMap

6.2.1. 价值

不用手动维护Prometheus配置文件,新增GPU/业务服务监控只需要创建ServiceMonitor,自动发现采集指标。

6.3. Volcano Operator(大模型训练调度)

面向AI分布式训练批量调度,CR:Job,内置Gang调度、GPU装箱、任务队列、优先级抢占,弥补原生调度器GPU碎片问题。

7. Operator 开发框架(不用从零写Controller)

日常开发自定义Operator不需要手写底层k8s API监听,主流成熟框架:

  1. Operator SDK(官方标准)
    支持Go/Ansible/Helm三种开发模式,生成标准化Operator项目脚手架,企业最常用。
  2. Kubebuilder(底层Go框架,Operator SDK底层依赖)
    Go语言高性能开发自定义控制器,生产高性能Operator首选(GPU Operator、Prometheus Operator均基于Go Kubebuilder)。
  3. kopf(Python轻量Operator框架)
    Python快速开发轻量控制器,适合运维写自动化小工具、自定义监控告警控制器。

8. Operator 核心优势(生产价值)

  1. 封装专业领域运维知识,降低人工操作
    GPU驱动安装、数据库主从切换、监控栈部署全部代码自动化,减少人为操作失误。
  2. 声明式API,GitOps友好
    所有配置写CR yaml,存入Git仓库,集群状态完全由代码管理,可回滚、版本管控。
  3. 持续自愈
    组件Pod删除、配置文件篡改、节点重启,Controller循环自动修复,不用人工介入。
  4. 统一多节点批量管控
    一套CR配置全局生效,批量更新所有GPU节点驱动、监控组件。
  5. 扩展原生K8s能力
    原生资源无法表达复杂软件拓扑,CRD自定义资源可以完整描述GPU集群、分布式训练任务。

9. 局限与适用场景

9.1. 适合场景

  1. 有状态复杂中间件:MySQL、Redis、Elasticsearch
  2. 硬件异构集群:GPU/FPGA网卡管理(GPU Operator)
  3. 完整监控、日志栈:Prometheus、EFK
  4. 批量AI训练任务调度:Volcano
  5. 需要自愈、自动升级、批量运维的系统

9.2. 不适合场景

简单无状态服务(普通Python Agent、静态Nginx),直接Deployment足够,没必要开发Operator,过重。

10. 高频面试题(运维/AI平台岗必问)

10.1. Operator 和 CRD 的关系?

CRD 是扩展API,定义一种新资源;Operator 是监听该资源的控制器程序。二者配套使用:CRD提供配置载体,Controller执行运维调谐逻辑。只有CRD没有Controller只是空定义,无法自动执行任何操作。

10.2. Reconcile 调谐循环是什么?

Operator 核心逻辑循环:获取CR期望状态 + 集群真实资源状态,对比差异,自动创建/删除/修改资源对齐期望,无限循环持续自愈。

10.3. 原生Deployment能不能替代Operator?

不能。Deployment仅能管理无状态Pod副本,没有领域专属运维逻辑,无法自动安装驱动、管理整套DCGM/device-plugin栈、自动处理数据库主从切换这类复杂业务流程。

10.4. 介绍NVIDIA GPU Operator的作用与管理组件?

见上文,统一管理宿主机驱动、容器虚拟化runtime、device-plugin调度组件、DCGM监控、MIG分片全局配置,实现GPU集群零人工逐节点运维。

10.5. Mutating/Validating Webhook 在Operator里作用?

Mutating:自动填充默认配置、注入环境变量(HAMi vGPU自动修改Pod显存配置);

Validating:校验CR配置合法性,非法参数直接拒绝创建,提前规避调度/运行故障。

10.6. 为什么AI集群必须用GPU Operator,不用手动部署device-plugin?

手动部署存在版本不一致、升级繁琐、MIG配置无法批量同步、DCGM监控组件零散;GPU Operator一体化管控全栈组件,全局统一配置、自动自愈、滚动升级,适配大规模GPU集群。

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro