精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇帶給你KubeBuilder 簡明教程

開源
這篇文章主要講解了 kubebuilder的安裝使用方式,以及涉及到的一些簡單的概念,項目目錄結構的說明.

[[398025]]

Operator 概述

Operator 是 Kubernetes 的擴展軟件,它利用 定制資源 管理應用及其組件。Operator 遵循 Kubernetes 的理念,特別是在控制器 方面[^1]

k8s 的是一個高度自動化的系統,其中涵蓋了常見應用程序所需的大部分功能,例如服務發現,負載均衡,HPA等等,這些功能是由 k8s 自帶的一些控制器實現的,但是需求總是永無止境的,當我們有類似需求但是 k8s 又無法很好的滿足的時候我們就可以使用 Operator 和 Custome Resource(自定義資源)來達到類似的效果。

例如常見的需求就有部署一個數據庫,節點自動化運維,日志采集組件配置等等

從 Operator 理念的提出到現在已經有了很多工具可以幫助我們快速低成本的開發,其中最常用的就是 CoreOS 開源的 operator-sdk[^3]和 k8s sig 小組維護的 kubebuilder[^2],我們這個系列選用 kubebuilder。

開始之前我們先了解兩個馬上就會涉及到的核心概念

GV & GVK & GVR

GV: Api Group & Version

  • API Group 是相關 API 功能的集合
  • 每個 Group 擁有一或多個 Versions

GVK: Group Version Kind

  • 每個 GV 都包含 N 個 api 類型,稱之為 Kinds,不同 Version 同一個 Kinds 可能不同

GVR: Group Version Resource

  • Resource 是 Kind 的對象標識,一般來 Kind 和 Resource 是 1:1 的,但是有時候存在 1:n 的關系,不過對于 Operator 來說都是 1:1 的關系

舉個🌰,我們在 k8s 中的 yaml 文件都有下面這么兩行,例如上篇文章我們部署的 nginx deployment

  1. apiVersion: apps/v1 # 這個是 GV,G 是 apps,V 是 v1 
  2. kind: Deployment    # 這個就是 Kind 
  3. sepc:               # 加上下放的 spec 就是 Resource了 
  4.   ... 

根據 GVK K8s 就能找到你到底要創建什么類型的資源,根據你定義的 Spec 創建好資源之后就成為了 Resource,也就是 GVR。GVK/GVR 就是 K8s 資源的坐標,是我們創建/刪除/修改/讀取資源的基礎[^4]。

KubeBuilder 簡明教程

安裝

訪問官方倉庫下載已經編譯好的二進制文件: Releases · kubernetes-sigs/kubebuilder (github.com)

  • 本文編寫的時候 kubebuilder 已經推出了 v3.0.0-rc.0 版本,所以為了避免剛寫完新版就已經 release 了的尷尬情況,本文直接使用的是 3.0 版本
  • 下載好了之后記得將對應文件加入 PATH 當中

