k8s笔记——kubebuilder实战

news2024/9/25 9:56:55

kubebuilder

Kubebuilder 是一个基于 CRD 来构建 Kubernetes API 的框架,可以使用 CRD 来构建 API、Controller 和 Admission Webhook。

动机

目前扩展 Kubernetes 的 API 的方式有创建 CRD、使用 Operator SDK 等方式,都需要写很多的样本文件(boilerplate),使用起来十分麻烦。为了能够更方便构建 Kubernetes API 和工具,就需要一款能够事半功倍的工具,与其他 Kubernetes API 扩展方案相比,kubebuilder 更加简单易用,并获得了社区的广泛支持。

工作流程

Kubebuilder 的工作流程如下:

  1. 创建一个新的工程目录
  2. 创建一个或多个资源 API CRD 然后将字段添加到资源
  3. 在控制器中实现协调循环(reconcile loop),watch 额外的资源
  4. 在集群中运行测试(自动安装 CRD 并自动启动控制器)
  5. 更新引导集成测试测试新字段和业务逻辑
  6. 使用用户提供的 Dockerfile 构建和发布容器

设计哲学

Kubebuilder 提供基于简洁的精心设计的示例 godoc 来提供整洁的库抽象。

  • 能使用 go 接口和库,就不使用代码生成
  • 能使用代码生成,就不用使用多于一次的存根初始化
  • 能使用一次存根,就不 fork 和修改 boilerplate
  • 绝不 fork 和修改 boilerplate

开始

环境
go version go1.22.3 linux/amd64
win10+debian11虚拟机
minikube version: v1.33.1
kubenetes version1.28.9

# 安装make
sudo apt-get install make
# 创建项目
mkdir kubebuilder-demo
cd kubebuilder-demo
go mod init gitcode.com/m

初始化

# 初始化一个新项目
kubebuilder init --domain my.domain
# 创建一个 API,按两次y
kubebuilder create api --group webapp --version v1 --kind Guestbook

在这里插入图片描述
在这里插入图片描述
API 创建完成后,在项目根目录下查看目录结构。

.
├── api
│   └── v1
│       ├── groupversion_info.go
│       ├── guestbook_types.go
│       └── zz_generated.deepcopy.go
├── bin
│   └── controller-gen-v0.15.0
├── cmd
│   └── main.go
├── config
│   ├── crd
│   │   ├── kustomization.yaml
│   │   └── kustomizeconfig.yaml
│   ├── default
│   │   ├── kustomization.yaml
│   │   ├── manager_metrics_patch.yaml
│   │   └── metrics_service.yaml
│   ├── manager
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── prometheus
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac
│   │   ├── guestbook_editor_role.yaml
│   │   ├── guestbook_viewer_role.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── role_binding.yaml
│   │   ├── role.yaml
│   │   └── service_account.yaml
│   └── samples
│       ├── kustomization.yaml
│       └── webapp_v1_guestbook.yaml
├── Dockerfile
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
├── internal
│   └── controller
│       ├── guestbook_controller.go
│       ├── guestbook_controller_test.go
│       └── suite_test.go
├── Makefile
├── PROJECT
├── README.md
└── test
    ├── e2e
    │   ├── e2e_suite_test.go
    │   └── e2e_test.go
    └── utils
        └── utils.go

17 directories, 37 files

安装 CRD

Generate the manifests 生成清单

make manifests

Install CRDs into the Kubernetes cluster using kubectl apply 使用kubectl apply将CRD安装到Kubernetes集群中

make install

在这里插入图片描述

$ k get crd |grep jimmysong.io
guestbooks.webapp.jimmysong.io

启动控制器

make run

在这里插入图片描述

/home/zzyy/project/kubebuilder-demo2/bin/controller-gen-v0.15.0 rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
/home/zzyy/project/kubebuilder-demo2/bin/controller-gen-v0.15.0 object:headerFile="hack/boilerplate.go.txt" paths="./..."
go fmt ./...
go vet ./...
go run ./cmd/main.go
 setup   starting manager
 starting server {"name": "health probe", "addr": "[::]:8081"}
 Starting EventSource    {"controller": "guestbook", "controllerGroup": "webapp.jimmysong.io", "controllerKind": "Guestbook", "source": "kind source: *v1.Guestbook"}
 Starting Controller     {"controller": "guestbook", "controllerGroup": "webapp.jimmysong.io", "controllerKind": "Guestbook"}
 Starting workers        {"controller": "guestbook", "controllerGroup": "webapp.jimmysong.io", "controllerKind": "Guestbook", "worker count": 1}

