1.2. Streams for Apache Kafka Operator
Streams for Apache Kafka Operator は、OpenShift 上の Kafka を効果的に管理するための専門的な運用知識をベースに特別に構築されています。各 Operator は個別の関数を実行します。
- Cluster Operator
- Cluster Operator は、OpenShift での Apache Kafka クラスターのデプロイメントおよび管理を処理します。Kafka ブローカーおよびその他の Kafka コンポーネントおよびリソースの設定を自動化します。
- Topic Operator
- Topic Operator は、Kafka クラスター内でのトピックの作成、設定、および削除を管理します。
- User Operator
- User Operator は、Kafka ブローカーへのアクセスを必要とする Kafka ユーザーを管理します。
Streams for Apache Kafka をデプロイするときは、まず Cluster Operator をデプロイします。その後、Cluster Operator が Kafka のデプロイメントを処理する準備が整います。Cluster Operator を使用して、またはスタンドアロン Operator として Topic Operator および User Operator をデプロイすることもできます。Cluster Operator によって管理されない Kafka クラスターでは、スタンドアロンの Operator を使用します。
Topic Operator および User Operator は Entity Operator の一部です。Cluster Operator は、Entity Operator 設定に基づいて Operator を 1 つまたは両方デプロイできます。
スタンドアロン Operator をデプロイするには、環境変数を設定して Kafka クラスターに接続する必要があります。これらの環境変数は、Cluster Operator によって設定されるため、Cluster Operator を使用して Operator をデプロイする場合に設定する必要はありません。
1.2.1. OpenShift namespace 内の Streams for Apache Kafka リソースの監視
Operator は、OpenShift namespace 内の Streams for Apache Kafka リソースを監視および管理します。Cluster Operator は、OpenShift クラスター内の 1 つの namespace、複数の namespace、またはすべての namespace を監視できます。Topic Operator と User Operator は、1 つの namespace を監視できます。
-
Cluster Operator は
Kafka
リソースを監視します -
Topic Operator は
KafkaTopic
リソースを監視します -
User Operator は
KafkaUser
リソースを監視します
Topic Operator と User Operator は、namespace 内の 1 つの Kafka クラスターのみを監視できます。また、1 つの Kafka クラスターにのみ接続できます。
複数の Topic Operator が同じ namespace を監視すると、名前の競合やトピックの削除が発生する可能性があります。これは、各 Kafka クラスターが同じ名前 (__consumer_offsets
など) を持つ Kafka トピックを使用するためです。特定の namespace を監視する Topic Operator が 1 つだけであることを確認してください。
1 つの namespace で複数の User Operator を使用する場合、特定のユーザー名を持つユーザーが複数の Kafka クラスターに存在できます。
Cluster Operator を使用して Topic Operator と User Operator をデプロイすると、デフォルトで Cluster Operator によってデプロイされた Kafka クラスターが監視されます。Operator 設定で watchedNamespace
を使用して namespace を指定することもできます。
各 Operator のスタンドアロンデプロイメントの場合、設定で監視する namespace と Kafka クラスターへの接続を指定します。
1.2.2. RBAC リソースの管理
Cluster Operator は、OpenShift リソースへのアクセスを必要とする Streams for Apache Kafka コンポーネントのロールベースアクセス制御 (RBAC) リソースを作成および管理します。
Cluster Operator が機能するには、Kafka
および KafkaConnect
などの Kafka リソースや ConfigMap
、Pod
、Deployment
、Service
などの管理リソースと対話するために OpenShift クラスター内でパーミッションが必要です。
権限は、以下の OpenShift RBAC リソースを使用して指定します。
-
ServiceAccount
-
Role
およびClusterRole
-
RoleBinding
およびClusterRoleBinding
1.2.2.1. Streams for Apache Kafka コンポーネントへの権限委譲
Cluster Operator は strimzi-cluster-operator
という名前のサービスアカウントで実行されます。このアカウントには、Streams for Apache Kafka コンポーネントの RBAC リソースを作成する権限を付与するクラスターロールが割り当てられます。クラスターロールは、ロールバインディングによってサービスアカウントに関連付けられます。
OpenShift は、ある ServiceAccount
の下で動作するコンポーネントが、付与元の ServiceAccount
に含まれていない、別の ServiceAccount
権限を付与するのを防ぎます。Cluster Operator は管理するリソースが必要とする RoleBinding
および ClusterRoleBinding
RBAC リソースを作成するため、これに同じ権限を付与するロールが必要です。
以下のセクションでは、Cluster Operator で必要な RBAC リソースについて説明します。
1.2.2.2. ClusterRole
リソース
Cluster Operator は ClusterRole
リソースを使用して、リソースに必要なアクセスを提供します。OpenShift クラスターの設定によっては、クラスター管理者がクラスターロールを作成する必要になる場合があります。
クラスター管理者の権限は ClusterRole
リソースの作成にのみ必要です。Cluster Operator はクラスター管理者アカウントでは実行されません。
RBAC リソースは 最小権限の原則 に従い、Cluster Operator が Kafka コンポーネントのクラスターを操作するために必要な権限のみを含みます。
Cluster Operator が権限を委任するには、すべてのクラスターロールが必要です。
名前 | 説明 |
---|---|
| Cluster Operator がオペランドのデプロイと管理に使用する namespace スコープのリソースへのアクセス権。 |
| Cluster Operator がオペランドのデプロイと管理に使用するクラスタースコープのリソースへのアクセス権。 |
| Cluster Operator がリーダーの選出に使用するアクセス権。 |
| Cluster Operator が Streams for Apache Kafka カスタムリソースの監視と管理に使用するアクセス権。 |
| ラックアウェアネスが使用されている場合に、Kafka ブローカーが OpenShift ワーカーノードからトポロジーラベルを取得できるようにするアクセス権。 |
| Kafka ユーザーとトピックを管理するためにトピックおよびユーザー Operator によって使用されるアクセス権。 |
| ラックアウェアネスが使用されている場合に、Kafka Connect、MirrorMaker (1 および 2)、および Kafka Bridge が OpenShift ワーカーノードからトポロジーラベルを取得できるようにするアクセス権限。 |
1.2.2.3. ClusterRoleBinding
リソース
Cluster Operator は、ClusterRoleBinding
および RoleBinding
リソースを使用して、ClusterRole
を ServiceAccount
に関連付けます。クラスターロールバインディングは、クラスタースコープのリソースを含むクラスターロールで必要です。
名前 | 説明 |
---|---|
|
Cluster Operator に |
|
Cluster Operator に |
|
Cluster Operator に |
名前 | 説明 |
---|---|
|
Cluster Operator に |
|
Cluster Operator に |
|
Cluster Operator に |
|
Cluster Operator に |
1.2.2.4. ServiceAccount
リソース
Cluster Operator は strimzi-cluster-operator
ServiceAccount
を使用して実行されます。このサービスアカウントは、オペランドを管理するために必要な特権を付与します。Cluster Operator は、追加の ClusterRoleBinding
リソースと RoleBinding
リソースを作成して、これらの RBAC 権限の一部をオペランドに委任します。
各オペランドは、Cluster Operator によって作成される独自のサービスアカウントを使用します。これにより、Cluster Operator は最小特権の原則に従い、本当に必要なアクセス権のみをオペランドに与えることができます。
名前 | ユーザー |
---|---|
| ZooKeeper Pod |
| Kafka ブローカー Pod |
| Entitiy Operator |
| Cruise Control Pod |
| Kafka Exporter Pod |
| Kafka Connect Pod |
| MirrorMaker Pod |
| MirrorMaker 2 Pod |
| Kafka Bridge Pod |
1.2.3. Pod リソースの管理
StrimziPodSet
カスタムリソースは、Streams for Apache Kafka が Kafka Pod、Kafka Connect Pod、および MirrorMaker 2 Pod を作成および管理するために使用します。ZooKeeper を使用している場合、ZooKeeper Pod も StrimziPodSet
リソースを使用して作成および管理されます。
StrimziPodSet
リソースを作成、更新、削除することはできません。StrimziPodSet
カスタムリソースは内部で使用され、リソースの管理は Cluster Operator のみが行います。したがって、Pod が起動しなかったり、Kafka クラスターが使用できなくなったりする可能性を避けるために、Cluster Operator が適切に実行されている必要があります。
OpenShift Deployment
リソースは、他のコンポーネント (Kafka Bridge、Kafka Exporter、Cruise Control、(非推奨) MirrorMaker 1、User Operator、および Topic Operator) の Pod の作成と管理に使用されます。