云原生控制器解析

admin 2024年7月18日14:39:40评论19 views字数 3023阅读10分4秒阅读模式

在云计算技术日新月异的时代,云原生概念逐渐从幕后走到台前,成为推动数字化转型的重要力量。今天,我们将一起深入探讨云原生中的一个核心组件——控制器(Controller) ,特别是它在Kubernetes中的应用与实现。同时,我们还将揭秘如何开发自己的Operator,以应对日益复杂的业务需求。

云原生控制器解析

一、什么是云原生

云原生控制器解析

云原生开发是一种利用云平台优势,通过微服务、容器、服务网格、不可变基础设施等技术手段,构建弹性、可靠、自动化的云原生应用的开发模式。这种开发模式极大地提升了应用的弹性、可扩展性、自动化和敏捷性,是现代软件开发的重要趋势。

云原生控制器解析

二、控制器:Kubernetes的幕后英雄

云原生控制器解析

在Kubernetes的世界里,控制器扮演着至关重要的角色。它是负责管理应用程序在Kubernetes集群中运行状态的“大脑”。通过不断监视集群中的对象,并根据用户定义的期望状态与实际状态之间的差异进行调整,控制器确保了应用程序能够按照预期稳定运行。

1、控制器模型

控制器模型通过控制循环(Control Loop)将Kubernetes内部的资源调整为声明式API对象期望的样子,通过不断地监控和调整集群的状态,确保实际状态(Current State)接近期望状态(Desired State)。控制器模型分为两部分。

控制器定义

控制器实际上都是由上半部分的控制器定义(包括期望状态),加上下半部分的被控制对象的模板组成的。如下图所示:

云原生控制器解析

图1-1 控制器定义

控制循环

控制器是控制循环的一部分,持续观察 Kubernetes 集群的状态,并采取行动使实际状态向期望状态靠拢。控制器通过与 Kubernetes API 服务器交互,创建、更新或删除资源,间接管理集群状态。

用一段Go语言风格的伪代码,描述这个控制循环:

for {actualState := GetResourceActualState(rsvc)// 控制器模板定义    expectState := GetResourceExpectState(rsvc)     if actualState == expectState {        // do nothing} else {// 编排逻辑,调谐的最终结果一般是对被控制对象的某种写操作,比如增/删/改 Pod        Reconcile(rsvc)     }}

2、控制器List/Watch原理

云原生控制器解析

图2-1 控制器List/Informer机制(图片来源于网络

如上图所示,控制器Informer List/Informer工作原理如下:

  • Informer通过Reflector包,与APIServer建立连接,使用ListAndWatch方法监控特定资源对象实例的变化;

  • APIServer的资源对象实例发生变化(Add,Update,Delete),Reflector会收到“事件通知”,放入Delta FIFO Queue队列中;

  • Informer(执行processLoop方法)会不断从Delta FIFO Queue里读取增量。每拿到一个增量,Informer就会判断增量里的事件类型,然后创建/更新/删除本地对象的缓存(local store);

  • 缓存更新之后,Delta FIFO Queue会pop事件到Controller,Controller会调用预先注册的ResourceEventHandler回调函数进行处理;

  • Controller从工作队列中取出API对象(<namespace>/<name>),并启动一个worker执行相应的调协逻辑。

云原生控制器解析

三、Kubernetes内置控制器概览

云原生控制器解析

Kubernetes内置了多种类型的控制器,每一种都承担着特定的职责:

Node Controller :负责监控节点的状态,处理节点故障,并在必要时进行清理。

Namespace Controller :管理命名空间资源的生命周期,包括创建、删除和更新。

ResourceQuota Controller :控制资源配额,防止资源过度使用。

Deployment Controller :提供应用的声明式更新能力,确保Pod副本的数量和状态符合预期。

StatefulSet Controller :管理有状态应用的部署,提供稳定的持久化存储和唯一网络标识符。

DaemonSet Controller :确保所有(或某些)节点上运行指定数量的Pod副本,常用于集群守护进程。

ReplicaSet Controller :确保Pod副本数量始终符合预期,是Deployment控制器的底层实现。

Service Controller和 Endpoint Controller :维护后端Pods与Service之间的连接,提供负载均衡功能。

云原生控制器解析

四、自定义Operator:云原生的扩展利器

云原生控制器解析

随着大数据、人工智能等领域的发展,原生Kubernetes内置资源在某些复杂场景下显得力不从心。因此,开发特定的资源和控制器成为了必然选择。Operator正是由Kubernetes自定义资源(CRD)和控制器构成的云原生扩展服务,它允许开发者根据业务需求自定义资源和控制器,实现面向领域知识的业务逻辑控制。

开发 Operator 是一项高级技能,它要求开发者不仅要熟悉 Kubernetes,还要能够编写复杂的业务逻辑,工具的选择至关重要。目前,比较流行的工具有Operator-SDK和Kubebuilder。它们都是基于ControllerRuntime的封装,但Kubebuilder由Kubernetes SIG官方团队打造,因此更受推荐。以下是开发 Operator 的基本步骤:

1、安装 Kubebuilder:从官方 release页面下载或使用自动化脚本安装。

curl -Lo ./kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/v4.1.0/kubebuilder_linux_amd64chmod +x ./kubebuildersudo mv kubebuilder /usr/local/bin

2、创建项目:使用 kubebuilder init 初始化项目结构。

mkdir demogo mod init demokubebuilder init --domain com.ebcloud --skip-go-version-check

3、定义 CRD:通过 kubebuilder create api 创建 CRD,并定义资源结构。

kubebuilder create api --group ebcloud --version v1 --kind demo

4、编写业务逻辑:在控制器代码中实现自定义的业务逻辑。

5、测试和部署:在本地集群或云环境中测试 Operator,确保其按预期工作。

6、持续迭代:根据反馈持续优化 Operator,提升应用的稳定性和性能。

云原生控制器解析

结语

云原生控制器解析

希望这篇文章能帮助您更好地理解云原生控制器和Operator的概念,以及如何开发自己的Operator。控制器作为Kubernetes的核心组件,是确保应用稳定运行的关键。而自定义Operator,则为云原生应用提供了更为灵活的扩展能力。掌握这些技术,将帮助你更好地应对复杂的业务需求,推动业务的快速发展。通过 Kubernetes 控制器和 Operator,我们能够构建出更加智能、自动化的云应用。现在,就让我们一起踏上云原生的旅程,探索无限可能!

云原生控制器解析

文章作者:李光耀

云原生控制器解析

原文始发于微信公众号(EBCloud):云原生控制器解析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月18日14:39:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   云原生控制器解析https://cn-sec.com/archives/2966448.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息