简介

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获取跟踪某个资源状态,其实informerapiserver通过长连接保证资源的实时通知的。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工作原理相关推荐

  1. 菜鸟学Kubernetes(K8s)系列——(七)关于Kubernetes底层工作原理

    菜鸟学Kubernetes(K8s)系列--(七)关于Kubernetes底层工作原理 Kubernetes系列文章 主要内容 菜鸟学Kubernetes(K8s)系列--(一)关于Pod和Names ...

  2. RxJs map operator 工作原理分析

    使用一个例子来研究 map 操作符的工作原理. 推荐阅读本文之前,先浏览这篇文章RxJs fromEvent 工作原理分析以了解相关知识. 源代码: import { Component, OnIni ...

  3. Kubernetes NetworkPolicy 工作原理浅析

    女主宣言 Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.那么如 ...

  4. 一段文字讲清楚Kubernetes的工作原理

    https://www.toutiao.com/a6656616314120962574/ 2019-02-11 13:51:00 我们用命令行kubectl run nginx --image=ng ...

  5. Kubernetes入门——Kubernetes工作原理及使用

    作者简介: 星龙 百度基础架构部研发工程师 负责混部调度系统研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes工作原理』梳理. 视 ...

  6. kubernetes的部署架构以及工作原理

    kubernetes 整体架构 Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统,所以整体的架构和borg很相似,整个架构有api server,control ...

  7. Kubernetes各组件工作原理 Pod 生命周期

    一.kubernets 组件工作原理 - 概述: 在集群管理方面,kubernetes 将集群中的机器分为 Master(主)节点和一些 node(工作)节点.在 Master 节点上运行这一些集群管 ...

  8. Kubernetes operator 模式开发实践

    0. 前言 近日我们在开发符合我们业务自身需求的微服务平台时,使用了 Kubernetes 的 Operator Pattern 来实现其中的运维系统,在本文,我们将实现过程中积累的主要知识点和技术细 ...

  9. 混沌网格(Chaos Mesh)的设计和工作原理

    原文发表于kubernetes中文社区,为作者原创翻译 ,原文地址 更多kubernetes文章,请多关注kubernetes中文社区 目录 为什么选择混沌网格(Chaos Mesh)? 混沌网格(C ...

  10. Kubernetes初探:原理及实践应用

    Kubernetes初探:原理及实践应用 [日期:2014-11-03] 来源:CSDN 作者:张俊 [字体:大 中 小] 总体概览 如下图所示是我初步阅读文档和源代码之后整理的总体概览,基本上可以从 ...

最新文章

  1. 谷歌无人车十年记:理想背后的骨感现实 | 厚势汽车
  2. python3下载手机安卓版-QPython3下载
  3. 《构建之法》问题与思考
  4. tensorflow fetch 取回某个值
  5. html高级编辑工具,高级编辑工具
  6. 记vsftpd虚拟用户登录返回530 Login incorrect解决过程
  7. 知道tan值怎么求角度不用计算机,已知sin,cos,tan的值,如何使用计算器求出相应的角度...
  8. 学习W5500的OTA平台的SDK
  9. Python基础知识笔记(三)——字典、集合
  10. 2017年博客第一篇随笔
  11. 事业单位计算机专业能力测试考什么内容,事业单位职业能力测试考什么
  12. CSDN不友好的收藏夹
  13. ManjaroArch 自动挂载NTFS分区
  14. C++语言入门3(定义整数与整数输入)
  15. 随机事件及其概率运算
  16. 管理书单 | 10本经典的管理学书籍推荐
  17. 米饭 低 gi 高 gi 指数
  18. 路印协议项目进度报告(第37期)
  19. 【大学物理·早期量子论和量子力学基础】光电效应爱因斯坦的光子理论
  20. 年华利息和年华利率_你好,请问年化利息和年化利率是一样的吗?

热门文章

  1. JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口
  2. 隆重推荐:吴闲云 - 三国中的博弈
  3. 推荐STM32F030K6T6国产兼容替换芯马XM1008K6T6
  4. 定时备份网站数据文件到阿里网盘
  5. WEB测试工具---死链接检测工具xenu
  6. 如何查看计算机关闭原因,电脑总是自动重启关机怎么样查找原因
  7. Alexander Tropsha:AI从零自学设计新型药物分子,研究登Science子刊|42问AI与机器人未来...
  8. devil may cry 4 android apk,Devil May Cry
  9. 如何快速调整参考文献格式
  10. 5G,仅仅是更快的网速吗?