第5章 AMQ Streams operator の使用
AMQ Streams の operator を使用して Kafka クラスターと Kafka トピックおよびユーザーを管理します。
5.1. Cluster Operator の使用 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator は Kafka クラスターや他の Kafka コンポーネントをデプロイするために使用されます。
Cluster Operator は YAML インストールファイルを使用してデプロイされます。
Cluster Operator のデプロイメントに関する詳細は、『OpenShift での AMQ Streams のデプロイおよびアップグレード』の「Cluster Operator のデプロイ」を参照してください。
Kafka で利用可能なデプロイメントオプションの詳細は、「Kafka Cluster の設定」を参照してください。
OpenShift では、Kafka Connect デプロイメントに Source2Image 機能を組み込み、追加のコネクターを加えるための便利な方法として利用できます。
5.1.1. Cluster Operator の設定 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator は、以下のサポートされる環境変数とロギング設定を使用して設定できます。
STRIMZI_NAMESPACE
Operator が操作する namespace のカンマ区切りのリスト。設定されていない場合や、空の文字列や
*
に設定された場合は、Cluster Operator はすべての namespace で操作します。Cluster Operator デプロイメントでは OpenShift Downward API を使用して、これを Cluster Operator がデプロイされる namespace に自動設定することがあります。以下の例を参照してください。env: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
env: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
- 任意設定、デフォルトは 120000 ミリ秒です。定期的な調整の間隔 (秒単位)。
STRIMZI_OPERATION_TIMEOUT_MS
- 任意設定、デフォルトは 300000 ミリ秒です。内部操作のタイムアウト (ミリ秒単位)。この値は、標準の OpenShift 操作の時間が通常よりも長いクラスターで (Docker イメージのダウンロードが遅い場合など) AMQ Streams を使用する場合に増やす必要があります。
STRIMZI_KAFKA_IMAGES
-
必須。Kafka バージョンから、そのバージョンの Kafka ブローカーが含まれる該当の Docker イメージへのマッピングが提供されます。必要な構文は、空白またはカンマ区切りの
<version>=<image>
ペアです。例: 2.5.0=registry.redhat.io/amq7/amq-streams-kafka-25-rhel7:1.6.7, 2.6.0=registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.
7 .これは、「コンテナーイメージ」 で説明されているように、Kafka.spec.kafka.version
プロパティーが指定されていてもKafka.spec.kafka.image
プロパティーが指定されていない場合に使用されます。 STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
-
Optional, default
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
.「コンテナーイメージ」 にkafka-init-image
として指定されたイメージがない場合に、初期設定作業(ラックサポート)のブローカーの前に開始される init コンテナーのデフォルトとして使用するイメージ名。 STRIMZI_KAFKA_CONNECT_IMAGES
-
必須。Kafka バージョンから、そのバージョンの Kafka Connect が含まれる該当の Docker イメージへのマッピングが提供されます。必要な構文は、空白またはカンマ区切りの
<version>=<image>
ペアです。例: 2.5.0=registry.redhat.io/amq7/amq-streams-kafka-25-rhel7:1.6.7, 2.6.0=registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.
7 .これは、「image
」 で説明されているように、KafkaConnect.spec.version
プロパティーが指定されていてもKafkaConnect.spec.image
プロパティーが指定されていない場合に使用されます。 STRIMZI_KAFKA_CONNECT_S2I_IMAGES
-
必須。Kafka バージョンから、そのバージョンの Kafka Connect が含まれる該当の Docker イメージへのマッピングが提供されます。必要な構文は、空白またはカンマ区切りの
<version>=<image>
ペアです。例: 2.5.0=registry.redhat.io/amq7/amq-streams-kafka-25-rhel7:1.6.7, 2.6.0=registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.
7 .これは、「image
」 で説明されているように、KafkaConnectS2I.spec.version
プロパティーが指定されていてもKafkaConnectS2I.spec.image
プロパティーが指定されていない場合に使用されます。 STRIMZI_KAFKA_MIRROR_MAKER_IMAGES
-
必須。Kafka バージョンから、そのバージョンの Kafka Mirror Maker が含まれる該当の Docker イメージへのマッピングが提供されます。必要な構文は、空白またはカンマ区切りの
<version>=<image>
ペアです。例: 2.5.0=registry.redhat.io/amq7/amq-streams-kafka-25-rhel7:1.6.7, 2.6.0=registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.
7 .これは、「image
」 に説明されているように、KafkaMirrorMaker.spec.version
プロパティーが指定されていてもKafkaMirrorMaker.spec.image
プロパティーが指定されていない場合に使用されます。 STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE
-
Optional, default
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
.Kafkaリソースの
「コンテナーイメージ」 にKafka.spec.entityOperator.topicOperator.image
として指定されたイメージがない場合に、Topic Operator のデプロイ時にデフォルトとして使用するイメージ名。 STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
-
Optional, default
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
.Kafkaリソースの
「コンテナーイメージ」 にKafka.spec.entityOperator.userOperator.image
として指定されたイメージがない場合に、User Operator のデプロイ時にデフォルトとして使用するイメージ名。 STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
-
Optional, default
registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.7
.「コンテナーイメージ」 にKafka.spec.entityOperator.tlsSidecar.image として指定されたイメージがない場合に、Entity Operator の TLS サポートを提供するサイドカーコンテナーをデプロイする際にデフォルトとして使用するイメージ名
。 STRIMZI_IMAGE_PULL_POLICY
-
任意設定。AMQ Streams の Cluster Operator によって管理されるすべての Pod のコンテナーに適用される
ImagePullPolicy
。有効な値はAlways
、IfNotPresent
、およびNever
です。指定のない場合、OpenShift のデフォルトが使用されます。ポリシーを変更すると、すべての Kafka、Kafka Connect、および Kafka MirrorMaker クラスターのローリングアップデートが実行されます。 STRIMZI_IMAGE_PULL_SECRETS
-
任意設定。
Secret
名のカンマ区切りのリスト。ここで参照されるシークレットには、コンテナーイメージがプルされるコンテナーレジストリーへのクレデンシャルが含まれます。シークレットは、Cluster Operator によって作成されるすべてのPods
のimagePullSecrets
フィールドで使用されます。このリストを変更すると、Kafka、Kafka Connect、および Kafka MirrorMaker のすべてのクラスターのローリングアップデートが実行されます。 STRIMZI_KUBERNETES_VERSION
任意設定。API サーバーから検出された OpenShift バージョン情報をオーバーライドします。以下の例を参照してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KUBERNETES_SERVICE_DNS_DOMAIN
任意設定。デフォルトの OpenShift DNS サフィックスを上書きします。
デフォルトでは、OpenShfit クラスターで割り当てられるサービスに、デフォルトのサフィックス
cluster.local
を使用する DNS ドメイン名があります。ブローカーが kafka-0 の場合の例は次のとおりです。
<cluster-name>-kafka-0.<cluster-name>-kafka-brokers.<namespace>.svc.cluster.local
<cluster-name>-kafka-0.<cluster-name>-kafka-brokers.<namespace>.svc.cluster.local
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DNS ドメイン名は、ホスト名の検証に使用される Kafka ブローカー証明書に追加されます。
クラスターで異なる DNS サフィックスを使用している場合、Kafka ブローカーとの接続を確立するために、
KUBERNETES_SERVICE_DNS_DOMAIN
環境変数をデフォルトから現在使用中の DNS サフィックスに変更します。
ConfigMap による設定
Cluster Operator のロギングは、strimzi-cluster-operator
ConfigMap
によって設定されます。
ロギング設定が含まれる ConfigMap
は、Cluster Operator のインストール時に作成されます。この ConfigMap
は、install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
ファイルに記述されます。このConfigMap
のデータフィールドlog4j2.properties
を変更することで、Cluster Operatorのロギングを設定します。
ロギング設定を更新するには、050-ConfigMap-strimzi-cluster-operator.yaml
ファイルを編集し、以下のコマンドを実行します。
oc apply -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
oc apply -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
または、ConfigMap
を直接編集することもできます。
oc edit cm strimzi-cluster-operator
oc edit cm strimzi-cluster-operator
リロード間隔の頻度を変更するには、作成された ConfigMap
の monitorInterval
オプションで秒単位の時間を設定します。
クラスタオペレータのデプロイ時にConfigMap
がない場合、デフォルトのロギング値が使用されます。
Cluster Operator のデプロイ後に ConfigMap
が誤って削除される場合、最後に読み込まれたロギング設定が使用されます。新規のロギング設定を読み込むために新規 ConfigMap
を作成します。
ConfigMap から monitorInterval オプションを削除しないでください。
5.1.1.1. 定期的な調整 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator は OpenShift クラスターから受信する必要なクラスターリソースに関するすべての通知に対応しますが、Operator が実行されていない場合や、何らかの理由で通知が受信されない場合、必要なリソースは実行中の OpenShift クラスターの状態と同期しなくなります。
フェイルオーバーを適切に処理するために、Cluster Operator によって定期的な調整プロセスが実行され、必要なリソースすべてで一貫した状態になるように、必要なリソースの状態を現在のクラスターデプロイメントと比較できます。[STRIMZI_FULL_RECONCILIATION_INTERVAL_MS] 変数を使用して、定期的な調整の時間間隔を設定できます。
5.1.2. ロールベースアクセス制御 (RBAC) のプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
クラスターオペレーターが機能するためには、OpenShiftクラスター内で、Kafka
、KafkaConnect
などのリソースや、ConfigMaps
、Pod
、Deployments
、StatefulSets
、Services
などの管理されたリソースとやりとりする権限が必要です。このようなパーミッションは、OpenShift のロールベースアクセス制御 (RBAC) リソースに記述されます。
-
ServiceAccount
-
Role
およびClusterRole
-
RoleBinding
およびClusterRoleBinding
Cluster Operator は、ClusterRoleBinding
を使用して独自の ServiceAccount
で実行される他に、OpenShift リソースへのアクセスを必要とするコンポーネントの RBAC リソースを管理します。
また OpenShift には、ServiceAccount
で動作するコンポーネントが、その ServiceAccount
にはない他の ServiceAccounts
の権限を付与しないようにするための特権昇格の保護機能も含まれています。Cluster Operator は、ClusterRoleBindings
と、それが管理するリソースで必要な RoleBindings
を作成できる必要があるため、Cluster Operator にも同じ権限が必要です。
5.1.2.1. 委譲された権限 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator が必要な Kafka
リソースのリソースをデプロイする場合、以下のように ServiceAccounts
、RoleBindings、および
ClusterRoleBindings
も作成します。
Kafka ブローカー Pod は、
cluster-name-kafka
というServiceAccount
を使用します。-
ラック機能が使用されると、
strimzi-cluster-name-kafka-init
ClusterRoleBinding
は、strimzi-kafka-broker
と呼ばれるClusterRole
経由で、クラスター内のノードへのServiceAccount
アクセスを付与するために使用されます。 - ラック機能が使用されていない場合は、バインディングは作成されません。
-
ラック機能が使用されると、
-
ZooKeeper Pod では
cluster-name-zookeeper
というServiceAccount
が使用されます。 Entity Operator Pod では
cluster-name-entity-operator
というServiceAccount
が使用されます。-
Topic Operator はステータス情報のある OpenShift イベントを生成するため、
ServiceAccount
はstrimzi-entity-operator
というClusterRole
にバインドされ、strimzi-entity-operator
RoleBinding
経由でこのアクセス権限を付与します。
-
Topic Operator はステータス情報のある OpenShift イベントを生成するため、
-
KafkaConnect
およびKafkaConnectS2I
リソースの Pod は、cluster-name-cluster-connect
というServiceAccount
を使用します。 -
KafkaMirrorMaker
の Pod は、cluster-name-mirror-maker
というServiceAccount
を使用します。 -
KafkaMirrorMaker2
の Pod は、cluster-name-mirrormaker2
というServiceAccount
を使用します。 -
KafkaBridge
の Pod は、cluster-name-bridge
というServiceAccount
を使用します。
5.1.2.2. ServiceAccount リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator は ServiceAccount
を使用して最適に実行されます。
Cluster Operator の ServiceAccount
の例
その後、Cluster Operator の Deployment
で、これを spec.template.spec.serviceAccountName
に指定する必要があります。
Cluster Operator の Deployment
の部分的な例
12 行目で、strimzi-cluster-operator
ServiceAccount
が serviceAccountName
として指定されています。
5.1.2.3. ClusterRoles リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator は、必要なリソースへのアクセス権限を付与する ClusterRole
を使用して操作する必要があります。OpenShift クラスターの設定によっては、クラスター管理者が ClusterRoles
を作成する必要があることがあります。
クラスター管理者の権限は ClusterRoles
の作成にのみ必要です。Cluster Operator はクラスター管理者アカウントで実行されません。
ClusterRoles
は、 最小権限の原則に従い、Kafka、Kafka Connect、および ZooKeeper クラスターを操作するために Cluster Operator が必要とする権限のみが含まれます。最初に割り当てられた一連の権限により、Cluster Operator で StatefulSets
、Deployments
、Pods
、および ConfigMaps
などの OpenShift リソースを管理できます。
Cluster Operator は ClusterRoles を使用して、namespace スコープリソースのレベルおよびクラスタースコープリソースのレベルで権限を付与します。
Cluster Operator の namespaced リソースのある ClusterRole
2 番目の一連の権限には、クラスタースコープリソースに必要な権限が含まれます。
Cluster Operator のクラスタースコープリソースのある ClusterRole
strimzi-kafka-broker
ClusterRole
は、ラック機能に使用される Kafka Pod の init コンテナーが必要とするアクセス権限を表します。「委譲された権限」 で説明したように、このアクセスを委譲できるようにするには、このロールも Cluster Operator に必要です。
Cluster Operator の ClusterRole
により、OpenShift ノードへのアクセスを Kafka ブローカー Pod に委譲できます。
strimzi-topic-operator
の ClusterRole
は、Topic Operator が必要とするアクセスを表します。「委譲された権限」 で説明したように、このアクセスを委譲できるようにするには、このロールも Cluster Operator に必要です。
Cluster Operator のClusterRole
により、イベントへのアクセスを Topic Operator に委譲できます。
strimzi-kafka-client
ClusterRole
は、クライアントのラックアウェアネスを使用する Kafka クライアントをベースとしたコンポーネントが必要とするアクセス権限を表します。「委譲された権限」 で説明したように、このアクセスを委譲できるようにするには、このロールも Cluster Operator に必要です。
Cluster Operator の ClusterRole
により、OpenShift ノードへのアクセスを Kafka クライアントベースの Pod に委譲できます。
5.1.2.4. ClusterRoleBindings リンクのコピーリンクがクリップボードにコピーされました!
Operator には ClusterRole
を ServiceAccount
に関連付ける ClusterRoleBindings
および RoleBindings
が必要です。ClusterRoleBindings
は、クラスタースコープのリソースが含まれる ClusterRole
に必要になります。
Cluster Operator の ClusterRoleBinding
の例
ClusterRoleBindings
は、委譲に必要な ClusterRole
にも必要です。
Kafka ブローカーラックアウェアネスの Cluster Operator の Cluster RoleBinding
の例
および
Kafka クライアントラックアウェアネスの Cluster Operator の Cluster RoleBinding
の例
namespaced リソースのみが含まれる ClusterRoles
は、RoleBindings
のみを使用してバインドされます。