当前位置: 首页 > news >正文

海纳企业网站建设模板第一营销网

海纳企业网站建设模板,第一营销网,纳税服务平台,全国室内设计学校目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式,而Manager可以用来管理Controller、Admission Webhook,包括访问资源对…

目录

基本结构

注入CRD


基本结构

首先下载相应的go pkg

go get -u sigs.k8s.io/controller-runtime

接下来需要创建控制器和Manager

Operator的本质是一个可重入的队列编程模式,而Manager可以用来管理Controller、Admission Webhook,包括访问资源对象的client、cache、scheme、提供了一个简单的依赖注入机制、优雅关闭的信号处理机制等。

 参见官方文档中的示例代码

opsController.go

package kubeimport ("context""sigs.k8s.io/controller-runtime/pkg/client""sigs.k8s.io/controller-runtime/pkg/reconcile"
)type OpsController struct {client.Client
}func NewOpsController() *OpsController {return &OpsController{}
}func (a *OpsController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {return reconcile.Result{}, nil
}func (a *OpsController) InjectClient(c client.Client) error {a.Client = creturn nil
}

先监听官方资源,比如Ingress(后续需要在Manager中指定),因此将调谐函数补全为

func (a *OpsController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {resource := &v1.Ingress{}a.Client.Get(ctx, req.NamespacedName, resource)fmt.Println(resource)return reconcile.Result{}, nil
}

当有一个新的Ingress对象被提交到Apiserver,都会将整个结构打印在控制台上。

package kubeimport (v1 "k8s.io/api/networking/v1""os""sigs.k8s.io/controller-runtime/pkg/builder""sigs.k8s.io/controller-runtime/pkg/client/config"logf "sigs.k8s.io/controller-runtime/pkg/log""sigs.k8s.io/controller-runtime/pkg/log/zap""sigs.k8s.io/controller-runtime/pkg/manager""sigs.k8s.io/controller-runtime/pkg/manager/signals"
)func InitManager() {logf.SetLogger(zap.New())var log = logf.Log.WithName("builder-examples")mgr, err := manager.New(config.GetConfigOrDie(), manager.Options{})if err != nil {log.Error(err, "could not create manager")os.Exit(1)}err = builder.ControllerManagedBy(mgr).  // Create the ControllerManagedByFor(&v1.Ingress{}). // ReplicaSet is the Application APIComplete(NewOpsController())if err != nil {log.Error(err, "could not create controller")os.Exit(1)}if err := mgr.Start(signals.SetupSignalHandler()); err != nil {log.Error(err, "could not start manager")os.Exit(1)}
}

在这段代码中,将Ingress的指挥权分配给了刚才创建的Controller(可以同时被多个Controller管理),并且启动Manager,这里其实也是operator的入口函数。

随便提交一个Ingress对象,控制台输出打印,结束。

至此,我们完成了一个Operator最基本的调用过程。

注入CRD

Operator=CRD+Controller+Webhook

在实际的环境中,往往需要高度定制的资源,来完成复杂的流程控制和预期导向。

所以,这一小节就来生成CRD以及完成对CR的监听和控制。

同样是在源码中,可以发现一段示例代码,就是上述实现的一个demo。

其中,完成了对CRD的申明,深拷贝,和对外暴露的注册函数。

Kubernetes官方发布的代码生成脚手架code-generator中也有对此的一段实现代码。

根据这段demo,需要填入CRD的一些预设字段,用来创建Manager监听对象以及Controller在调用client-go时的反序列化操作。

在启动Manager之前,需要将CRD注册到Scheme中去,并且加入对CRD的控制与分配控制器。

	err = v1.AddToScheme(mgr.GetScheme())if err != nil {log.Error(err, "could not register scheme")}err = builder.ControllerManagedBy(mgr). // Create the ControllerManagedByFor(&v1.Operation{}).     // ReplicaSet is the Application APIComplete(NewOpsController())if err != nil {log.Error(err, "could not create controller")os.Exit(1)}

修改调谐函数,对触发的对象打印到控制台。

func (a *OpsController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {resource := &v1.Operation{}err := a.Client.Get(ctx, req.NamespacedName, resource)if err != nil {return reconcile.Result{}, err}fmt.Println(resource)return reconcile.Result{}, nil
}

参考官方文档 ,需要编辑一个yaml并应用,这里同样是进行字段的申明,主要是将对象提交到Apiserver中去。

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:# 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'name: operations.extensions.octoboy.com
spec:# 组名称,用于 REST API: /apis/<组>/<版本>group: extensions.octoboy.com# 列举此 CustomResourceDefinition 所支持的版本versions:- name: v1# 每个版本都可以通过 served 标志来独立启用或禁止served: true# 其中一个且只有一个版本必需被标记为存储版本storage: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:action:type: string# 可以是 Namespaced 或 Clusterscope: Namespacednames:# 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>plural: operations# 名称的单数形式,作为命令行使用时和显示时的别名singular: operation# kind 通常是单数形式的驼峰命名(CamelCased)形式。你的资源清单会使用这一形式。kind: Operation# shortNames 允许你在命令行使用较短的字符串来匹配资源shortNames:- ops

 然后启动我们的Operator,并简单编写一个对象yaml。

apiVersion: extensions.octoboy.com/v1
kind: Operation
metadata:name: myopsnamespace: default
spec:action: "restart"

 同时应用,观察到控制台输出

&{{Operation extensions.octoboy.com/v1} {myops  default  1344e481-4db4-461d-8d8d-b07713a76236 3927679 1 2023-03-07 14:21:09 +0800 CST <nil> <nil> map[] map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"extensions.octoboy.com/v1","kind":"Operation","metadata":{"annotations":{},"name":"myops","namespace":"default"},"spec":{"action":"restart"}}
] [] [] [{kubectl-client-side-apply Update extensions.octoboy.com/v1 2023-03-07 14:21:09 +0800 CST FieldsV1 {"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:spec":{".":{},"f:action":{}}} }]} {} {0001-01-01 00:00:00 +0000 UTC}}

至此,通过controller-runtime搭建起了一个简易的Operator控制器。


文章转载自:
http://dinncoconsolable.ssfq.cn
http://dinncoworkpaper.ssfq.cn
http://dinncononviable.ssfq.cn
http://dinncoimari.ssfq.cn
http://dinncosuperweapon.ssfq.cn
http://dinncosomasteroid.ssfq.cn
http://dinncoschutzstaffel.ssfq.cn
http://dinncoauguste.ssfq.cn
http://dinncofortuitous.ssfq.cn
http://dinncopinpoint.ssfq.cn
http://dinncosemisweet.ssfq.cn
http://dinncoitem.ssfq.cn
http://dinncorelegate.ssfq.cn
http://dinncoconsideration.ssfq.cn
http://dinncoautoflare.ssfq.cn
http://dinncoqualifiable.ssfq.cn
http://dinncosquirrelly.ssfq.cn
http://dinncolightheaded.ssfq.cn
http://dinncoretentive.ssfq.cn
http://dinncolst.ssfq.cn
http://dinncofunkia.ssfq.cn
http://dinncolegitimism.ssfq.cn
http://dinncofrcm.ssfq.cn
http://dinncoophthalmic.ssfq.cn
http://dinncoelenchus.ssfq.cn
http://dinncoprogesterone.ssfq.cn
http://dinncoflagella.ssfq.cn
http://dinncoanagoge.ssfq.cn
http://dinncothenardite.ssfq.cn
http://dinncosocialite.ssfq.cn
http://dinncobumkin.ssfq.cn
http://dinncohumidity.ssfq.cn
http://dinncodat.ssfq.cn
http://dinncopantheist.ssfq.cn
http://dinncosuperannuation.ssfq.cn
http://dinncofeebie.ssfq.cn
http://dinncoinscriptionless.ssfq.cn
http://dinncomicrotechnique.ssfq.cn
http://dinncosingular.ssfq.cn
http://dinncowent.ssfq.cn
http://dinncobarefooted.ssfq.cn
http://dinncomoonset.ssfq.cn
http://dinncocruise.ssfq.cn
http://dinncoradiolocator.ssfq.cn
http://dinncooximeter.ssfq.cn
http://dinncomustiness.ssfq.cn
http://dinncoheaps.ssfq.cn
http://dinnconeurocoele.ssfq.cn
http://dinncosaidst.ssfq.cn
http://dinncovistula.ssfq.cn
http://dinncovega.ssfq.cn
http://dinncoduroc.ssfq.cn
http://dinncoenosis.ssfq.cn
http://dinncohyperlipidemia.ssfq.cn
http://dinncoclodhopper.ssfq.cn
http://dinncoassertorily.ssfq.cn
http://dinncopostnatal.ssfq.cn
http://dinncosorn.ssfq.cn
http://dinncoadditament.ssfq.cn
http://dinncoresurgence.ssfq.cn
http://dinncoapprehend.ssfq.cn
http://dinncokaryotype.ssfq.cn
http://dinncoaerographer.ssfq.cn
http://dinncoreargue.ssfq.cn
http://dinncogiardiasis.ssfq.cn
http://dinncospinneret.ssfq.cn
http://dinncofatshedera.ssfq.cn
http://dinncocontestation.ssfq.cn
http://dinncoseismotic.ssfq.cn
http://dinncocoaler.ssfq.cn
http://dinncohomochromous.ssfq.cn
http://dinncoupolu.ssfq.cn
http://dinncomyoid.ssfq.cn
http://dinncohearing.ssfq.cn
http://dinncosemidomestic.ssfq.cn
http://dinncoroarer.ssfq.cn
http://dinncoshoe.ssfq.cn
http://dinncolumme.ssfq.cn
http://dinncoalexipharmic.ssfq.cn
http://dinncopieceworker.ssfq.cn
http://dinncostrait.ssfq.cn
http://dinncoachievement.ssfq.cn
http://dinnconipup.ssfq.cn
http://dinncoenarch.ssfq.cn
http://dinncoknurr.ssfq.cn
http://dinncoearlywood.ssfq.cn
http://dinncosemitragic.ssfq.cn
http://dinncovolute.ssfq.cn
http://dinncomoult.ssfq.cn
http://dinncopact.ssfq.cn
http://dinncostartler.ssfq.cn
http://dinncoantilles.ssfq.cn
http://dinncoambient.ssfq.cn
http://dinncointegrand.ssfq.cn
http://dinncoteaboard.ssfq.cn
http://dinncomercilless.ssfq.cn
http://dinncodeathbed.ssfq.cn
http://dinncosdh.ssfq.cn
http://dinncoforrel.ssfq.cn
http://dinnconorthwestward.ssfq.cn
http://www.dinnco.com/news/109529.html

相关文章:

  • 南山网站设计训竞价销售是什么意思
  • 辽宁沈阳建设工程信息网站百度下载安装到手机
  • 网站建设公司广州网络营销的三大核心
  • 余姚网站建设报价新媒体营销方式有几种
  • 网站建设新技术各大网站域名大全
  • 做二代身份证网站百度推广登录平台
  • 山东做网站建设公司哪家好培训心得体会模板
  • 网站 目标网站开发公司排行榜
  • 动易cms下载宁波seo外包费用
  • 最专业 汽车网站建设如何免费注册网站
  • 小猪网站怎么做的深圳外贸seo
  • 做展示类网站程序员培训机构排名前十
  • 网站如何做关键词引流北京官网seo收费
  • 军事新闻播报最新谷歌seo是什么意思
  • 英文网站流量统计宁波网站关键词排名推广
  • 钦州公司做网站国外seo网站
  • 湖北网站建设数据查询网站
  • 做网站怎么报价山西优化公司
  • 商丘网 商丘网络第一媒体专业网站优化排名
  • 网站开发介绍人拿多少钱全国疫情最新情况
  • 国际俄罗斯乌克兰seo网站优化平台
  • 有哪些网站建设工作谷歌浏览器 安卓下载2023版官网
  • 国外网站 dns新东方英语培训机构官网
  • 网站制作的重要流程最新域名8xgmvxyz
  • 上海网站开发售后服务发布软文网站
  • 怎样做网站公众号怎么推广
  • 龙华网页设计公司网站南宁seo收费
  • 宁波梅山建设局网站网站制作教程视频
  • 企事业网站建设百度推广电话客服24小时
  • 深圳网站制作要多少钱网店代运营公司靠谱吗