Kubernetes控制器和Kubernetes运营商之间有什么区别?


78

据我了解,Kubernetes Controller的目的是确保当前状态等于所需状态。尽管如此,Kubernetes Operator还是做同样的工作。

控制面板中的控制器列表:

  • 部署方式
  • 复制集
  • 有状态集
  • 守护程序集
  • 等等

从Google搜索中,我发现有K8s个运算符,例如

  • etcd运算符
  • 普罗米修斯算子
  • 运营商

但是,我无法理解为什么无法使用Controller来完成?

操作员是对控制器的补充吗?

这两种设计的目的和功能之间有何区别?

在控制器和操作员之间进行选择时,需要记住哪些特定事项??

Answers:


93

我相信术语“ kubernetes运算符”是由CoreOS人们在这里引入的

操作员是特定于应用程序的控制器,它扩展了Kubernetes API以代表Kubernetes用户创建,配置和管理复杂的有状态应用程序实例。它建立在基本的Kubernetes资源和控制器概念的基础上,还包括特定于域或应用程序的知识,以自动化由计算机更好地管理的常见任务。

因此,基本上,kubernetes运算符是一种模式的名称,该模式由kubernetes控制器组成,该控制器将新对象添加到Kubernetes API中,以便配置和管理Prometheus或etcd之类的应用程序。

一句话:运算符是特定于域的控制器。

更新资料

Github上一个关于同一主题的新讨论,链接到同一博客文章。讨论的相关内容包括:

所有操作员都使用控制器模式,但并非所有控制器都是操作员。它只有一个运算符:控制器模式+ API扩展+单应用程序焦点。

操作员是使用CRD实现的定制控制器。它遵循与内置控制器相同的模式(即手表,差异,动作)。

更新2

我找到了一篇新博客,该博客也试图解释这种差异。


1
感谢您的回答。因此,控制器用于一般用途,而操作员用于特定用途。纠正我,如果我错了。为什么针对特定目的实施Controller不是一个好主意?
Suresh Vishnoi

3
我不明白您所说的“一般目的”和“特定目的”是什么意思。操作员是控制器。只是当控制器添加新的k8s对象来存储诸如prometheus或memcached之类的组件的配置时,它们使用术语Operator。控制器通常只是监视原始k8s对象并对其做出反应。
Jose Armesto

如果您认为答案可以解决问题,请接受答案!
Jose Armesto

我诚挚的道歉,我试图找出一种写法将我的问题放在这种情况下。我仍然不相信在k8s集群中有两种不同的方式来完成同一组任务。很快我会更新你的。
Suresh Vishnoi

更新的答案,更多人对这个问题有了更多认识。
Jose Armesto

12

在Kubernetes中,大多数操作都是异步进行的。

例如,当创建一个ReplicaSet对象(选择一个简单的对象)时,将发生以下顺序:

  1. 我们将请求发送到Kube api服务器。
  2. kube-api服务器具有复杂的验证
    • 确保用户具有RBAC凭据以在给定名称空间中创建RS
    • 该请求由所有配置的准入控制器验证
  3. 最后,将对象写入ETCD-仅此而已

现在,各种Kubernetes控制器有责任观察ETCD的更改并实际执行必要的操作。在这种情况下,ReplicaSet控制器将监视ETCD中的更改(例如ReplicataSets的CRUD),并根据副本数等创建Pod。

现在,向运营商介绍,它们在概念上与Kubernetes控制器非常相似。但是它们与第三方实体一起使用。在Kubernetes中,存在CRD的概念,供应商可以定义自己的CRD,而CRD只是自定义(例如,特定于供应商的)kubernetes对象类型。这些运算符非常类似于Kubernetes控制器读取Kubernetes对象的CRUD的方式,对相应CRD上的操作做出响应。例如,当在Kubernetes集群中创建新的API CRD对象时,Kong操作员可以在Kong API服务器中创建新的API条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.