当前位置:网站首页>Kubernetes入门到精通- Operator 模式入门
Kubernetes入门到精通- Operator 模式入门
2022-08-04 18:15:00 【隔壁老瓦】
operator 入门
本文档阅读人群是有一定的容器以及在云原生领域有所实践的人群.
本次将分多个篇章讲述基于operator-sdk这个go框架,开发operator最佳实践。
会同步将文档和代码同步到github上面
operator是什么
operator是kubernets的一种扩展方式,
Operator 模式旨在捕获(正在管理一个或一组服务的)运维人员的关键目标。 负责特定应用和 service 的运维人员,在系统应该如何运行、如何部署以及出现问题时如何处理等方面有深入的了解。
可以见官方文档
声明式API是什么?
在讲operator之前先说明一下声明式API,这是云原生非常重要的一个概念。相对于传统的命令式API,在云的领域,声明式API有着很多优势。
整个操作流程包括三个流程。
声明
使用声明式API指定资源的最终状态。如果熟悉k8s,也就是一个yaml编排文件
观测
kubernetes中每一个资源都会存在一个管理它的控制器,控制器监听着所有资源的状态,一旦监听到发生变化就会触发某个动作,比如创建pod,探针失效等等
应答 然后就是最重要的一步了,监听到动作以后,就需要保证将状态变成你所期望的状态。在这一步可以实现复杂的运维工作,比如保证将副本个数维持在一定的比例这么一个简单的动作;也可以实现一个mysql集群的主备切换。
operator与controller的区别
上面已经说到了控制器(controller),本次的主题是operator,那么operator和controller又有什么区别呢。
这里就详细说明一下。
controller 是 k8s中维护资源对象的程序,会根据编排文件yaml维护资源对象,以达到期望的状态,如deployment controller,job controller等。当然也可以自定义实现controller。
operator 其实属于controller的一种,但是更加专业。
开发人员扩展K8s往往需要开发crd(自定义资源) 和 controller 来运维特定的程序(一般都是中间件)。用一个公式表示就就是 operator = crd + controller + 中间件运维。
比如etcd-operator、mysql-operator、istio-operator。使用者往往需要创建一个名为operator的控制器 、然后定义一个crd,然后operator就会创建中间件到你期望的状态。之后也再也不需要运维人员了(理想条件下),因为operator能实现全部自动化的运维工作(副本控制、网络管理等等),只要你定义一个你期望的状态(yaml)。
几种常见的operator/controller开发框架
在k8s官方仓库中,提供了简单的controller实现
kubernetes-sigs 是k8s SIG组织推出的开发框架
operator-sdk是coreos开源的框架,在github上也是star最高的, 可以直接尝试使用这个框架进行开发operator
k8s 开发库
是k8s 的golang库,RESTClient、DynamicClient、ClientSet都是在client-go里面
RESTClient RESTClient是最基础的,相当于的底层基础结构,可以直接通过 是RESTClient提供的RESTful方法如Get(),Put(),Post(),Delete()进行交互. 可以实现任意资源的操作
关键代码
import "k8s.io/client-go/rest" pod := v1.Pod{} restClient, err := rest.RESTClientFor(config) err = restClient.Get().Resource("pods").Namespace("default").Name("nginx-1487191267-b4w5j").Do().Into(&pod)DynamicClient DynamicClient是对RESTClient的封装,支持动态设置访问类型
关键代码
import "k8s.io/client-go/dynamic" resource := &unversioned.APIResource{Name: "pods", Namespaced: true} obj, err := dynamicClient.Resource(resource, "").List(&v1.ListOptions{})ClientSet ClientSet也是对RESTClient的一种封装,与DynamicClient不同的是,ClientSet支持衍生出具体资源的Client,如PodClient等。ClientSet是Kubernetes用的最多的Client类型. 优雅的姿势是利用一个controller对象,再加上Informe
关键代码
import "k8s.io/client-go/kubernetes" clientset, err := kubernetes.NewForConfig(config) podClient := clientset.Core().Pods("") pods, err := podClient.List(apiv1.ListOptions{})
这里就不详细说明了, operator-sdk主要封装了DynamicClient来访问kubernetes
以下是框架的关键代码
main.go
mgr, err := manager.New(cfg, options)
manager.go
apiReader, err := client.New(config, client.Options{Scheme: options.Scheme, Mapper: mapper})
client.go
dynamicClient, err := dynamic.NewForConfig(config)
operatorhub.io
和helm chart一样,operator也拥有一个开源社区,管理社区开发的operator。
使用operatorhub之前,你需要安装OLM(operator 生命周期管理),如果是helm相当于同步operatorhub的operator包到你的本地,也可以上传自己的operator包,然后就可以愉快的安装operator了。
边栏推荐
- 路由懒加载
- EasyCVR调用云端录像API接口返回错误且无录像文件生成,是什么原因?
- The Industrial Metaverse Brings Changes to Industry
- 开发那些事儿:如何通过EasyCVR平台获取监控现场的人流量统计数据?
- Go language Go language, understand Go language file operation in one article
- Codeforces积分系统介绍
- 基于 eBPF 的 Kubernetes 可观测实践
- Win10只读文件夹怎么删除
- 群友求助,一周没有搞定的需求,3分钟就解决了?
- 自己经常使用的三种调试:Pycharm、Vscode、pdb调试
猜你喜欢

网络靶场监控系统的安全加固纪实(1)—SSL/TLS对日志数据加密传输

开发那些事儿:如何通过EasyCVR平台获取监控现场的人流量统计数据?

Hezhou Cat1 4G module Air724UG is configured with RNDIS network card or PPP dial-up, and the development board is connected to the Internet through the RNDIS network card (taking the RV1126/1109 devel

ptables基本语法使用规则

袋鼠云思枢:数驹DTengine,助力企业构建高效的流批一体数据湖计算平台
![[Web Automation Test] Quick Start with Playwright, 5 minutes to get started](/img/68/36dd8ef4a4073f03d5e5dad91be20d.png)
[Web Automation Test] Quick Start with Playwright, 5 minutes to get started

2019 Haidian District Youth Programming Challenge Activity Elementary Group Rematch Test Questions Detailed Answers

群友求助,一周没有搞定的需求,3分钟就解决了?

Alibaba Cloud International Edition uses ROS to build WordPress tutorial

力扣学习---0804
随机推荐
Literature Review on Involution of College Students
LeetCode 899. Ordered Queues
哈夫曼树(暑假每日一题 15)
Flask框架实现注册加密功能详解【Flask企业课学习】
基于激励的需求响应计划下弹性微电网的短期可靠性和经济性评估(Matlab代码实现)
Error when using sourcemap for reporting an error: Can‘t resolve original location of error.
2019 Haidian District Youth Programming Challenge Activity Elementary Group Rematch Test Questions Detailed Answers
Global electronics demand slows: Samsung's Vietnam plant significantly reduces capacity
2018读书记
Google Earth Engine APP - one-click online viewing of global images from 1984 to this year and loading an image analysis at the same time
Speech Recognition Learning Resources
dotnet core 输出调试信息到 DebugView 软件
Introduction of three temperature measurement methods for PT100 platinum thermal resistance
动态数组底层是如何实现的
如何模拟后台API调用场景,很细!
mood swings
智能视频监控平台EasyCVR如何使用接口批量导出iframe地址?
Codeforces积分系统介绍
路由懒加载
怎么招聘程序员