Kubernetes入门到精通- Operator 模式入门

网友投稿 1016 2022-11-09

Kubernetes入门到精通- Operator 模式入门

Kubernetes入门到精通- Operator 模式入门

operator 入门

本文档阅读人群是有一定的容器以及在云原生领域有所实践的人群.

本次将分多个篇章讲述基于operator-sdk这个go框架,开发operator最佳实践。

会同步将文档和代码同步到​​github​​上面

​​operator 入门​​

operator是什么

operator是kubernets的一种扩展方式,

Operator 模式旨在捕获(正在管理一个或一组服务的)运维人员的关键目标。 负责特定应用和 service 的运维人员,在系统应该如何运行、如何部署以及出现问题时如何处理等方面有深入的了解。

可以见官方文档

​​Operator 模式 | Kubernetes​​

整个操作流程包括三个流程。

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开发框架

​​sample-controller​​在k8s官方仓库中,提供了简单的controller实现​​kubebuilder​​kubernetes-sigs 是k8s SIG组织推出的开发框架​​operator-sdk​​operator-sdk是coreos开源的框架,在github上也是star最高的, 可以直接尝试使用这个框架进行开发operator

k8s 开发库

​​client-go​​是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.gomgr, err := manager.New(cfg, options)manager.goapiReader, err := client.New(config, client.Options{Scheme: options.Scheme, Mapper: mapper}) client.godynamicClient, err := dynamic.NewForConfig(config)

operatorhub.io

和helm chart一样,operator也拥有一个开源社区,管理社区开发的operator。

使用operatorhub之前,你需要安装OLM(operator 生命周期管理),如果是helm相当于同步operatorhub的operator包到你的本地,也可以上传自己的operator包,然后就可以愉快的安装operator了。

​​operator-sdk-best-practices/0.operator入门.md at master · shenkonghui/operator-sdk-best-practices · GitHub​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Apache Calcite入门
下一篇:3个镜像构建和扫描的最佳实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~