安裝成功之后使用 kubebuilder version 可以查看安裝的版本信息

  1. ❯ kubebuilder version 
  2. Version: main.version{KubeBuilderVersion:"3.0.0-rc.0", KubernetesVendor:"1.19.2", GitCommit:"90fe4124c4c6965c6bfac63339888956952cda90", BuildDate:"2021-04-08T17:36:28Z", GoOs:"linux", GoArch:"amd64"

項目初始化

先創建一個空文件夾,然后在文件夾內執行下方命令

  1. kubebuilder init --domain lailin.xyz --repo github.com/mohuishou/blog-code/k8s-operator/02-kubebuilder 
  • –-domain lailin.xyz 我們的項目的域名
  • --repo xxx 是倉庫地址,同時也是 go mode中的repo地址

如果你 golang 版本過低或者過高都有可能出現下方的錯誤信息,我這里是因為使用的 1.16 版本太高了

  1. 2021/04/25 20:47:14 failed to initialize project: unable to run pre-scaffold tasks of "base.go.kubebuilder.io/v3": go version 'go1.16' is incompatible because 'requires 1.13 <= version < 1.16'. You can skip this check using the --skip-go-version-check flag 

這種情況下可以添加 --skip-go-version-check 忽略這個錯誤,但是還是建議使用官方推薦的版本

  1. kubebuilder init --domain lailin.xyz --repo github.com/mohuishou/blog-code/k8s-operator/02-kubebuilder --skip-go-version-check 

項目目錄

  1. ├── Dockerfile 
  2. ├── Makefile # 這里定義了很多腳本命令,例如運行測試,開始執行等 
  3. ├── PROJECT  # 這里是 kubebuilder 的一些元數據信息 
  4. ├── config 
  5. │   ├── default    # 一些默認配置 
  6. │   ├── manager    # 部署 crd 所需的 yaml 
  7. │   ├── prometheus # 監控指標數據采集配置 
  8. │   └── rbac # 部署所需的 rbac 授權 yaml 
  9. ├── go.mod 
  10. ├── go.sum 
  11. ├── hack 
  12. │   └── boilerplate.go.txt 
  13. └── main.go 

創建 api

  1. kubebuilder create api --group apps --version v1 --kind Application 

執行之后我們可以發現項目結構發生了一些變化

  1. ├── api 
  2. │   └── v1 
  3. │       ├── application_types.go # 這里是定義 spec 的地方 
  4. │       ├── groupversion_info.go # GV 的定義,一般無需修改 
  5. │       └── zz_generated.deepcopy.go 
  6. ├── config 
  7. │   ├── crd # 自動生成的 crd 文件,不用修改這里,只需要修改了 v1 中的 go 文件之后執行 make generate 即可 
  8. │   ├── default 
  9. │   ├── manager 
  10. │   ├── prometheus 
  11. │   ├── rbac 
  12. │   └── samples # 這里是 crd 示例文件,可以用來部署到集群當中 
  13. ├── controllers 
  14. │   ├── application_controller.go # 在這里實現 controller 的邏輯 
  15. │   └── suite_test.go # 這里寫測試 

實現 Controller

定義 CR

  1. // api/v1/application_types.go 
  2.  
  3. // ApplicationSpec defines the desired state of Application 
  4. type ApplicationSpec struct { 
  5.  // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster 
  6.  // Important: Run "make" to regenerate code after modifying this file 
  7.  
  8.  // Product 該應用所屬的產品 
  9.  Product string `json:"product,omitempty"

修改之后我們執行一下 make manifests generate 可以發現已經生成了相關的字段,并且代碼中的字段注釋也就是 yaml 文件中的注釋

  1. # config/crd/bases/apps.lailin.xyz_applications.yaml 
  2. ...... 
  3.    properties: 
  4.               product: 
  5.                 description: Product 該應用所屬的產品 
  6.                 type: string 
  7. ...... 

實現 controller

kubebuilder 已經幫我們實現了 Operator 所需的大部分邏輯,我們只需要在 Reconcile 中實現業務邏輯就行了

  1. // controllers/application_controller.go 
  2.  
  3. func (r *ApplicationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { 
  4.  _ = r.Log.WithValues("application", req.NamespacedName) 
  5.  
  6.  r.Log.Info("app changed""ns", req.Namespace) 
  7.  
  8.  return ctrl.Result{}, nil 

邏輯修改好之后,我們先執行 make install 安裝 CRD,然后執行 make run運行 controller

  1. go run ./main.go 
  2. 2021-04-25T21:55:55.578+0800    INFO    controller-runtime.metrics     metrics server is starting to listen     {"addr"":8080"
  3. 2021-04-25T21:55:55.579+0800    INFO    setup   starting manager 
  4. 2021-04-25T21:55:55.579+0800    INFO    controller-runtime.manager     starting metrics server  {"path""/metrics"
  5. 2021-04-25T21:55:55.579+0800    INFO    controller-runtime.manager.controller.application       Starting EventSource    {"reconciler group""apps.lailin.xyz""reconciler kind""Application""source""kind source: /, Kind="
  6. 2021-04-25T21:55:55.680+0800    INFO    controller-runtime.manager.controller.application       Starting Controller     {"reconciler group""apps.lailin.xyz""reconciler kind""Application"
  7. 2021-04-25T21:55:55.680+0800    INFO    controller-runtime.manager.controller.application       Starting workers        {"reconciler group""apps.lailin.xyz""reconciler kind""Application""worker count": 1} 

然后我們部署一個測試的 crd kubectl apply -f config/samples/apps_v1_application.yaml

  1. apiVersion: apps.lailin.xyz/v1 
  2. kind: Application 
  3. metadata: 
  4.   name: application-sample 
  5. spec: 
  6.   # Add fields here 
  7.   product: test 

然后可以看到之前寫的日志邏輯已經觸發

  1. 2021-04-25T21:57:12.618+0800    INFO    controllers.Application app changed     {"ns""default"

Kubebuilder 注釋

在生成的代碼當中我們可以看到很多 //+kubebuilder:xxx 開頭的注釋,對 Go 比較熟悉的同學應該知道這些注釋是給對應的代碼生成器服務的,在 Go 中有一個比較常用的套路就是利用 go gennerate生成對應的 go 代碼。

kubebuilder 使用 controller-gen 生成代碼和對應的 yaml 文件,這其中主要包含 CRD 生成、驗證、處理還有 WebHook 的 RBAC 的生成功能,下面我簡單介紹一下,完整版可以看 kubebuilder 的官方文檔

CRD 生成

  • //+kubebuilder:subresource:status 開啟 status 子資源,添加這個注釋之后就可以對 status進行更新操作了
  • //+groupName=nodes.lailin.xyz 指定 groupname
  • //+kubebuilder:printcolumn 為 kubectl get xxx 添加一列,這個挺有用的
  • ......

CRD 驗證,利用這個功能,我們只需要添加一些注釋,就給可以完成大部分需要校驗的功能

  • //+kubebuilder:default:= 給字段設置默認值
  • //+kubebuilder:validation:Pattern:=string 使用正則驗證字段
  • ......

Webhook

  • //+kubebuilder:webhook 用于指定 webhook 如何生成,例如我們可以指定只監聽 Update 事件的 webhook

RBAC 用于生成 rbac 的權限

  • //+kubebuilder:rbac

總結

這篇文章主要講解了 kubebuilder的安裝使用方式,以及涉及到的一些簡單的概念,項目目錄結構的說明,下一篇文章我們就一起來實現一個真實的 Operator 需求

參考文獻

[^1]: Operator 模式 | Kubernetes:

https://kubernetes.io/zh/docs/concepts/extend-kubernetes/operator/

[^2]: kubebuilder 官方文檔, 這個是 master 分支的文檔,待 3.0 發布后去掉 master 即可:

https://master.book.kubebuilder.io/quick-start.html

[^3]: operator-sdk:

https://sdk.operatorframework.io/

[^4]: 深入解析 Kubebuilder:讓編寫 CRD 變得更簡單:

https://developer.aliyun.com/article/719215

 

責任編輯:姜華 來源: mohuishou
相關推薦

2021-05-11 09:31:31

kustomizeoperator kubernetes

2022-07-06 07:57:37

Zookeeper分布式服務框架

2021-07-12 06:11:14

SkyWalking 儀表板UI篇

2021-09-18 07:43:33

ApolloJava配置中心

2021-10-14 09:58:24

消息中間件ActiveMQ Java

2022-04-29 14:38:49

class文件結構分析

2021-07-21 09:48:20

etcd-wal模塊解析數據庫

2021-03-12 09:21:31

MySQL數據庫邏輯架構

2023-03-29 07:45:58

VS編輯區編程工具

2021-04-14 14:16:58

HttpHttp協議網絡協議

2024-06-13 08:34:48

2022-02-17 08:53:38

ElasticSea集群部署

2022-03-22 09:09:17

HookReact前端

2021-06-21 14:36:46

Vite 前端工程化工具

2021-04-01 10:51:55

MySQL鎖機制數據庫

2021-04-08 11:00:56

CountDownLaJava進階開發

2021-01-28 08:55:48

Elasticsear數據庫數據存儲

2021-07-08 07:30:13

Webpack 前端Tree shakin

2021-05-08 08:36:40

ObjectString前端

2023-03-13 09:31:04

點贊
收藏

51CTO技術棧公眾號

欧美多人猛交狂配| 欧美精品第三页| 欧美一区,二区| 先锋影音国产一区| 中文国产成人精品| 少妇熟女视频一区二区三区| 亚洲精品永久免费视频| 国产精品伦理在线| 国产精品免费一区二区| 中文字幕+乱码+中文字幕明步| 欧美大人香蕉在线| 亚洲国产女人aaa毛片在线| 日韩中文字幕三区| av在线麻豆| 久久蜜桃av一区精品变态类天堂 | 在线人成日本视频| 亚洲欧洲三级电影| 久久综合给合久久狠狠色| 婷婷激情综合五月天| 久久99亚洲网美利坚合众国| 国产在线一区二区综合免费视频| 欧美日韩高清区| 天堂在线中文视频| 欧美交a欧美精品喷水| 欧美精品一二三四| www.欧美日本| 日韩电影毛片| 亚洲国产aⅴ成人精品无吗| 一区二区不卡视频| 国产天堂在线| 91丨九色丨黑人外教| 国产福利不卡| 99精品视频在线播放免费| 日本视频免费一区| 青草热久免费精品视频 | 欧美丝袜一区二区| 成人av在线播放观看| 免费在线观看av| 丝袜国产日韩另类美女| 久久久久久久久久久免费| 黄色激情小视频| 在线不卡一区| 欧洲精品在线观看| 最新精品视频| 国产三级在线免费观看| 91麻豆精东视频| 久久精品国产第一区二区三区最新章节| 国产黄a三级三级三级| 韩国一区二区三区| 成人精品网站在线观看| 在线观看中文字幕码| 免费在线看成人av| 国产精品久久一区| 久久嫩草捆绑紧缚| 成人午夜av| 在线电影av不卡网址| 亚洲国产天堂av| 精品不卡一区| 中文字幕亚洲一区二区三区五十路| 久久久久久久久久久久| 国产一区二区观看| 日韩中文在线中文网在线观看| 人人人妻人人澡人人爽欧美一区| 国产欧美高清视频在线| 一区二区亚洲精品国产| 黑人と日本人の交わりビデオ| 欧美一区二区三区高清视频| 中文字幕亚洲欧美日韩高清| 久久久99999| 欧美99久久| 欧美国产中文字幕| 中文幕无线码中文字蜜桃| 欧美日韩破处| 亚洲一级免费视频| 91人人澡人人爽| 精品中文视频| 精品国产乱码久久久久久蜜臀| 国产日韩一区二区在线观看| 456亚洲精品成人影院| 欧美视频一区在线| 天天色天天综合网| 成人av资源网址| 亚洲欧美中文日韩v在线观看| 少妇视频在线播放| 欧美国产精品| 青青青国产精品一区二区| 五月激情丁香网| 国产伦理精品不卡| 精品伦精品一区二区三区视频| 免费在线黄色影片| 综合在线观看色| 久久久久久久久久网| 99精品国自产在线| 精品欧美乱码久久久久久| av直播在线观看| 99久久久久| 91精品国产网站| 欧美三级黄色大片| 欧洲激情综合| 欧美日韩国产成人高清视频| 美日韩一二三区| 精品制服美女丁香| 精品蜜桃一区二区三区| 午夜免费视频在线国产| 亚洲电影第三页| 欧美wwwwwww| 欧美绝顶高潮抽搐喷水合集| 日韩网站免费观看高清| 亚洲免费激情视频| 麻豆久久一区二区| 久久大香伊蕉在人线观看热2| 婷婷视频在线| 欧美日韩在线影院| 欧美日韩一区二区区别是什么 | 欧美成人video| 男人的天堂官网| 亚洲精品国产日韩| 亚洲一区二区三区四区视频| 国产高清视频在线播放| 亚洲成a人v欧美综合天堂| 亚洲欧美自偷自拍另类| 亚洲区小说区图片区qvod按摩| 超碰日本道色综合久久综合| 国产又粗又猛又爽又| 不卡的电视剧免费网站有什么| 亚洲在线不卡| 日韩成人亚洲| 日韩精品久久久久| 亚洲一区 视频| 国产一区二区三区国产| 亚洲制服中文| 日本肉肉一区| 欧美三级三级三级| 国产精品300页| 激情久久中文字幕| 91入口在线观看| 成人免费在线| 91 com成人网| 四虎成人在线播放| 久久精品国产www456c0m| 国产v综合ⅴ日韩v欧美大片| 手机福利小视频在线播放| 久久久综合精品| 妞干网在线视频观看| 北条麻妃在线一区二区免费播放| 久久精品久久久久久| 在线观看xxxx| 国产精品美女久久久久久2018| 激情六月丁香婷婷| 国产精品一区二区99| 日本亚洲欧美成人| 国产一区精品| 在线观看日韩国产| 久久午夜精品视频| 麻豆91在线看| 国产精品无码乱伦| 国产一区二区三区亚洲综合| 久久国产精品久久精品| 北条麻妃一二三区| 亚洲福利视频导航| 在线精品一区二区三区| 国产精品毛片一区二区三区| 欧美高清性xxxxhd| av在线不卡精品| 色婷婷av一区二区三区在线观看| 在线免费观看中文字幕| 亚洲精品网站在线观看| 国产一精品一aⅴ一免费| 亚洲三级网站| 日韩欧美一区二区三区久久婷婷| 国产盗摄在线观看| 日韩美一区二区三区| 国产黄色片视频| 91在线小视频| 国产精品久久a| 一区二区国产在线| 国产一区二区无遮挡| 成人在线高清视频| 亚洲国产精品视频| theav精尽人亡av| 日本伊人午夜精品| 欧美一级免费在线观看| 91久久偷偷做嫩草影院电| 久久久亚洲影院| 你懂的在线免费观看| 欧美精品亚洲一区二区在线播放| 久久久久黄色片| 久久午夜色播影院免费高清| 欧美婷婷精品激情| 欧美午夜电影在线观看 | 97av在线视频| 在线免费av网站| 亚洲精品一区二区三区香蕉| 免费黄色小视频在线观看| 中文字幕亚洲电影| 在线免费观看污视频| 久久精品久久综合| cao在线观看| 日本欧美国产| 国外成人免费视频| 91亚洲精品在看在线观看高清| 韩国三级电影久久久久久| 成人在线观看免费| 日韩精品免费在线播放| 国产欧美久久久| 色婷婷国产精品综合在线观看| 欧美精品久久久久久久久46p| 99re这里只有精品6| www.51色.com| 日韩精品一级二级| 成人午夜免费在线| 91精品动漫在线观看| 欧美色欧美亚洲另类七区| 日韩一区二区三区精品| 国产精品女人网站| 不卡av播放| 久久久久久综合网天天| 快射av在线播放一区| 亚洲日本aⅴ片在线观看香蕉| 国内老熟妇对白hdxxxx| 欧美视频在线观看一区| 日韩在线 中文字幕| 五月天丁香久久| 玖玖爱免费视频| 亚洲欧美综合网| 国产123在线| 久久看人人爽人人| 亚洲精品理论片| 99视频精品全部免费在线| 性色av浪潮av| 国产一区二区三区香蕉 | 国产成人精品一区二区三区免费| 午夜精品蜜臀一区二区三区免费| 51xtv成人影院| 久久精品中文字幕| 午夜小视频在线| 在线视频精品一| 成人午夜在线观看视频| 亚洲性视频网站| 黄色片在线免费看| 亚洲欧美国产一区二区三区| 无码精品黑人一区二区三区| 欧美成人高清电影在线| 亚洲AV无码精品自拍| 日韩欧美国产成人一区二区| 国产极品久久久| 日韩欧美国产一区二区三区| 国产激情视频在线播放| 日韩精品一区国产麻豆| 亚洲精品视频91| 亚洲大胆人体在线| 天堂在线观看视频| 日韩av资源在线播放| 丝袜+亚洲+另类+欧美+变态| 亚洲四色影视在线观看| 国产乱理伦片a级在线观看| 国产一区二区三区视频在线观看| 国产有码在线| 久久精品久久精品亚洲人| 国产视频中文字幕在线观看| 九九久久国产精品| 国产美女高潮在线观看| 欧美国产在线电影| 日韩欧美精品一区二区三区| 日本精品性网站在线观看| 3d欧美精品动漫xxxx无尽| 国产精品日韩久久久久| 成人免费91| 国产精品18毛片一区二区| 清纯唯美亚洲经典中文字幕| 欧美性bbwbbwbbwhd| 99久久夜色精品国产亚洲狼 | 美女被到爽高潮视频| 国产精品你懂的| 久久久全国免费视频| 天天影视涩香欲综合网| 成年人视频免费| 日韩一区二区在线观看视频 | av在线综合网| av电影网站在线观看| 国产精品国产三级国产aⅴ无密码| 波多野结衣网页| 国产精品一区二区黑丝| 捆绑凌虐一区二区三区| 国产日韩精品一区| 五月天激情丁香| 精品久久久在线观看| 在线观看免费视频a| 欧美sm极限捆绑bd| 国产三级在线| 欧美老少配视频| 波多野结衣亚洲一二三| 亚洲综合日韩在线| 夜夜躁狠狠躁日日躁2021日韩| 国产福利片一区二区| 亚洲欧美日韩视频二区| 免费网站在线观看黄| 97精品国产97久久久久久久久久久久| 国产不卡在线观看视频| 亚洲成av人影院| 国产精品伊人久久| 亚洲女人天堂成人av在线| 成人video亚洲精品| 欧美在线性视频| 91久久偷偷做嫩草影院电| 青娱乐一区二区| 红桃视频国产精品| 中文字幕 91| 91片在线免费观看| 国产一级特黄a高潮片| 欧美三级日韩在线| 免费播放片a高清在线观看| 欧美第一淫aaasss性| 狠狠久久综合| 欧美日韩三区四区| 国产精品sm| 国产精品久久久久久久99| 国产亚洲一区二区三区四区 | 亚洲永久免费观看| 九九综合在线| 日韩欧美视频网站| 福利视频网站一区二区三区| 乳色吐息在线观看| 国产精品麻豆一区二区| 国产精品久免费的黄网站| 欧美日韩精品二区| www.com欧美| 久久影视电视剧免费网站清宫辞电视 | 久久精品夜夜夜夜夜久久| 欧美精品高清| 女同一区二区| 午夜一区不卡| 在线观看av中文字幕| 亚洲国产va精品久久久不卡综合| 国产成人精品毛片| 久久久国产精品视频| 日韩一区二区三区四区五区| 亚洲成色www久久网站| 日韩成人午夜精品| 一区二区精品免费| 欧美午夜xxx| 男女视频在线观看免费| 欧美综合国产精品久久丁香| 亚洲人成网www| 日韩av在线综合| 久久精品夜色噜噜亚洲aⅴ| 中文字幕第15页| 日韩精品免费在线视频观看| 亚洲欧美小说色综合小说一区| 精品亚洲一区二区三区四区五区高| 激情欧美一区二区三区| 美女扒开腿免费视频| 亚洲一区二区三区视频在线播放| 国产刺激高潮av| 96精品视频在线| 国模精品一区| 亚洲老女人av| 亚洲三级在线看| 男人的天堂一区二区| 亚洲成人av片| 成人av三级| 日本欧美精品久久久| 免费人成在线不卡| 91插插插插插插| 精品日韩av一区二区| 老牛影视精品| 日产精品久久久一区二区| 蜜臂av日日欢夜夜爽一区| 欧美手机在线观看| 亚洲精品一区二区三区香蕉| 正在播放日韩精品| 日韩精品大片| 韩日av一区二区| 欧美日韩精品区| 在线日韩日本国产亚洲| 欧美电影院免费观看| 成人网站免费观看入口| 久久久国产精品麻豆| 国产又大又长又粗| 欧美激情区在线播放| 国内精品久久久久久久影视简单| 手机看片一级片| 亚洲第一激情av| 成人激情电影在线看| 91九色视频在线观看| 亚洲欧美视频| 免费高清在线观看电视| 亚洲精品wwww| 综合久草视频| 日本免费黄视频| 自拍偷拍国产亚洲| 视频国产一区二区三区| 91久久综合亚洲鲁鲁五月天| 亚洲久久视频| 婷婷激情四射网| 亚洲欧美国内爽妇网| 中文字幕日韩高清在线| 久热免费在线观看| 亚洲一区二区三区中文字幕在线 | 久久精品夜夜夜夜夜久久|