kubebuilder之一:kubernetes operator工作原理
简介
redHat: kubernetes operator 是一种封装、部署和管理 Kubernetes 应用的方法。
我们平时 使用kubernetes API (应用编程接口)和kubectl工具在kubernetes上部署并管理kubernetes应用。
而kubernetes operator 是一种特定于(定制
)应用的控制器,可以扩展kubernetes API的功能,来代表kubernetes用户进行创建、配置和管理复杂应用的实例。
它基于基本 Kubernetes 资源和控制器概念构建,但又涵盖了特定于域或应用的知识,用于实现其所管理软件的整个生命周期的自动化。
我们平时使用k8s restAPI或者通过kubectl工具手动部署管理我们的应用,而operator是通过k8s restAPI 自动创建 配置管理我们的应用,而且是定制化的。
简单几个概念
- CRD Custom Resource Definition
在k8s中一切皆是资源,资源就是CRD,用户自定义的k8s资源,是一个类型 ,默认自带的CRD比如deployment pod service等。 在yaml 中kind 名称就是crd名称
- CR Custom Resourse
是实现CRD的 具体实例
- webhook webhook
kubernetes 中的一种http回调,默认注册到kube-apiserver上,与apiserver进行绑定。webhook主要作用是进行资源的修改(mutating
)和验证(validating
) 。
类似与Java中的过滤器,外部对CRD资源的变更,在Controller处理之前都会交给webhook提前处理,进行修改/验证。
其实webhook 就是准入控制器。 深入理解 Kubernetes Admission Webhook 玩转K8S AdmissionWebhook
工作队列
controller 工作队列
核心组件,它会监控集群内的资源变化,并把相关的对象,包括它的动作与 key,例如 Pod 的一个 Create 动作,作为一个事件存储于该队列中;
- **controller **
controller是CRD实现业务逻辑的核心,它控制当前CRD运行管理动作。会持续监听集群状态变化,把跟自己有关的对象事件比如(create delete update )放到工作 队列中,并且会持续把当前资源状态变成用户定义的spec期望状态。
- operator
operator官方说是描述、管理和部署kubrenetes应用的一套机制,就是文档开头说的。总的来说operator= CRD+webhook+controller
工作原理
controller 工作原理:
在说Kubernetes Operator工作原理之前先了解controller
工作方式:
前方高能
首先我们知道想要获取某个资源的数据/状态,都需要进行List-Watch 向ApiServer发起请求 ,而发背后的实现真正查询的是apiserver向etcd发起的watch是没有条件的,只能知道某个数据发生了变化或创建、删除,但不能过滤具体的值,然后组件通过List-Watch进行数据的筛选获得自己关心的数据。
看上面图表述了controller执行流程:1.informer
通过List-Watch获取跟踪某个资源状态,其实informer
和apiserver
通过长连接保证资源的实时通知的。informer
感知到数据变化后先放入自己缓存中(localStore
)中,然后把对象变化的事件流保存到FIFO队列。Callbacks
在FIFO队列中拿到资源对象的变化事件,放入controller的工作队列(workqueue)
中。此时worker
函数消费工作队列(workqueue)
,根据事件进行状态操作,执行真正的业务逻辑。当前状态和期望状态的差别,然后通过client-go向API server发送请求,直到驱动资源变成用户期望的状态。
informer
组件说明:List/Watch:List是列举apiserver中对象的接口,Watch是监控apiserver资源变化的接口;
Reflector:我习惯成称之为反射器,实现对apiserver指定类型对象的监控,其中反射实现的就是把监控的结果实例化成具体的对象;
DeltaIFIFO:将Reflector监控的变化的对象形成一个FIFO队列
LocalStore:指的就是Indexer的实现cache,这里面缓存的就是apiserver中的对象(其中有一部分可能还在DeltaFIFO中),此时使用者再查询对象的时候就直接从cache中查找,减少了apiserver的压力;
Callbacks:通知回调函数,Infomer感知的所有对象变化都是通过回调函数通知使用者(Listener);
Kubernetes Operator 工作原理
在kuberntes 中,控制平面的控制器(kube-controller-manager)实施控制循环,反复比较集群的理想状态和实际状态。如果集群的实际状态于理想状态不符,控制器将采取措施解决 此问题。
Kubernetes Operator 监视 CR 类型并采取特定于应用的操作,确保当前状态与该资源的理想状态相符。
Kubernetes Operator 通过自定义资源定义引入新的对象类型。Kubernetes API 可以像处理内置对象一样处理自定义资源定义,包括通过 kubectl 交互以及包含在基于角色的访问权限控制(RBAC)策略中。
Kubernetes Operator 会持续监控正在运行的应用,可备份数据,从故障中恢复,以及随着时间的推移自动升级应用。
Kubernetes Operator 几乎可执行任何操作:扩展复杂的应用,应用版本升级,甚至使用专用硬件管理计算集群中节点的内核模块。
通俗来讲: 用户创建一个CRD自定义资源,apiserver把CRD转发给webhook,webhook 进行缺省值配置 验证配置和修改配置,webhook处理完成,把配置存入etcd中 ,返回给用户。controller 会监测到CRD,按照预先写的业务逻辑,进行处理这个CRD,比如创建pod。controller会 持续监听这个CRD的变化,保证运行的状态跟期望的一致。
operator-framework
operator-framework 是kubernetes operator的开发框架,框架的主要内容是为开发人员提供了webhook 和controller 实现,开发人员只需要关心controller业务逻辑实现。
目前比较出名的项目:
- kubebuiler https://cloudnative.to/kubebuilder/
- operator-sdk https://sdk.operatorframework.io/
两者本身没有区别,都是使用controller-tools和controller-runtime,细节上kubebuilder相应的测试、部署、代码生成脚手架比较完善。如Makefile和Kustomize等工具的集成;operator-sdk则支持与ansible operator、operator Lifecycle Manager helm的集成。
后面文章里我们通过kubebuilder进行演示。
kubebuilder之一:kubernetes operator工作原理相关推荐
- 菜鸟学Kubernetes(K8s)系列——(七)关于Kubernetes底层工作原理
菜鸟学Kubernetes(K8s)系列--(七)关于Kubernetes底层工作原理 Kubernetes系列文章 主要内容 菜鸟学Kubernetes(K8s)系列--(一)关于Pod和Names ...
- RxJs map operator 工作原理分析
使用一个例子来研究 map 操作符的工作原理. 推荐阅读本文之前,先浏览这篇文章RxJs fromEvent 工作原理分析以了解相关知识. 源代码: import { Component, OnIni ...
- Kubernetes NetworkPolicy 工作原理浅析
女主宣言 Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.那么如 ...
- 一段文字讲清楚Kubernetes的工作原理
https://www.toutiao.com/a6656616314120962574/ 2019-02-11 13:51:00 我们用命令行kubectl run nginx --image=ng ...
- Kubernetes入门——Kubernetes工作原理及使用
作者简介: 星龙 百度基础架构部研发工程师 负责混部调度系统研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes工作原理』梳理. 视 ...
- kubernetes的部署架构以及工作原理
kubernetes 整体架构 Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统,所以整体的架构和borg很相似,整个架构有api server,control ...
- Kubernetes各组件工作原理 Pod 生命周期
一.kubernets 组件工作原理 - 概述: 在集群管理方面,kubernetes 将集群中的机器分为 Master(主)节点和一些 node(工作)节点.在 Master 节点上运行这一些集群管 ...
- Kubernetes operator 模式开发实践
0. 前言 近日我们在开发符合我们业务自身需求的微服务平台时,使用了 Kubernetes 的 Operator Pattern 来实现其中的运维系统,在本文,我们将实现过程中积累的主要知识点和技术细 ...
- 混沌网格(Chaos Mesh)的设计和工作原理
原文发表于kubernetes中文社区,为作者原创翻译 ,原文地址 更多kubernetes文章,请多关注kubernetes中文社区 目录 为什么选择混沌网格(Chaos Mesh)? 混沌网格(C ...
- Kubernetes初探:原理及实践应用
Kubernetes初探:原理及实践应用 [日期:2014-11-03] 来源:CSDN 作者:张俊 [字体:大 中 小] 总体概览 如下图所示是我初步阅读文档和源代码之后整理的总体概览,基本上可以从 ...
最新文章
- 谷歌无人车十年记:理想背后的骨感现实 | 厚势汽车
- python3下载手机安卓版-QPython3下载
- 《构建之法》问题与思考
- tensorflow fetch 取回某个值
- html高级编辑工具,高级编辑工具
- 记vsftpd虚拟用户登录返回530 Login incorrect解决过程
- 知道tan值怎么求角度不用计算机,已知sin,cos,tan的值,如何使用计算器求出相应的角度...
- 学习W5500的OTA平台的SDK
- Python基础知识笔记(三)——字典、集合
- 2017年博客第一篇随笔
- 事业单位计算机专业能力测试考什么内容,事业单位职业能力测试考什么
- CSDN不友好的收藏夹
- ManjaroArch 自动挂载NTFS分区
- C++语言入门3(定义整数与整数输入)
- 随机事件及其概率运算
- 管理书单 | 10本经典的管理学书籍推荐
- 米饭 低 gi 高 gi 指数
- 路印协议项目进度报告(第37期)
- 【大学物理·早期量子论和量子力学基础】光电效应爱因斯坦的光子理论
- 年华利息和年华利率_你好,请问年化利息和年化利率是一样的吗?
热门文章
- JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口
- 隆重推荐:吴闲云 - 三国中的博弈
- 推荐STM32F030K6T6国产兼容替换芯马XM1008K6T6
- 定时备份网站数据文件到阿里网盘
- WEB测试工具---死链接检测工具xenu
- 如何查看计算机关闭原因,电脑总是自动重启关机怎么样查找原因
- Alexander Tropsha:AI从零自学设计新型药物分子,研究登Science子刊|42问AI与机器人未来...
- devil may cry 4 android apk,Devil May Cry
- 如何快速调整参考文献格式
- 5G,仅仅是更快的网速吗?