6.3. Kafka のデプロイ
Cluster Operator で Kafka クラスターを管理できるようにするには、これを Kafka リソースとしてデプロイする必要があります。AMQ Streams では、この目的のために、デプロイメントファイルのサンプルが同梱されています。これらのファイルを使用して、Topic Operator および User Operator を同時にデプロイできます。
Cluster Operator をデプロイしたら、Kafka リソースを使用して次のコンポーネントをデプロイします。
Kafka をインストールする場合、AMQ Streams によって ZooKeeper クラスターもインストールされ、Kafka と ZooKeeper との接続に必要な設定が追加されます。
Kafka クラスターを Kafka リソースとしてデプロイしていない場合は、Cluster Operator を使用してこのクラスターを管理できません。これには、OpenShift 外で実行されている Kafka クラスターなどが該当します。ただし、Topic Operator と User Operator は、スタンドアロンコンポーネントとしてデプロイすること で、AMQ Streams によって 管理されていない Kafka クラスターで使用できます。AMQ Streams によって管理されていない Kafka クラスターで他の Kafka コンポーネントをデプロイして使用することもできます。
6.3.1. Kafka クラスターのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Cluster Operator を使用して Kafka クラスターを OpenShift クラスターにデプロイする方法を説明します。
デプロイメントでは、YAML ファイルの仕様を使って Kafka リソースが作成されます。
AMQ Streams には、Kafka クラスターの作成に使用できる次の サンプルファイル が用意されています。
kafka-persistent.yaml- 3 つの Zookeeper ノードと 3 つの Kafka ノードを使用して永続クラスターをデプロイします。
kafka-jbod.yaml- それぞれが複数の永続ボリューを使用する、3 つの ZooKeeper ノードと 3 つの Kafka ノードを使用して、永続クラスターをデプロイします。
kafka-persistent-single.yaml- 1 つの ZooKeeper ノードと 1 つの Kafka ノードを使用して、永続クラスターをデプロイします。
kafka-ephemeral.yaml- 3 つの ZooKeeper ノードと 3 つの Kafka ノードを使用して、一時クラスターをデプロイします。
kafka-ephemeral-single.yaml- 3 つの ZooKeeper ノードと 1 つの Kafka ノードを使用して、一時クラスターをデプロイします。
この手順では、一時 および 永続 Kafka クラスターデプロイメントの例を使用します。
- 一時クラスター
-
通常、Kafka の一時クラスターは開発およびテスト環境での使用に適していますが、本番環境での使用には適していません。このデプロイメントでは、ブローカー情報 (ZooKeeper) と、トピックまたはパーティション (Kafka) を格納するための
emptyDirボリュームが使用されます。emptyDirボリュームを使用すると、その内容は Pod のライフサイクルと厳密な関係を持つため、Pod がダウンすると削除されます。 - 永続クラスター
Kafka の永続クラスターでは、永続ボリュームを使用して ZooKeeper および Kafka データを格納します。
PersistentVolumeClaimを使用してPersistentVolumeが取得され、PersistentVolumeの実際のタイプには依存しません。PersistentVolumeClaimでStorageClassを使用し、自動ボリュームプロビジョニングをトリガーすることができます。StorageClassが指定されていない場合、OpenShift はデフォルトのStorageClassを使用しようとします。次の例では、一般的なタイプの永続ボリュームを一部紹介しています。
- OpenShift クラスターが Amazon AWS で実行されている場合、OpenShift は Amazon EBS ボリュームをプロビジョニングできます。
- OpenShift クラスターが Microsoft Azure で実行されている場合、OpenShift は Azure Disk Storage ボリュームをプロビジョニングできます。
- OpenShift クラスターが Google Cloud で実行されている場合、OpenShift は永続ディスクボリュームをプロビジョニングできます
- OpenShift クラスターがベアメタルで実行されている場合、OpenShift はローカル永続ボリュームをプロビジョニングできます
このサンプル YAML ファイルは、最新のサポート対象 Kafka バージョン、サポート対象のログメッセージ形式バージョンとブローカー間のプロトコルバージョンの設定を指定します。Kafka config の inter.broker.protocol.version プロパティーは、指定された Kafka バージョン (spec.kafka.version) によってサポートされるバージョンである必要があります。このプロパティーは、Kafka クラスターで使用される Kafka プロトコルのバージョンを表します。
Kafka 3.0.0 以降、inter.broker.protocol.version が 3.0 以上に設定されていると、log.message.format.version オプションは無視されるため、設定する必要はありません。
Kafka のアップグレード 時に、inter.broker.protocol.version への更新が必要です。
サンプルクラスターの名前はデフォルトで my-cluster になります。クラスター名はリソースの名前によって定義され、クラスターがデプロイされた後に変更できません。クラスターをデプロイする前にクラスター名を変更するには、関連する YAML ファイルにある Kafka リソースの Kafka.metadata.name プロパティーを編集します。
デフォルトのクラスター名および指定された Kafka バージョン
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
version: 3.3.1
#...
config:
#...
log.message.format.version: "3.3"
inter.broker.protocol.version: "3.3"
# ...
手順
一時または永続クラスターを作成およびデプロイします。
一時クラスターを作成およびデプロイするには、以下を実行します。
oc apply -f examples/kafka/kafka-ephemeral.yaml永続クラスターを作成およびデプロイするには、以下を実行します。
oc apply -f examples/kafka/kafka-persistent.yaml
デプロイメントのステータスを確認します。
oc get pods -n <my_cluster_operator_namespace>Pod 名および readiness が表示される出力
NAME READY STATUS RESTARTS my-cluster-entity-operator 3/3 Running 0 my-cluster-kafka-0 1/1 Running 0 my-cluster-kafka-1 1/1 Running 0 my-cluster-kafka-2 1/1 Running 0 my-cluster-zookeeper-0 1/1 Running 0 my-cluster-zookeeper-1 1/1 Running 0 my-cluster-zookeeper-2 1/1 Running 0my-clusterは Kafka クラスターの名前です。デフォルトのデプロイメントでは、Entity Operator クラスター、3 つの Kafka Pod、および 3 つの ZooKeeper Pod をインストールします。
READYは、Ready/expected 状態のレプリカ数を表示します。STATUSがRunningと表示されると、デプロイメントは成功しています。
6.3.2. Cluster Operator を使用した Topic Operator のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Cluster Operator を使用して Topic Operator をデプロイする方法を説明します。
Kafka リソースの entityOperator プロパティーを設定し、topicOperator が含まれるようにします。デフォルトでは、Topic Operator は Cluster Operator によってデプロイされた Kafka クラスターの namespace で KafkaTopic リソースを監視します。Topic Operator spec で watchedNamespace を使用して namespace を指定することもできます。1 つの Topic Operator が監視できるのは、namespace 1 つです。1 つの namespace を監視するのは、Top Operator 1 つのみとします。
AMQ Streams を使用して複数の Kafka クラスターを同じ namespace にデプロイする場合は、1 つの Kafka クラスターに対してのみ Topic Operator を有効にするか、watchedNamespace プロパティーを使用して Topic Operators が他の namespace を監視するように設定します。
AMQ Streams によって管理されない Kafka クラスターを Topic Operator と使用する場合は、Topic Operator をスタンドアロンコンポーネントとしてデプロイ する必要があります。
entityOperator および topicOperator プロパティーの設定に関する詳細は、Entity Operator の設定 を参照してください。
手順
KafkaリソースのentityOperatorプロパティーを編集し、topicOperatorが含まれるようにします。apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: #... entityOperator: topicOperator: {} userOperator: {}EntityTopicOperatorSpecスキーマ参照に記載されているプロパティーを使用して、Topic Operator のspecを設定します。すべてのプロパティーにデフォルト値を使用する場合は、空のオブジェクト (
{}) を使用します。リソースを作成または更新します。
oc apply -f <kafka_configuration_file>デプロイメントのステータスを確認します。
oc get pods -n <my_cluster_operator_namespace>Pod 名と準備状況が表示される出力
NAME READY STATUS RESTARTS my-cluster-entity-operator 3/3 Running 0 # ...my-clusterは Kafka クラスターの名前です。READYは、Ready/expected 状態のレプリカ数を表示します。STATUSがRunningと表示されると、デプロイメントは成功しています。
6.3.3. Cluster Operator を使用した User Operator のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Cluster Operator を使用して User Operator をデプロイする方法を説明します。
Kafka リソースの entityOperator プロパティーを設定し、userOperator が含まれるようにします。デフォルトでは、User Operator は Kafka クラスターデプロイメントの namespace で KafkaUser リソースを監視します。User Operator spec で watchedNamespace を使用して namespace を指定することもできます。1 つの User Operator が監視できるのは、namespace 1 つです。1 つの namespace を監視するのは、User Operator 1 つのみとします。
AMQ Streams によって管理されない Kafka クラスターを User Operator と使用する場合は、User Operator をスタンドアロンコンポーネントとしてデプロイ する必要があります。
entityOperator および userOperator プロパティーの設定に関する詳細は、Entity Operator の設定 を参照してください。
手順
KafkaリソースのentityOperatorプロパティーを編集し、userOperatorが含まれるようにします。apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: #... entityOperator: topicOperator: {} userOperator: {}EntityUserOperatorSpecスキーマ参照 に記載されているプロパティーを使用して、User Operator のspecを設定します。すべてのプロパティーにデフォルト値を使用する場合は、空のオブジェクト (
{}) を使用します。リソースを作成または更新します。
oc apply -f <kafka_configuration_file>デプロイメントのステータスを確認します。
oc get pods -n <my_cluster_operator_namespace>Pod 名と準備状況が表示される出力
NAME READY STATUS RESTARTS my-cluster-entity-operator 3/3 Running 0 # ...my-clusterは Kafka クラスターの名前です。READYは、Ready/expected 状態のレプリカ数を表示します。STATUSがRunningと表示されると、デプロイメントは成功しています。