Kubernetes术语“控制器”和“操作员”是指将集群转换为所需状态的两种不同模式。控制器是一个既定的概念,而运算符是最近出现的,用于描述特定于应用程序的控制器。
控制回路
Kubernetes集群在控制回路上运行。您可以通过编写和应用YAML清单来定义集群应该做什么。集群内的控制器检测请求的更改并采取措施调整状态。这是在您提交新清单后异步发生的。
控制器负责监控集群的资源,评估它们是否偏离了定义的状态,并进行任何必要的调整以使它们重新对齐。它们是完全自动化的组件,无需干预即可运行。
生态系统中存在多种控制器。一些在集群级别运行,而另一些则管理您的工作负载。你在你的清单定义日常Kubernetes资源可以是控制器:Deployment,ReplicaSet,和类似的例子满足控制器的定义。他们负责嵌套对象以维护用户定义的副本计数。
什么是控制器?
控制器是集群内至少跟踪一种其他Kubernetes资源类型的任何东西。控制器可以是被动的或主动的。主动控制者将自行实施必要的行动;被动的会将更改传达给其他组件或集群API服务器。
由于控制器的角色是有意抽象的,因此除了对特定对象的监视之外,它们没有其他通用功能。您可以使用一个控制器来自动删除带有eligible-for-autodelete注释的Pod。
在Kubernetes中,控制器只是实现自动化控制循环功能的一种模式。单个控制器将具有独特的用途和特征,但它们将始终监视集群的对象或配置。
运营商呢?
操作员是一种特殊形式的控制器。操作符实现了控制器模式,这意味着他们将集群移动到一个定义的状态,但他们也拥有一些额外的特征。该术语最初由CoreOS创造,但现在也被Kubernetes更广泛地采用。
运算符是为特定应用量身定制的。他们通过自定义资源定义添加KubernetesAPI扩展,创建由他们管理的应用程序使用的新对象类型。
几个流行的社区应用程序现在都有自己的运营商。这些使在集群中安装、配置和维护托管软件变得更加容易。etcd、Fluentd、Prometheus和许多其他通常启动到集群中的关键项目都有操作符。
这些工作负载可能很复杂,并且由多个单独的组件组成。它们可能包含需要在整个安装生命周期内进行管理的特定于应用程序的逻辑。
操作员概念提供了一种使用与常规控制器相同的原理来监控这些应用程序的方法。操作员只是一个专门的控制器,它使用自定义资源将特定应用程序移动到正确的用户定义状态。
您通常通过在自定义资源中提供配置数据来配置运算符。操作员使用其对应用程序的了解将该数据转换为集群中的特定操作。这些操作将组装与配置资源中定义的状态相匹配的应用程序的正常安装。
运算符有什么用?
由于运算符是特定于域的,因此每个运算符都将包含不同的功能。通常,您可以期望运营商提供以下一些功能:
自动监控和警报——操作员通常知道他们的应用程序何时无法正常工作并生成适当的警报。
随着时间的推移自动版本升级——运营商通常能够自动应用集群更改以安装可用的新应用程序更新。这显着减轻了运维团队的维护负担。
安装自定义资源——操作员将应用程序的自定义资源添加到KubernetesAPI服务器,准备集群来承载工作负载。
提供自动缩放——具有特定领域知识的操作员可以识别何时配置的副本计数太低而无法舒适地为当前流量提供服务并启动新实例以保持性能。
生命周期管理——运营商确保新的应用程序实例启动到已经满足所有先决条件的环境中。他们还将在副本停止后执行任何所需的清理工作。
存储管理和备份——一些运营商协助建立持久性存储。当他们了解他们的应用程序时,他们也可能在应用潜在的破坏性操作之前进行备份。
在部署新工作负载之前从头开始组装所有这些功能将是复杂且难以维护的。Operator允许您使用供应商批准的自我管理和Kubernetes原生策略将复杂系统启动到集群中。
在提供它们的一些应用程序中,可以清楚地观察到操作符的好处。GitLab版本控制软件是一个复杂的组件堆栈,但其操作员提供全自动自动缩放、滚动升级和备份,以及使用Prometheus和Grafana的度量可视化堆栈。当您将操作员添加到集群时,一切就可以使用了。
另一个操作符是MongoDB:它提供了一种完全托管的方式,可以从您定义的一组规范中配置存储、数据库、用户和Mongo设置。然后,操作员相应地配置您的集群以支持您的数据库工作负载。
您可以通过使用Kubernetes客户端库之一创建控制器来编写自己的运算符。Operator是通过使用KubernetesRESTAPI开发的,用于查询集群及其对象并与之交互。
结论
Controllers和Operators是Kubernetes术语,用于描述监控资源并应用操作来修改集群状态的控制平面组件。控制器
转载请注明:http://www.0431gb208.com/sjslczl/2408.html