第6章 カスタムリソース API のリファレンス
6.1. 共通の設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
共通設定プロパティーは複数のリソースに適用されます。
6.1.1. replicas リンクのコピーリンクがクリップボードにコピーされました!
replicas
プロパティーを使用してレプリカを設定します。
レプリケーションのタイプはリソースによって異なります。
-
KafkaTopic
はレプリケーション係数を使用して、Kafka クラスター内で各パーティションのレプリカ数を設定します。 - Kafka コンポーネントはレプリカを使用してデプロイメントの Pod 数を設定し、可用性とスケーラビリティーを向上します。
OpenShift で Kafka コンポーネントを実行している場合、高可用性のために複数のレプリカを実行する必要がない場合があります。コンポーネントがデプロイされたノードがクラッシュすると、OpenShift によって自動的に Kafka コンポーネント Pod が別のノードに再スケジュールされます。ただし、複数のレプリカで Kafka コンポーネントを実行すると、他のノードが稼働しているため、フェイルオーバー時間が短縮されます。
6.1.2. bootstrapServers リンクのコピーリンクがクリップボードにコピーされました!
bootstrapServers
プロパティーを使用してブートストラップサーバーのリストを設定します。
ブートストラップサーバーリストは、同じ OpenShift クラスターにデプロイされていない Kafka クラスターを参照できます。AMQ Streams によってデプロイされた Kafka クラスターを参照することもできます。
同じ OpenShift クラスターである場合、各リストに CLUSTER-NAME-kafka-bootstrap
という名前の Kafka クラスターブートストラップサービスとポート番号が含まれる必要があります。AMQ Streams によって異なる OpenShift クラスターにデプロイされた場合、リストの内容はクラスターを公開するために使用された方法によって異なります (route、ingress、nodeport、または loadbalancer)。
AMQ Streams によって管理されない Kafka クラスターで Kafka を使用する場合は、指定のクラスターの設定に応じてブートストラップサーバーのリストを指定できます。
6.1.3. ssl リンクのコピーリンクがクリップボードにコピーされました!
SSL 設定と暗号スイートの仕様を組み込んで、クライアントアプリケーションと Kafka クラスター間の TLS ベースの通信をさらに保護できます。標準の TLS 設定に加えて、サポートされている TLS バージョンを指定し、Kafka ブローカーの設定で暗号スイートを有効にすることができます。クライアントが使用する TLS バージョンと暗号スイートを制限する場合は、クライアントに設定を追加することもできます。クライアントの設定では、ブローカーで有効になっているプロトコルと暗号スイートのみを使用する必要があります。
暗号スイートは、セキュアな接続とデータ転送のための一連のセキュリティーメカニズムです。たとえば、暗号スイート TLS_AES_256_GCM_SHA384
は、TLS プロトコルと組み合わせて使用される次のメカニズムで設定されています。
- AES (Advanced Encryption Standard) 暗号化 (256 ビットキー)
- GCM (Galois/Counter Mode) 認証暗号化
- SHA384 (Secure Hash Algorithm) データ整合性保護
この組み合わせは、TLS_AES_256_GCM_SHA384
暗号スイート仕様にカプセル化されています。
ssl.enabled.protocols
プロパティーは、クラスターとそのクライアントの間のセキュアな通信に使用できる TLS バージョンを指定します。ssl.protocol
プロパティーは、すべての接続のデフォルトの TLS バージョンを設定します。有効なプロトコルから選択する必要があります。ssl.endpoint.identification.algorithm
プロパティーを使用して、ホスト名検証を有効または無効にします。
SSL の設定例
6.1.4. trustedCertificates リンクのコピーリンクがクリップボードにコピーされました!
tls
を設定して TLS 暗号化を設定する場合は、trustedCertificates
プロパティーを使用して、証明書が X.509 形式で保存されるキー名にシークレットの一覧を提供します。
Kafka クラスターの Cluster Operator によって作成されるシークレットを使用するか、独自の TLS 証明書ファイルを作成してから、ファイルから Secret
を作成できます。
oc create secret generic MY-SECRET \ --from-file=MY-TLS-CERTIFICATE-FILE.crt
oc create secret generic MY-SECRET \
--from-file=MY-TLS-CERTIFICATE-FILE.crt
TLS による暗号化の設定例
複数の証明書が同じシークレットに保存されている場合は、複数回リストできます。
TLS 暗号化を有効にし、Java に同梱されるデフォルトの公開認証局のセットを使用する場合は、trustedCertificates
を空の配列として指定できます。
デフォルトの Java 証明書で TLS を有効にする例
tls: trustedCertificates: []
tls:
trustedCertificates: []
mTLS 認証の設定に関する詳細は、KafkaClientAuthenticationTls
schema reference を参照してください。
6.1.5. resources リンクのコピーリンクがクリップボードにコピーされました!
AMQ Streams コンテナーのリソースを制御するために、リソース 要求 および 制限 を設定します。メモリー
および cpu
リソースの要求および制限を指定できます。要求には、Kafka の安定したパフォーマンスを確保できる十分な値が必要です。
実稼働環境でリソースを設定する方法は、さまざまな要因によって異なります。たとえば、アプリケーションは OpenShift クラスターでリソースを共有する可能性があります。
Kafka では、デプロイメントの以下の要素が、必要なリソースに影響を与える可能性があります。
- メッセージのスループットとサイズ
- メッセージを処理するネットワークスレッドの数
- プロデューサーおよびコンシューマーの数
- トピックおよびパーティションの数
リソース要求に指定の値は予約され、常にコンテナーで利用可能になります。リソース制限によって、指定のコンテナーが消費可能な最大リソースが指定されます。要求数から制限数の間は予約されず、常に利用できるとは限りません。コンテナーは、リソースが利用できる場合のみ、制限以下のリソースを使用できます。リソースの制限は一時的で、再割り当てが可能です。
リソース要求および制限
要求なしに制限を設定する場合や、その逆の場合、OpenShift は両方に同じ値を使用します。OpenShift は制限を超えない限りコンテナーを強制終了しないので、リソースに対して、要求と制限を同じ数に設定すると、QoS (Quality of Service) が保証されます。
サポート対象のリソース 1 つまたは複数に対して、リソース要求および制限を設定できます。
リソース設定の例
Topic Operator および User Operator のリソース要求および制限は Kafka
リソースに設定されます。
リソース要求が OpenShift クラスターで利用可能な空きリソースを超える場合、Pod はスケジュールされません。
AMQ Streams では、OpenShift 構文を使用して メモリー
および cpu
リソースを指定します。OpenShift におけるコンピュートリソースの管理に関する詳細は、Managing Compute Resources for Containers を参照してください。
- メモリーリソース
メモリーリソースを設定する場合は、コンポーネントの合計要件を考慮してください。
Kafka は JVM 内で実行され、オペレーティングシステムページキャッシュを使用してディスクに書き込む前にメッセージデータを保存します。Kafka のメモリー要求は、JVM ヒープおよびページキャッシュに適合する必要があります。
jvmOptions
プロパティーを設定 すると、最小および最大ヒープサイズを制御できます。他のコンポーネントはページキャッシュに依存しません。メモリーリソースは、ヒープサイズを制御する
jvmOptions
を指定せずに、設定できます。メモリー要求および制限は、メガバイト、ギガバイト、メビバイト、およびギビバイトで指定されます。仕様では、以下の接尾辞を使用します。
-
M
(メガバイト) -
G
(ギガバイト) -
Mi
(メビバイト) -
Gi
(ギビバイト)
異なるメモリー単位を使用するリソースの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow メモリーの指定およびサポートされるその他の単位に関する詳細は、Meaning of memory を参照してください。
-
- CPU リソース
常に信頼できるパフォーマンスを発揮させるには、CPU 要求を十分に指定する必要があります。CPU の要求および制限は、コア または ミリ cpu/ミリコア として指定します。
CPU コアは、整数 (
5
CPU コア) または小数 (2.5
CPU コア) で指定します。1000 ミリコア は1
CPU コアと同じです。CPU の単位の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つの CPU コアのコンピューティング能力は、OpenShift がデプロイされたプラットフォームによって異なることがあります。
CPU 仕様の詳細は、Meaning of CPUを参照してください。
6.1.6. image リンクのコピーリンクがクリップボードにコピーされました!
image
プロパティーを使用して、コンポーネントによって使用されるコンテナーイメージを設定します。
コンテナーイメージのオーバーライドは、別のコンテナーレジストリーやカスタマイズされたイメージを使用する必要がある特別な状況でのみ推奨されます。
たとえば、ネットワークで AMQ Streams によって使用されるコンテナーリポジトリーへのアクセスが許可されない場合、AMQ Streams イメージのコピーまたはソースからのビルドを行うことができます。しかし、設定したイメージが AMQ Streams イメージと互換性のない場合は、適切に機能しない可能性があります。
コンテナーイメージのコピーはカスタマイズでき、デバッグに使用されることもあります。
以下のリソースの image
プロパティーを使用すると、コンポーネントに使用するコンテナーイメージを指定できます。
-
Kafka.spec.kafka
-
Kafka.spec.zookeeper
-
Kafka.spec.entityOperator.topicOperator
-
Kafka.spec.entityOperator.userOperator
-
Kafka.spec.entityOperator.tlsSidecar
-
KafkaConnect.spec
-
KafkaMirrorMaker.spec
-
KafkaMirrorMaker2.spec
-
KafkaBridge.spec
Kafka、Kafka Connect、および Kafka MirrorMaker の image
プロパティーの設定
Kafka、Kafka Connect、および Kafka MirrorMaker では、複数の Kafka バージョンがサポートされます。各コンポーネントには独自のイメージが必要です。異なる Kafka バージョンのデフォルトイメージは、以下の環境変数で設定されます。
-
STRIMZI_KAFKA_IMAGES
-
STRIMZI_KAFKA_CONNECT_IMAGES
-
STRIMZI_KAFKA_MIRROR_MAKER_IMAGES
これらの環境変数には、Kafka バージョンと対応するイメージ間のマッピングが含まれます。マッピングは、image
および version
プロパティーとともに使用されます。
-
image
とversion
のどちらもカスタムリソースに指定されていない場合、version
は Cluster Operator のデフォルトの Kafka バージョンに設定され、環境変数のこのバージョンに対応するイメージが指定されます。 -
image
が指定されていてもversion
が指定されていない場合、指定されたイメージが使用され、Cluster Operator のデフォルトの Kafka バージョンがversion
であると想定されます。 -
version
が指定されていてもimage
が指定されていない場合、環境変数の指定されたバージョンに対応するイメージが使用されます。 -
version
とimage
の両方を指定すると、指定されたイメージが使用されます。このイメージには、指定のバージョンの Kafka イメージが含まれると想定されます。
異なるコンポーネントの image
および version
は、以下のプロパティーで設定できます。
-
Kafka の場合は
spec.kafka.image
およびspec.kafka.version
。 -
spec.image
およびspec.version
の Kafka Connect および Kafka MirrorMaker の場合。
version
のみを提供し、image
プロパティーを未指定のままにしておくことが推奨されます。これにより、カスタムリソースの設定時に間違いが発生する可能性が低減されます。異なるバージョンの Kafka に使用されるイメージを変更する必要がある場合は、Cluster Operator の環境変数を設定することが推奨されます。
他のリソースでの image
プロパティーの設定
他のカスタムリソースの image
プロパティーでは、デプロイメント中に指定の値が使用されます。image
プロパティーがない場合、Cluster Operator 設定に指定された image
が使用されます。image
名が Cluster Operator 設定に定義されていない場合、デフォルト値が使用されます。
Topic Operator の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.4.0
container image.
-
Cluster Operator 設定から
User Operator の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.4.0
container image.
-
Cluster Operator 設定から
Entity Operator TLS サイドカーの場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq-streams/kafka-34-rhel8:2.4.0
container image.
-
Cluster Operator 設定から
Kafka Exporter の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq-streams/kafka-34-rhel8:2.4.0
container image.
-
Cluster Operator 設定から
Kafka Bridge の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_KAFKA_BRIDGE_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq-streams/bridge-rhel8:2.4.0
container image.
-
Cluster Operator 設定から
Kafka ブローカーイニシャライザーの場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.4.0
container image.
-
Cluster Operator 設定から
コンテナーイメージ設定の例
6.1.7. livenessProbe および readinessProbe healthcheck リンクのコピーリンクがクリップボードにコピーされました!
livenessProbe
および readinessProbe
プロパティーを使用して、AMQ Streams でサポートされる healthcheck プローブを設定します。
Healthcheck は、アプリケーションの健全性を検証する定期的なテストです。ヘルスチェックプローブが失敗すると、OpenShift によってアプリケーションが正常でないと見なされ、その修正が試行されます。
プローブの詳細は、Configure Liveness and Readiness Probes を参照してください。
livenessProbe
および readinessProbe
の両方で以下のオプションがサポートされます。
-
initialDelaySeconds
-
timeoutSeconds
-
periodSeconds
-
successThreshold
-
failureThreshold
Liveness および Readiness プローブの設定例
livenessProbe
および readinessProbe
のオプションに関する詳細は、Probe スキーマ参照 を参照してください。
6.1.8. metricsConfig リンクのコピーリンクがクリップボードにコピーされました!
metricsConfig
プロパティーを使用して、Prometheus メトリクスを有効化および設定します。
metricsConfig
プロパティーには、Prometheus JMX Exporter の追加設定が含まれる ConfigMap への参照が含まれます。AMQ Streams では、Apache Kafka および ZooKeeper によってサポートされる JMX メトリクスを Prometheus メトリクスに変換するために、Prometheus JMX エクスポーターを使用した Prometheus メトリクスがサポートされます。
追加設定なしで Prometheus メトリクスのエクスポートを有効にするには、metricsConfig.valueFrom.configMapKeyRef.key
配下に空のファイルが含まれる ConfigMap を参照します。空のファイルを参照する場合、名前が変更されていない限り、すべてのメトリクスが公開されます。
Kafka のメトリクス設定が含まれる ConfigMap の例
Kafka のメトリクス設定例
有効になったメトリクスは、9404 番ポートで公開されます。
metricsConfig
(または非推奨の metrics
) プロパティーがリソースに定義されていない場合、Prometheus メトリクスは無効になります。
Prometheus および Grafana の設定およびデプロイに関する詳細は、OpenShift での AMQ Streams のデプロイおよびアップグレードのKafka へのメトリクスの導入を参照してください。
6.1.9. jvmOptions リンクのコピーリンクがクリップボードにコピーされました!
以下の AMQ Streams コンポーネントは、Java 仮想マシン (JVM) 内で実行されます。
- Apache Kafka
- Apache ZooKeeper
- Apache Kafka Connect
- Apache Kafka MirrorMaker
- AMQ Streams Kafka Bridge
異なるプラットフォームやアーキテクチャーでパフォーマンスを最適化するには、以下のリソースに jvmOptions
プロパティーを設定します。
-
Kafka.spec.kafka
-
Kafka.spec.zookeeper
-
Kafka.spec.entityOperator.userOperator
-
Kafka.spec.entityOperator.topicOperator
-
Kafka.spec.cruiseControl
-
KafkaConnect.spec
-
KafkaMirrorMaker.spec
-
KafkaMirrorMaker2.spec
-
KafkaBridge.spec
設定では、以下のオプションを指定できます。
-Xms
- JVM の起動時に最初に割り当てられる最小ヒープサイズ。
-Xmx
- 最大ヒープサイズ
-XX
- JVM の高度なランタイムオプション
javaSystemProperties
- 追加のシステムプロパティー
gcLoggingEnabled
- ガベッジコレクターのロギングを有効にします
-Xmx
や -Xms
などの JVM 設定で使用できる単位は、対応するイメージの JDK java
バイナリーで使用できる単位と同じです。そのため、1g
または 1G
は 1,073,741,824 バイトを意味し、Gi
は接尾辞として有効な単位ではありません。これは、1G
が 1,000,000,000 バイトを意味し、1Gi
が 1,073,741,824 バイトを意味する OpenShift 規則に従う、メモリー要求および制限 に使用される単位とは異なります。
-Xms
および -Xmx
オプション
コンテナーのメモリー要求および制限値を設定するだけでなく、-Xms
および -Xmx
JVM オプションを使用して、JVM に特定のヒープサイズを設定できます。-Xms
オプションを使用して初期ヒープサイズを設定し、-Xmx
オプションを使用して最大ヒープサイズを設定します。
JVM に割り当てられたメモリーをより詳細に制御するには、ヒープサイズを指定します。ヒープサイズは、コンテナーの メモリー制限 (および要求) を最大限に活用し、それを超えないようにする必要があります。ヒープサイズとその他のメモリー要件は、指定されたメモリー制限内に収まる必要があります。設定でヒープサイズを指定せずに、メモリーリソースの制限 (および要求) を設定する場合、Cluster Operator はデフォルトのヒープサイズを自動的に適用します。Cluster Operator は、メモリーリソース設定の割合に基づいて、デフォルトの最大および最小ヒープ値を設定します。
次の表に、デフォルトのヒープ値を示します。
コンポーネント | ヒープに割り当てられた使用可能なメモリーの割合 | 上限 |
---|---|---|
Kafka | 50% | 5 GB |
ZooKeeper | 75% | 2 GB |
Kafka Connect | 75% | なし |
MirrorMaker 2 | 75% | なし |
MirrorMaker | 75% | なし |
Cruise Control | 75% | なし |
Kafka Bridge | 50% | 31 Gi |
メモリー制限 (および要求) が指定されていない場合、JVM の最小ヒープサイズは 128M
に設定されます。JVM の最大ヒープサイズは、必要に応じてメモリーを増やすことができるように定義されていません。これは、テストおよび開発での単一ノード環境に適しています。
適切なメモリー要求を設定すると、次のことを防ぐことができます。
- ノードで実行されている他の Pod からのメモリーに圧力がかかる場合、OpenShift はコンテナーを強制終了します。
-
OpenShift がメモリー不足のノードにコンテナーをスケジューリングする。
-Xms
が-Xmx
に設定されている場合には、コンテナーはすぐにクラッシュし、存在しない場合、コンテナーは後でクラッシュします。
この例では、JVM のヒープに 2 GiB (2,147,483,648 バイト) が使用されます。JVM メモリー使用量の合計は、最大ヒープサイズを超える可能性があります。
-Xmx
および -Xms
の設定例
# ... jvmOptions: "-Xmx": "2g" "-Xms": "2g" # ...
# ...
jvmOptions:
"-Xmx": "2g"
"-Xms": "2g"
# ...
最初のヒープサイズ (-Xms
) および最大ヒープサイズ (-Xmx
) に同じ値を設定すると、JVM が必要以上のヒープを割り当てて起動後にメモリーを割り当てないようにすることができます。
Kafka ブローカーコンテナーなど、多数のディスク I/O を実行するコンテナーには、オペレーティングシステムのページキャッシュとして使用できるメモリーが必要です。このようなコンテナーの場合、要求されるメモリーは、JVM が使用するメモリーよりも大幅に大きくする必要があります。
-XX オプション
-XX
オプションは、Apache Kafka の KAFKA_JVM_PERFORMANCE_OPTS
オプションの設定に使用されます。
例 -XX
設定
-XX
設定から生成される JVM オプション
-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC
-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC
-XX
オプションを指定しないと、Apache Kafka の KAFKA_JVM_PERFORMANCE_OPTS
のデフォルト設定が使用されます。
javaSystemProperties
javaSystemProperties
は、デバッグユーティリティーなどの追加の Java システムプロパティーの設定に使用されます。
javaSystemProperties
の設定例
jvmOptions: javaSystemProperties: - name: javax.net.debug value: ssl
jvmOptions:
javaSystemProperties:
- name: javax.net.debug
value: ssl
jvmOptions
の詳細については、JvmOptions
スキーマリファレンス を参照してください。
6.1.10. ガベッジコレクターのロギング リンクのコピーリンクがクリップボードにコピーされました!
jvmOptions
プロパティーでは、ガベージコレクター (GC) のロギングを有効または無効にすることもできます。GC ロギングはデフォルトで無効になっています。これを有効にするには、以下のように gcLoggingEnabled
プロパティーを設定します。
GC ロギングの設定例
# ... jvmOptions: gcLoggingEnabled: true # ...
# ...
jvmOptions:
gcLoggingEnabled: true
# ...