kubebuilder(3)实现operator

在前面的文章我们已经了解了operator项目的基本结构。现在我们来写一点简单的代码,然后把我们的crd和operator部署到k8s集群中。

需求

这是一个真实的需求,只不过做了简化。

在开发公司自己的paas平台,有一个需求是,用户在发版的时候,只需要在页面上填几个字段,我们在k8s中自动拉起service和deployment等资源,屏蔽k8s的底层技术对上层用户的困扰。

我们这里只要让用户填一下 业务名,镜像地址和副本数。

定义API

修改api目录下的demo_types.go文件,这个文件定义了我们的CRD中spec可用的字段。

注意: json 标签是必需的。为了能够序列化字段,任何你添加的新的字段一定有json标签。

950be6aafc402bc73a08582511d359fd.jpeg

image-20240129171326962type DemoSpec struct {
// +kubebuilder:validation:Required
Image string `json:"image,omitempty"`
// +kubebuilder:validation:Required
SvcName string `json:"svcName,omitempty"`
// +kubebuilder:validation:Required
Replicas *int32 `json:"replicas,omitempty"`
}

然后定义下资源的status

type DemoStatus struct {
Replicas *int32 `json:"replicas,omitempty"`
}

每次修改API定义后,需要执行命令自动重新生成CRD定义代码

# make manifests

c584bfdb71aa0b4d839c00cdf1167445.jpeg

image-20240130112827332

可以看到生成了我们的crd

实现controller

kubebuilder已经很贴心的告诉了我们代码应该写在哪

54354b2d3d2384af053977ec0e75f5df.jpeg

image-20240129172302802

代码流程

根据crd资源创建service和deployment

如果修改ctd中的replicas,同样触发deployment的变更

代码比较长,放在github上了

https://github.com/jedyang/demo/tree/master/kubebuilder

这里先不开发代码也是可以的,先打几行日志,把流程跑通

配置监听

我们写完了Reconcile(),那么什么时候这个Reconcile会得到执行呢?

这就要看SetupWithManager()方法

SetupWithManager方法,就是用于添加我们关心哪些资源的变动。

默认生成的是这样的

func (r *DemoReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&tutorialv1.Demo{}).
Complete(r)
}

表示监听我们自定义的这个tutorialv1.Demo资源。也就是我们在k8s中只要这个crd的变动,就会触发我们的Reconcile()方法

如果修改为

import (
...
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
)
func (r *DemoReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&tutorialv1.Demo{}).
Owns(&corev1.Pod{}).
Owns(&corev1.Service{}).
Owns(&appsv1.Deployment{}).
Complete(r)
}

就是对任何tutorialv1.Demo或Service、Deployment、Pod的变化,我们的Controller都会监听到,并生成事件,触发Reconcile()方法


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

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

相关文章

FFMpeg - macOS build 报错 : xcrun -sdk iphoneos clang ...

文章目录 报错1:xcrun -sdk iphoneos clang is unable to create an executable file报错 2 : error: unknown type name AudioDeviceID; 在 macOS 上使用 https://github.com/kewlbear/FFmpeg-iOS-build-script 脚本,运行 ./build-ffmpeg.sh…

236基于matlab的三维比例导引法仿真

基于matlab的三维比例导引法仿真,可以攻击静止/机动目标。1.三维空间内的比例导引程序,采用龙哥库塔积分法;2.文件名为bili3dnew的.m文件是主函数,执行时需调用目标机动子函数、导引律子函数、数值积分法子函数;3.文件…

模拟LinkedList实现的双向链表

1. 前言 前文我们用java语言实现了无哨兵的单向链表.稍作修改即可实现有哨兵的单向链表.有哨兵的单向链表相较与无哨兵的而言,其对链表的头结点的增删操作更为方便.而在此我们实现了带有头节点和尾节点的双向链表(该头节点和尾节点都不存储有效的数据). 2. 带有头…

统计建模——模型——python为例

统计建模涵盖了众多数学模型和分析方法,这些模型和方法被广泛应用于数据分析、预测、推断、分类、聚类等任务中。下面列举了一些常见的统计建模方法及其具体应用方式: 目录 1.线性回归模型: ----python实现线性回归模型 -------使用NumPy…

计算机网络—网络层

一、网络层的功能 网络层的任务 主要任务是通过路由器实现网络互联,进而实现数据报在各网络之间的传输 “数据报”就是从数据链路层接收的分组好的数据,又叫“IP数据报”或“IP分组” 网络层提供的两种服务 1面向连接的虚电路服务 当两台计算机进行…

阿里云安装Mysql

