kubernetes学习笔记2:crd
crd是k8s在1.7版本引入,用户根据自己的需求自定义k8s资源,自己添加的对象资源是native,一等公民,跟k8s中的资源拥有相同的对象资源,都存在etcd中,APIversion就是crd的一个声明,kind就是customresourcedefinition,name资源的名字,spec用于指定crd的group和version,names表示kind是什么,比如deployment的kind就是deployment,scope字段表明crd是否被命名空间管理,plural昵称的意思,可以创建带有校验validation的crd,可以创建带有状态status的crd,创建完成,还需要controller控制器来实现调用,因为它才是控制整个k8s资源最终表现出来的状态的大脑,创建controller用于创建对应的deployment才能真正实现crd的功能。cr是crd对一个具体实例,相当于Java中的实现类,webhook本质上是一种http回调,会注册到APIserver上,APIserver特定事件发生时,会查询已经注册到webhook,并把相应消息传过去,按照处理类型不同把webhook分为两类:可能会修改传入对象mutating webhook,另一类只读传入对象validating webhook。operator是一种描述,部署和管理k8s应用的一套机制,可以理解为crd配合可选的webhook与controller来实现用户业务逻辑,即operator=crd+webhook+controller。常见operator工作模式:第一步创建自定义资源crd,第二步APIserver根据注册到pass列表,把crd请求转发给webhook,第三步webhook会完成crd的缺省值设定Defaulting和参数校验validating,出来完成之后,相应的crd会被写入数据库,第四步,与此同时,controller会在后台检查crd资源,根据业务逻辑,处理与该crd相关的特殊操作,第五步,controller会监测上述集群内关联的变化,把这些变化记录到crd的状态中。operator framework给用户提供了webhook和controller框架,屏蔽了底层的细节,不需要开发者实现消息通知触发,失败重新入队等,只需关心被管理应用的运维逻辑实现。它有kubebuilder(有完善的测试和部署以及代码生成的脚手架和operator-SDK(对ansible operator这类上层操作支持更好),它们都使用官方的controller-tools和controller-runtime。

浙公网安备 33010602011771号