卸载CRD

make uninstall

构建CRD镜像并部署进k8s

构建镜像并推送至你的镜像仓库

make docker-build docker-push IMG=<some-registry>/<project-name>:tag

指定镜像将controller部署进你的集群

make deploy IMG=<some-registry>/<project-name>:tag

参考资料

kubebuilder 文档 快速入门
K8S中编写自己的CRD及Controller简明指南
使用 kubebuilder 创建 operator 示例
sample-controller
redhat --Kubernetes Deep Dive: Code Generation for CustomResources
深入解析 Kubebuilder:让编写 CRD 变得更简单

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

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

相关文章

​微图在线显示高程为什么与下载结果不一致

之前有客户向我们提出了在线显示的高程值和下载的数据高程值不一致的问题&#xff0c;这里解释一下不一致的原因。 在线显示 在线的情况分成两种&#xff0c;一种是浏览高程数据渲染地图&#xff0c;一种是非高程数据渲染地图&#xff0c;例如高清影像&#xff08;WGS84&…

小小GCD、LCM拿下拿下

目录 最大公约数&#xff08;GCD&#xff09; 最大公约数&#xff08;GCD&#xff09;求解&#xff1a; 一、辗转相除法 二、三目运算符 三、位运算 最大公约数&#xff08;GCD&#xff09;模板&#xff1a; 最大公约数&#xff08;GCD&#xff09;例题&#xff1a; 最…

SprinBoot+Vue酒店管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

安宝特方案 | 医疗AR眼镜,重新定义远程会诊体验

【AR眼镜&#xff1a;重新定义远程会诊体验】 在快速发展的医疗领域&#xff0c;安宝特医疗AR眼镜以其尖端技术和创新功能&#xff0c;引领远程会诊的未来&#xff0c;致力于为为医生和患者带来更高效、精准和无缝的医疗体验。 探索安宝特医疗AR眼镜如何在医疗行业中引领新风潮…

DolphinScheduler应用实战笔记

DolphinScheduler应用实战笔记 一、前言二、DS执行SQL或存储过程二、DS调用DataX同步数据三、DS调用HTTP接口四、DS依赖(DEPENDENT)节点五、DS SPARK 节点六、DS Flink 节点七、DS Flink 节点八、DS SQL 节点九、DS Java程序十、DS Python节点 一、前言 DolphinScheduler&…

Java实现在线聊天室

分为客户端和服务器端两个部分。服务器负责处理客户端之间的通信&#xff0c;客户端则提供一个用户界面来发送和接收消息。 技术栈 Java语言SocketSwingUI 要点 一个服务端&#xff0c;多台客户端每个客户端登录时输入用户名消息格式化&#xff1a;服务器接收到消息时&#…

数据资产管理:真能推动数据要素市场发展还是只是空谈?

数据资产管理&#xff1a;真能推动数据要素市场发展还是只是空谈&#xff1f; 前言数据资产管理 前言 数据已成为企业和组织的重要资产&#xff0c;其价值的充分发挥对于推动业务发展和提升竞争力至关重要。数据资产管理作为一种有效的管理手段&#xff0c;正逐渐受到广泛关注…

Open Source, Open Life 第九届中国开源年会论坛征集正式启动

中国开源年会 COSCon 是业界最具影响力的开源盛会之一&#xff0c;由开源社在2015年首次发起&#xff0c;而今年我们将迎来第九届 COSCon&#xff01; 以其独特定位及日益增加的影响力&#xff0c;COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企…

java基础(1)数据类型,运算符,逻辑控制语句以及基本应用

目录 ​编辑 1.前言 2.正文 2.1数据类型与变量 2.1.1字面常量 2.1.2数据类型 2.1.3变量 2.1.3.1整型 2.1.3.2浮点型 2.1.3.3字符型 2.1.3.4布尔型 2.1.4类型转换与类型提升 2.1.4.1字符串的拼接 2.1.4.2整型转字符串 2.1.4.3字符串转整数 2.2运算符 2.2.1算术运…