阿里云安装Mysql 1、下载mysql包,并解压包2、继续解压文件3、拷贝到安装目录4、创建mysql组和用户5、创建mysql数据目录(根目录)6、赋予权限7、加入路径8、配置文件顺序:9、初始化mysql10、启动mysql(结尾加"&…

【C++】---STL容器适配器之queue

【C】---STL容器适配器之queue 一、队列1、队列的性质 二、队列类1、队列的构造2、empty()3、push()4、pop()5、size()6、front()7、back() 三、队列的模拟实现1、头文件(底层:deque)2、测试文件3、底层:list 一、队列 1、队列的…

VulnHub靶机 DC-系列合计 通关攻略手册

VulnHub靶机 DC靶机系列 通关手册 DC-1:Vulnhub靶机 DC-1 渗透详细过程 DC-2:Vulnhub靶机 DC-2 渗透详细过程 DC-3:Vulnhub 靶机 DC-3 实战系列 渗透详细过程 DC-4:VulnHub系列 DC-4靶机 渗透详细过程 DC-5:VulnH…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类(1)AbstractCollection(2)AbstractListAbstractSequentialList(子类) 其它接口RandomAccess【java.util】Cloneable【j…

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址:Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本,作为经典分布式订阅、发布的消息传输中间件,kafka在实时数据处理、消息队列、流处理等领域具有广泛…

【NTN 卫星通信】NTN应该使用FDD还是TDD双工模式

1 概述 现在主流的商用地面通信系统一般都支持FDD和TDD两种模式,实用于不同的频段。那么卫星通信也需要有这两种模式吗? 2 NTN 双工模式分析 在考虑TDD模式时,需要设置保护时间,以防止终端同时发射和接收。该保护时间直接取决于终…

容器安全-镜像扫描

前言 容器镜像安全是云原生应用交付安全的重要一环,对上传的容器镜像进行及时安全扫描,并基于扫描结果选择阻断应用部署,可有效降低生产环境漏洞风险。容器安全面临的风险有:镜像风险、镜像仓库风险、编排工具风险,小…

【ZZULIOJ】1085: 求奇数的乘积(多实例测试)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 给你n个整数,求他们中所有奇数的乘积 输入 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接…

计算机网络第十七天(第一天的答案)

网络互连复习笔记 1、ospf三张表:路由表、邻居表、链路状态数据库 2、组播地址的含义: 224.0.0.5所有的ospf路由器 224.0.0.6所有的ospfDR路由器 3、ospf报文类型: Hello(组播) 用于发现直连链路上的ospf邻居和维护ospf邻居…

Python_AI库 Matplotlib的应用简例:绘制与保存折线图

本文默认读者已具备以下技能: 熟悉Python基础语法,以自行阅读python代码块熟悉Vscode或其它编辑工具的应用 在数据可视化领域,Matplotlib无疑是一个强大的工具。它允许我们创建各种静态、动态、交互式的可视化图形,帮助我们更好…

python中如何用matplotlib写雷达图

#代码 import numpy as np # import matplotlib as plt # from matplotlib import pyplot as plt import matplotlib.pyplot as pltplt.rcParams[font.sans-serif].insert(0, SimHei) plt.rcParams[axes.unicode_minus] Falselabels np.array([速度, 力量, 经验, 防守, 发球…

JET毛选学习笔记:如何利用《矛盾论》从做实验到做科研vol. 1

一、前情回顾 上一轮讲了基于《实践论》的方法论学习一门实验,从获取间接经验到实践,总结,再实践,再总结,反反复复无穷尽也,不知道大家悟出了多少呢?其实,有一个概念我刻意避开了没…

新科技辅助器具赋能视障生活:让盲人出行融入日常

随着科技日新月异的发展,一款名为蝙蝠避障专为改善盲人日常生活的盲人日常生活辅助器具应运而生,它通过巧妙整合实时避障与拍照识别功能,成功改变了盲人朋友们的生活格局,为他们提供了更为便捷、高效的生活体验。 这款非同…

注意力机制:SENet详解

SENet(Squeeze-and-Excitation Networks)是2017年提出的一种经典的通道注意力机制,这种注意力可以让网络更加专注于一些重要的featuremap,它通过对特征通道间的相关性进行建模,把重要的特征图进行强化来提升模型的性能…

【Redis 开发】Redisson

Redisson RedissonRedisson分布式锁Redisson可重入锁Redission解决超时释放的问题Redission解决锁的判断一次性问题Redission分布式锁主从一致性问题 Redisson Redisson是一个在Redis的基础上实现的java驻内存数据网格,就是提供了一系列的分布式的java对象 官方地址…