k8s笔记——kubebuilder工作流程

kubebuilder工作流程


Kubebuilder 工作流程详解

Kubebuilder 是 Kubernetes 官方推荐的 Operator 开发框架,用于构建基于 Custom Resource Definitions (CRD) 的控制器。以下是其核心工作流程的完整说明:


1. 初始化项目

# 创建项目目录
mkdir my-operator && cd my-operator# 初始化 Kubebuilder 项目(指定 Go 模块名和 Kubernetes API 版本)
kubebuilder init --domain my.domain.com --repo my.domain.com/my-operator# 创建 API(定义 CRD 和控制器)
kubebuilder create api --group webapp --version v1 --kind Guestbook

作用

  • 生成项目脚手架代码
  • 配置 go.mod 和基础 Makefile
  • 创建 CRD 的 API 类型定义(api/v1/guestbook_types.go

2. 设计 CRD (Custom Resource)

编辑生成的 API 类型文件 api/v1/guestbook_types.go

type GuestbookSpec struct {// 定义用户可配置字段Message string `json:"message"`Replicas int32 `json:"replicas"`
}type GuestbookStatus struct {// 定义控制器维护的状态字段AvailableReplicas int32 `json:"availableReplicas"`
}

关键操作

  • 实现 runtime.Object 接口(Kubebuilder 已自动生成)
  • 通过 // +kubebuilder:subresource:status 等标记扩展功能

3. 生成 CRD 和代码

# 生成 CRD YAML 和 DeepCopy 方法
make manifests# 生成客户端代码(如 informers、listers)
make generate

输出结果

  • config/crd/bases/ 下的 CRD YAML 文件
  • zz_generated.deepcopy.go 自动生成的深拷贝代码

4. 实现控制器逻辑

编辑 controllers/guestbook_controller.go

func (r *GuestbookReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {// 1. 获取 CR 实例guestbook := &webappv1.Guestbook{}if err := r.Get(ctx, req.NamespacedName, guestbook); err != nil {return ctrl.Result{}, client.IgnoreNotFound(err)}// 2. 业务逻辑(例如创建 Deployment)dep := &appsv1.Deployment{}if err := r.Get(ctx, req.NamespacedName, dep); err != nil {if errors.IsNotFound(err) {// 创建 Deploymentdep = r.newDeploymentForGuestbook(guestbook)if err := r.Create(ctx, dep); err != nil {return ctrl.Result{}, err}}}// 3. 更新状态guestbook.Status.AvailableReplicas = dep.Status.AvailableReplicasif err := r.Status().Update(ctx, guestbook); err != nil {return ctrl.Result{}, err}return ctrl.Result{}, nil
}

核心机制

  • Reconcile 循环:监听 CR 变化并触发调谐逻辑
  • 幂等性设计:确保重复执行不会产生副作用

5. 本地测试

# 安装 CRD 到集群
make install# 运行控制器(本地开发模式)
make run# 部署示例 CR
kubectl apply -f config/samples/webapp_v1_guestbook.yaml

调试工具

  • 使用 kubectl get guestbooks 查看自定义资源
  • 通过 kubectl logs 查看控制器日志

6. 构建与部署

# 构建镜像
make docker-build docker-push IMG=my-registry/my-operator:v1.0.0# 生成部署清单(RBAC、Deployment 等)
make manifests# 部署到集群
make deploy IMG=my-registry/my-operator:v1.0.0

生成内容

  • config/rbac/:角色权限配置
  • config/manager/:Operator 的 Deployment 配置

7. 高级功能扩展

Webhook 支持

# 创建 webhook
kubebuilder create webhook --group webapp --version v1 --kind Guestbook --defaulting --programmatic-validation

用途

  • 实现字段默认值注入(Mutating Webhook)
  • 验证字段合法性(Validating Webhook)

多版本 API 支持

通过 kubebuilder edit --multiversion 开启,生成版本转换逻辑。


工作流程图解

初始化项目
定义CRD
生成代码/CRD
实现控制器
本地测试
构建部署
扩展功能

关键设计理念

  1. 声明式 API:用户通过 YAML 描述期望状态,控制器负责实现
  2. 事件驱动:基于 Kubernetes 的 Informer 机制高效监听资源变更
  3. 水平扩展:控制器可多副本运行,通过 Leader Election 避免冲突

Kubebuilder 通过标准化的工作流程,显著降低了 Operator 的开发门槛,是构建 Kubernetes 原生扩展组件的首选工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java框架“若依RuoYi”前后端分离部署

运行环境 Eclipse IDE for Enterprise Java and Web Developers 下载Eclipse解压Eclipse到文件夹 Maven 下载Maven解压Maven到文件夹配置环境变量MAVEN_HOME为Maven安装位置配置环境变量path为%MAVEN_HOME%\bin Redis 下载Redis解压Redis到文件夹配置环境变量path为Redis安装位…

游戏引擎学习第249天:清理调试宏

欢迎大家,让我们直接进入调试代码的改进工作 接下来,我们来看一下上次停留的位置。如果我没记错的话,上一场直播的结尾我有提到一些我想做的事情,并且在代码中留下了一个待办事项。所以也许我们今天首先做的就是解决这个问题。但…

二极管反向恢复的定义和原理

二极管的反向恢复定义 二极管的反向恢复是指二极管从正向导通状态切换到反向阻断状态时,电流从正向变为负向并最终回到零所需的时间。具体过程如下: 正向导通:当二极管正向偏置时,电流可以顺利通过,此时二极管处于导…

音视频开发技术总结报告

音视频开发技术总结报告 一、音视频开发基础 1、音频基础 声音原理 声波特性:频率、振幅、波长人耳听觉范围:20Hz-20kHz声音三要素:音调、音量、音色 数字音频基础 采样率:常见44.1kHz、48kHz、96kHz量化位数:8bit、…

中间件和组件

文章目录 1. 前言2. 中间件介绍3. 组件介绍4. 区别对比5. 简单类比6. 总结 中间件和组件 1. 前言 中间件和组件是软件开发中两个重要的概念,但它们的定位和作用完全不同。中间件解决的事通信、跨系统、安全等问题,组件是解决具体业务模块,提高…

AI超级智能体教程(五)---自定义advisor扩展+结构化json输出

文章目录 1.自定义拦截器1.2自定义Advisor1.2打断点调试过程1.3Re-reading Advisor自定义实现 2.恋爱报告开发--json结构化输出2.1原理介绍2.1代码实现2.3编写测试用例2.4结构化输出效果 1.自定义拦截器 1.2自定义Advisor spring里面的这个默认的是SimpleloggerAdvisor&#…

02_使用 AES 算法实现文件加密上传至阿里云、解密下载

02_使用 AES 算法实现文件加密上传至阿里云、解密下载 一、文件上传下载接口 controller 层 RestController RequestMapping("/api/common/file") Api(tags "公共文件上传") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…

力扣:24两两交换链表的节点

目录 1.题目描述: 2.算法思路: 3.代码展示: 1.题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能…

smss源代码分析之smss!SmpLoadSubSystemsForMuSession函数分析加载csrss.exe

第一部分: Next SmpSubSystemsToLoad.Flink; while ( Next ! &SmpSubSystemsToLoad ) { p CONTAINING_RECORD( Next, SMP_REGISTRY_VALUE, Entry )…

MIT6.S081-lab8前置

MIT6.S081-lab8前置 注:本部分除了文件系统还包含了调度的内容。 调度 调度涉及到保存寄存器,恢复寄存器,就这一点而言,和我们的 trap 很像,但是实际上,我们实现并不是复用了 trap 的逻辑,我…

哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础

文章目录 一、密码哈希函数概述1.1 哈希函数的基本概念1.2 哈希函数在数据安全中的应用 二、SHA-2系列算法详解2.1 SHA-2的起源与发展2.2 SHA-256技术细节与实现2.3 SHA-384和SHA-512的特点2.4 SHA-2系列算法的安全性评估 三、SHA-3系列算法详解3.1 SHA-3的起源与设计理念3.2 K…

待验证---Oracle 19c 在 CentOS 7 上的快速安装部署指南

Oracle 19c 在 CentOS 7 上的快速安装部署指南 Oracle Database 19c 是一个功能强大的企业级数据库系统,下面我将为您提供在 CentOS 7 上快速安装部署 Oracle 19c 的详细步骤。 一、准备工作 1. 系统要求 CentOS 7 (64位)最小内存: 2GB (推荐 8GB 以上)最小磁盘…

stm32 HAI库 SPI(一)原理

基本特点 通信方式:同步、串行(串行、并行、并发,别再傻傻分不清了!_串行和并行的区别-CSDN博客)、全双工 (也可以选择半双工)速率:50MHZ以下数据格式:8位/16位传输顺序…

OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡

OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡 一、OpenResty技术概述 1.1 OpenResty是什么? OpenResty是一个基于Nginx的高性能Web平台,它将标准的Nginx核心与一系列强大的第三方模块(主要是LuaJIT)捆绑在一起,形成了一个全功能的Web应用服务器。不同于传…

二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE

仙盟模型 用途 精准分拣:快速准确识别物品上复杂或多个二维码,依据码中信息(如目的地、品类等)实现物品自动化分拣,提高分拣效率与准确性。库存管理:识别入库、出库物品二维码,更新库存数据&am…

scikit-learn在监督学习算法的应用

shiyonguyu大家好,我是我不是小upper!最近行业大环境不是很好,有人苦恼别人都开始着手项目实战了,自己却还卡在 scikit-learn 的代码语法上,连简单的示例运行起来都磕磕绊绊。确实,对很多机器学习初学者来说…

dragonfly docker pull 报错 error parsing HTTP 404 response body

问题描述 在部署了 dragonfly 的机器上 docker pull 镜像发现如下报错 docker pull uhub.service.ucloud.cn/openbayes/test-job-sidecar:latest Error response from daemon: error parsing HTTP 404 response body: invalid character p after top-level value: "404 …

C++11新特性_标准库_正则表达式库

C11 引入了标准正则表达式库 <regex>&#xff0c;它提供了强大且灵活的文本匹配和替换功能。下面为你详细介绍该库的相关内容&#xff0c;包括主要组件、使用方法、示例代码等。 主要组件 std::regex&#xff1a;用于表示一个正则表达式对象&#xff0c;可通过构造函数…

【多线程】七、POSIX信号量 环形队列的生产者消费者模型

文章目录 Ⅰ. 信号量一、POSIX 信号量的概念二、POSIX 信号量的类型区别三、POSIX 信号量与 SystemV 信号量的区别Ⅱ. 线程信号量基本原理一、为什么要引入信号量❓二、PV 操作三、POSIX 信号量的实现原理四、CAS操作介绍Ⅲ. POSIX未命名信号量接口一、初始化无名信号量二、销毁…

ES基本使用方式

ES基本使用 文章目录 ES基本使用1.es的访问使用URL访问 2.mapping的理解Dynamic Mappingkeyword 与 text的区别‌基础定义与核心差异主字段&#xff0c;子字段 创建mapping 3.创建索引4.查看索引列表5.删除索引6.添加数据7.查询数据 重置es密码&#xff0c;初始用户elastic el…