小红书笔记数单日突破1.3万,8月全网都被这只猴子刷屏了!

8月20日早上10点&#xff0c;《黑神话&#xff1a;悟空》正式发布后立刻席卷全网&#xff0c;众多玩家在游戏正式发布后火速进入游戏界面&#xff0c;甚至有多家公司宣布放假让员工玩《黑神话悟空》&#xff0c;不论是玩游戏的、还是不玩游戏的&#xff0c;都为之献上巨大的关注…

一个让LLM更具创造力的“超级提示词“

1. “超级提示词” 开源项目简介 Github 上最近开源了一个名为 “超级提示词” (Super Prompt) 的项目&#xff0c;该项目旨在激发大语言模型&#xff08;LLM&#xff09;的创造力和发散思维。通过输入这些提示词&#xff0c;LLM 能够生成更多新颖的想法&#xff0c;对于需要创…

Linux网络:总结协议拓展

1. TCP/IP四层模型总结 2. 网络协议拓展 DNS协议&#xff08;地址解析协议&#xff09; TCP/IP使用IP地址和端口号来确定网络中一台主机的一个程序。 但是这样标定不方便记忆&#xff0c;于是开始引出主机名&#xff08;字符串&#xff09;&#xff0c;使用hosts文件来描述…

Monte Carlo方法解决强化学习问题

本文继续深入探讨蒙特卡罗 (MC)方法。这些方法的特点是能够仅从经验中学习,不需要任何环境模型,这与动态规划(DP)方法形成对比。 这一特性极具吸引力 - 因为在实际应用中,环境模型往往是未知的,或者难以精确建模转移概率。以21点游戏为例:尽管我们完全理解游戏规则,但通过DP方…

智慧教室无纸化同屏方案是否适用RTMP?

智慧教室无纸化方案技术背景 智慧教室无纸化方案是一种基于现代信息技术&#xff0c;旨在通过数字化手段实现教学过程的无纸化、智能化和高效化的解决方案。该方案以学生为中心&#xff0c;强调互动化的数字教学服务&#xff0c;旨在提升教学质量和学习效率&#xff0c;同时减…

SprinBoot+Vue宠物店管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

Comsol 双层薄板夹芯结构声辐射响应

阻尼双层板的声辐射特性可以通过以下原理进行解释&#xff1a; 1. 双层板的振动模态&#xff1a;当双层板受到外力作用时&#xff0c;会发生振动&#xff0c;其振动模态会影响其声辐射特性。在双层板内部&#xff0c;振动模态分为两种类型&#xff1a;弯曲模态和剪切模态。而在…

ADG切换异常

一、问题现象 备库切换主库的过程中&#xff1a; alter database commit to switchover to primary with session shutdown; 有一个进程始终是active状态&#xff0c;导致无法完成切换。 主库已切换成&#xff1a;RECOVERY NEEDED --备用数据库还没有接收到切换请求 SWITC…

(Lane Detection-3)PVALane————OpenLane数据集的SOTA模型

PVALane作为最新的SOTA模型&#xff0c;横空出世&#xff0c;让我们来一起仔细阅读这篇文章 提出问题 上图展示了当前Lane Detection中的主要问题&#xff1a; 受益于3D物体检测的成功&#xff0c;当前的3D车道线检测模型&#xff08;通常通过使用逆透视映射&#xff08;IPM&…

Leetcode 最大子数组和

使用“Kadane’s Algorithm”来解决。 Kadane’s Algorithm 在每个步骤中都保持着一个局部最优解&#xff0c;即以当前元素为结尾的最大子数组和(也就是局部最优解)&#xff0c;并通过比较这些局部最优解和当前的全局最优解来找到最终的全局最优解。 Kadane’s Algorithm的核…

git使用手册

其余内容可以参考洪的学习笔记 一 安装 Linux sudo apt-get install gitWIndows “Git”->“Git Bash” 1.1 配置 分布式版本控制&#xff0c;所有机器自报家门 git config --global user.name "Your Name" git config --global user.email "emailexa…