首页 > 其他分享 >K8S控制器理解-摘录自《云原生操作系统Kubernetes》

K8S控制器理解-摘录自《云原生操作系统Kubernetes》

时间:2024-10-12 12:32:22浏览次数:9  
标签:控制器 冰箱 Kubernetes 入口 组件 Shared Informer K8S 摘录自

摘录自罗建龙等著的《云原生操作系统Kubernetes》,详细了解请查看原著。

虽然控制器是Kubernetes比较复杂的组件,但是控制器这个概念本身,对我们来说并不陌生。我们生活中使用的洗衣机、冰箱、空调等,都要有控制器才能正常工作。
以下我们通过思考一个简易冰箱的设计过程,来理解Kubernetes集群控制器的原理和实现。

设计一台冰箱

如下图所示是一台简易冰箱。

冰箱包括五个组件,分别是箱体、制冷系统、照明系统、温控器和门。

冰箱有两个典型使用场景:

  • 当有人打开冰箱门的时候,冰箱内的灯会自动开启;
  • 当有人调节温控器的时候,制冷系统会根据温度设置调节冰箱内的温度。

统一操作入口

实际上,我们可以把冰箱简单抽象成下图图中的两个部分:统一的操作入口其他组件。用户只有通过操作入口才能操作冰箱,这个入口为用户提供了开关门和调节温控器这两个接口。用户调用这两个接口的时候,入口逻辑会调整冰箱门或温控器的状态。

但是这里有一个问题,就是用户通过这两个接口,既不能让冰箱内部的灯打开,也不能调节冰箱内的温度,因为这两个接口和照明或者制冷系统没有任何必然的联系

引入控制器

如下图所示,控制器就是为了解决上面的问题而产生的。控制器是用户操作和冰箱各个组件状态之间的一座桥梁。当用户打开门的时候,控制器“观察”到了门的变化,帮助用户打开冰箱内的灯;当用户调节温控器的时候,控制器“观察”到了用户设置的温度,替用户管理制冷系统以便调整冰箱内温度。

统一管理控制器

因为冰箱有照明系统和制冷系统,所以与一个控制器管理着两个组件相比,为每个组件分别设置一个控制器是更为合理的选择。同时为了方便管理,可以设置一个控制器管理器来统一维护所有这些控制器,以确保这些控制器在正常工作。

Shared Informer

有了控制器和控制器管理器之后,冰箱的设计看起来已经相当不错了。但是随着冰箱功能的增加,必然会有新的控制器不断地加进来。这些控制器都需要通过冰箱入口,时刻监控自己“关心”的组件的状态变化,就如同照明系统控制器在时刻监控冰箱门状态一样。当大量控制器不断地和操作入口通信的时候,就会增加操作入口的压力。

如下图所示,这时我们可以把监控冰箱组件状态变化这件事情,交给一个新的模块Shared Informer来做。Shared Informer作为控制器的代理,替控制器监控冰箱组件的状态变化,并根据控制器的“喜好”,把不同组件状态的变化通知对应的控制器。

Shared Informer模块的增加,实际上可以极大地缓解冰箱操作入口的压力。

List Watcher

Shared Informer方便了控制器对冰箱组件的监控,而这个机制最核心的功能,当然是主动获取组件状态被动接收组件状态变化的通知。这两个功能加起来,就是List Watcher机制。

假设Shared Informer和冰箱入口通过HTTP协议通信的,那么HTTP分块编码(chunked transfer encoding)就是实现List Watcher的一个好的选择。

控制器通过List Watcher给冰箱入口发送一个查询请求然后等待,当冰箱组件有变化的时候,入口通过分块的HTTP响应通知控制器。控制器“看到”Chunked响应,会认为响应数据还没有发送完成,所以会持续等待。

标签:控制器,冰箱,Kubernetes,入口,组件,Shared,Informer,K8S,摘录自
From: https://www.cnblogs.com/WengerCHAN/p/18460279

