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.pswp.cn/diannao/81602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81602.shtml
英文地址,請注明出處:http://en.pswp.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…