1.2. AMQ Streams operator
AMQ Streams operator 是专门构建的,具有专家操作知识,以便在 OpenShift 上有效地管理 Kafka。每个操作器都执行不同的功能。
- Cluster Operator
- Cluster Operator 在 OpenShift 上处理 Apache Kafka 集群的部署和管理。它自动设置 Kafka 代理和其他 Kafka 组件和资源。
- Topic Operator
- 主题 Operator 管理 Kafka 集群中的创建、配置和删除主题。
- User Operator
- User Operator 管理需要访问 Kafka 代理的 Kafka 用户。
部署 AMQ Streams 时,您首先部署 Cluster Operator。然后,Cluster Operator 已准备好处理 Kafka 的部署。您还可以使用 Cluster Operator (推荐)或独立 Operator 部署 Topic Operator 和 User Operator。您可以将独立 Operator 与不是由 Cluster Operator 管理的 Kafka 集群一起使用。
主题 Operator 和 User Operator 是实体 Operator 的一部分。Cluster Operator 可以基于 Entity Operator 配置部署一个或多个 Operator。
要部署独立 Operator,您需要设置环境变量以连接到 Kafka 集群。如果您使用 Cluster Operator 部署 Operator,则不需要设置这些环境变量,因为它们将由 Cluster Operator 设置。
1.2.1. 在 OpenShift 命名空间中观察 AMQ Streams 资源 复制链接链接已复制到粘贴板!
Operator 在 OpenShift 命名空间中观察和管理 AMQ Streams 资源。Cluster Operator 可以监控单个命名空间、多个命名空间或 OpenShift 集群中的所有命名空间。主题 Operator 和用户 Operator 可以监视单个命名空间。
-
Cluster Operator 监视
Kafka资源 -
主题 Operator 监视
KafkaTopic资源 -
User Operator 监视
KafkaUser资源
主题 Operator 和 User Operator 只能监视命名空间中的单个 Kafka 集群。它们只能连接到单个 Kafka 集群。
如果多个主题 Operator 监视同一命名空间,则可能会出现名称冲突和主题删除。这是因为每个 Kafka 集群都使用具有相同名称的 Kafka 主题(如 __consumer_offsets)。请确定只有一个主题 Operator 会监视给定的命名空间。
当将多个用户 Operator 与单个命名空间一起使用时,带有给定用户名的用户可在多个 Kafka 集群中存在。
如果使用 Cluster Operator 部署 Topic Operator 和 User Operator,它们默认监控 Cluster Operator 部署的 Kafka 集群。您还可以使用 operator 配置中的 watchedNamespace 指定命名空间。
对于每个 Operator 的独立部署,您可以指定一个命名空间和与 Kafka 集群的连接,以便在配置中监视。
1.2.2. 管理 RBAC 资源 复制链接链接已复制到粘贴板!
Cluster Operator 为需要访问 OpenShift 资源的 AMQ Streams 组件创建和管理基于角色的访问控制(RBAC)资源。
要使 Cluster Operator 正常工作,OpenShift 集群中的权限需要与 Kafka 资源交互,如 Kafka 和 KafkaConnect,以及 ConfigMap、Pod、Deployment 和 Service 等受管资源。
通过以下 OpenShift RBAC 资源指定权限:
-
ServiceAccount -
Role和ClusterRole -
RoleBinding和ClusterRoleBinding
1.2.2.1. 将权限委派给 AMQ Streams 组件 复制链接链接已复制到粘贴板!
Cluster Operator 在名为 strimzi-cluster-operator 的服务帐户下运行。分配了集群角色,授予其为 AMQ Streams 组件创建 RBAC 资源的权限。角色绑定将集群角色绑定与服务帐户关联。
OpenShift 可防止在一个 ServiceAccount 下运行的组件授予授予 ServiceAccount 没有的另一个 ServiceAccount 特权。因为 Cluster Operator 会创建它管理的资源所需的 RoleBinding 和 ClusterRoleBinding RBAC 资源,所以它需要一个赋予同一权限的角色。
下表描述了 Cluster Operator 创建的 RBAC 资源。
| 名称 | 使用的 |
|---|---|
|
| Kafka 代理 pod |
|
| ZooKeeper pod |
|
| Kafka Connect pod |
|
| MirrorMaker pod |
|
| MirrorMaker 2 pod |
|
| Kafka Bridge pod |
|
| Entity Operator |
| 名称 | 使用的 |
|---|---|
|
| Cluster Operator |
|
| Cluster Operator |
|
| Cluster Operator |
|
| Cluster Operator,机架功能(使用时) |
|
| Cluster Operator, Topic Operator, User Operator |
|
| Cluster Operator,用于机架感知的 Kafka 客户端 |
| 名称 | 使用的 |
|---|---|
|
| Cluster Operator |
|
| Cluster Operator,用于机架感知的 Kafka 代理 |
|
| Cluster Operator,用于机架感知的 Kafka 客户端 |
| 名称 | 使用的 |
|---|---|
|
| Cluster Operator |
|
| Cluster Operator,用于机架感知的 Kafka 代理 |
1.2.2.2. 使用一个 ServiceAccount 运行 Cluster Operator 复制链接链接已复制到粘贴板!
Cluster Operator 最好使用 ServiceAccount 运行。
Cluster Operator 的 ServiceAccount 示例
然后,Operator 的部署需要在 spec.template.spec.serviceAccountName 中指定。
Cluster Operator 的 Deployment 的部分示例
1.2.2.3. ClusterRole 资源 复制链接链接已复制到粘贴板!
Cluster Operator 使用 ClusterRole 资源来提供对资源所需的访问权限。根据 OpenShift 集群设置,可能需要集群管理员来创建集群角色。
只有在创建 ClusterRole 资源时才需要集群管理员权限。Cluster Operator 不会在集群管理员帐户下运行。
ClusterRole 资源遵循 最小特权原则,并只包含 Cluster Operator 操作 Kafka 组件集群所需的权限。第一个分配的权限集允许 Cluster Operator 管理 OpenShift 资源,如 Deployment、Pod 和 ConfigMap。
Cluster Operator 需要所有集群角色才能委派权限。
Cluster Operator 使用 strimzi-cluster-operator-namespaced 和 strimzi-cluster-operator-global 集群角色来授予命名空间范围的资源级别和集群范围的资源级别的权限。
Cluster Operator 的带有命名空间资源的 ClusterRole
Cluster Operator 的带有集群范围资源的 ClusterRole
strimzi-cluster-operator-leader-election 集群角色代表领导选举机制所需的权限。
带有领导选举权限的 ClusterRole
strimzi-kafka-broker 集群角色代表使用机架感知的 Kafka pod 中 init 容器所需的访问。
名为 strimzi-<cluster_name>-kafka-init 的角色绑定会为 <cluster_name>-kafka 服务账户分配访问集群内使用 strimzi-kafka-broker 角色的节点。如果没有使用 rack 功能,且集群没有通过 nodeport 公开,则不会创建绑定。
Cluster Operator 的 ClusterRole 允许它将 OpenShift 节点的访问权限委派给 Kafka 代理 pod
strimzi-entity-operator 集群角色代表 Topic Operator 和 User Operator 所需的访问权限。
主题 Operator 生成带有状态信息的 OpenShift 事件,因此 & lt;cluster_name> -entity-operator 服务帐户绑定到 strimzi-entity-operator 角色,该角色通过 strimzi-entity-operator 角色绑定授予此访问权限。
Cluster Operator 的 ClusterRole 允许它将对事件的访问权限委派给主题和用户 Operator
strimzi-kafka-client 集群角色代表使用机架感知的 Kafka 客户端所需的访问。
Cluster Operator 的 ClusterRole 允许它将对 OpenShift 节点的访问权限委派给基于 Kafka 客户端的 pod
1.2.2.4. ClusterRoleBinding 资源 复制链接链接已复制到粘贴板!
Cluster Operator 使用 ClusterRoleBinding 和 RoleBinding 资源将其 ClusterRole 与 ServiceAccount 相关联:包含集群范围资源的集群角色需要集群角色绑定。
Cluster Operator 的 ClusterRoleBinding 示例
委派权限时使用的集群角色还需要集群角色绑定:
Cluster Operator 和 Kafka 代理机架意识的 ClusterRoleBinding 示例
Cluster Operator 和 Kafka 客户端的 ClusterRoleBinding 示例
仅包含命名空间的资源的集群角色仅使用角色绑定绑定。
Cluster Operator 的 RoleBinding 示例
Cluster Operator 和 Kafka 代理机架感知的 RoleBinding 示例