相关文章

  • kubernetes 初始化集群 证书100年操作 【kubeadm】
    1、下载源码[root@SPHQBKCEK8SMS01~]#gitclonehttps://github.com/kubernetes/kubernetes#切换到自己的版本,修改源码,比如我的是v1.20.15版本[root@SPHQBKCEK8SMS01kubernetes]#cdkubernetes/[root@SPHQBKCEK8SMS01kubernetes]#gitcheckoutv1.20.15[root@SPHQBKCE......
  • k8s常用命令
    Kubernetes(通常简称为k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是一些常用的Kubernetes命令:获取集群状态kubectlcluster-info获取集群中运行的Pod列表kubectlgetpods获取特定命名空间下的Pod列表kubectlgetpods-n......
  • Docker和K8S集群调用GPU
    参考:安装Docker插件https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.htmlUnbntu使用Docker调用GPUhttps://blog.csdn.net/dw14132124/article/details/140534628https://www.cnblogs.com/li508q/p/18444582环境查看系统环境#......
  • 在Kubernetes中实现灰度发布(Canary Release)是一种有效的策略,它允许逐步将新版本的应用
    在Kubernetes中实现灰度发布(CanaryRelease)是一种有效的策略,它允许逐步将新版本的应用推送给部分用户群体,以收集反馈并监控新版本的表现。这种方法可以显著降低新版本上线的风险,并在问题发生时快速回滚。灰度发布通常比滚动更新(RollingUpdate)提供更细粒度的控制,因为它可以精确......
  • 在K8S中,镜像下载策略有哪些?
    在Kubernetes(K8s)中,镜像下载策略主要通过Pod的imagePullPolicy字段来配置。这一策略决定了当Pod启动时,Kubernetes如何拉取容器镜像。以下是K8s中常用的镜像下载策略:1.Always策略行为:每次创建Pod时,都会从镜像仓库拉取最新的镜像版本,即使本地已经存在同名镜像。适用场景:适用于需......
  • 在K8S中,ingress 有何作用?
    在Kubernetes(简称K8S)中,Ingress是一种API资源对象,用于管理从集群外部到集群内部服务的HTTP和HTTPS连接。它主要用来定义网络路由规则,允许外部用户通过特定的路径访问部署在集群内的应用服务。Ingress控制器则是实际实现这些规则的组件,通常运行在一个或多个Pod中,并监听......
  • 在K8S中,Scheduler 作用及实现原理有哪些?
    在Kubernetes(K8s)中,Scheduler是一个至关重要的核心组件,其主要作用是负责集群中Pod的调度。以下是Scheduler的详细作用及实现原理:1.Scheduler的作用资源分配:Scheduler根据每个Pod的资源请求(如CPU、内存)以及节点当前的可用资源情况,选择合适的Node来运行Pod。这有助于确保Pod能够......
  • 在K8S中,各模块如何与APlServer通信?
    在Kubernetes(K8s)中,各个模块与APIServer的通信是集群正常运作的关键。以下详细说明了各模块如何与APIServer进行通信:1.通信方式KubernetesAPIServer提供了一个统一的RESTful接口,用于集群内所有组件之间的通信。任何想要操作集群资源(如Pods、Services、ConfigMaps等)的组件,都......
  • 在K8S中,负载均衡器有何作用?
    在Kubernetes(K8S)中,负载均衡器(LoadBalancer)是一种服务类型(ServiceType),用于在集群内部的服务之间分配流量。负载均衡器的作用不仅仅是简单地转发请求,还包括确保应用程序能够可靠地处理来自客户端的请求,同时保持高可用性和可扩展性。以下是负载均衡器在Kubernetes中的一些主......
  • Kubernetes(K8s)技术深度解析与实践案例
    Kubernetes(K8s)技术深度解析与实践案例Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化应用程序的部署、扩展和管理。自2014年首次亮相以来,K8s迅速成为容器编排领域的行业标准,其设计哲学、可扩展性和强大的社区支持是其成功的关键因素。本文将深入探讨K8s的核心概念、......