第13章 カスタムリソース API のリファレンス
13.1. 共通の設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
共通設定プロパティーは複数のリソースに適用されます。
13.1.1. replicas リンクのコピーリンクがクリップボードにコピーされました!
replicas
プロパティーを使用してレプリカを設定します。
レプリケーションのタイプはリソースによって異なります。
-
KafkaTopic
はレプリケーション係数を使用して、Kafka クラスター内で各パーティションのレプリカ数を設定します。 - Kafka コンポーネントはレプリカを使用してデプロイメントの Pod 数を設定し、可用性とスケーラビリティーを向上します。
OpenShift で Kafka コンポーネントを実行している場合、高可用性のために複数のレプリカを実行する必要がない場合があります。コンポーネントがデプロイされたノードがクラッシュすると、OpenShift によって自動的に Kafka コンポーネント Pod が別のノードに再スケジュールされます。ただし、複数のレプリカで Kafka コンポーネントを実行すると、他のノードが稼働しているため、フェイルオーバー時間が短縮されます。
13.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 を使用する場合は、指定のクラスターの設定に応じてブートストラップサーバーのリストを指定できます。
13.1.3. ssl リンクのコピーリンクがクリップボードにコピーされました!
TLSバージョンの特定のcipher suiteを使用するクライアント接続には、3つの許可されたssl
設定オプションを使用します。暗号スイートは、セキュアな接続とデータ転送のためのアルゴリズムを組み合わせます。
ssl.endpoint.identification.algorithm
プロパティーを設定して、ホスト名の検証を有効または無効にすることもできます。
SSL の設定例
13.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: []
TLS クライアント認証の設定に関する詳細は、KafkaClientAuthenticationTls
schema reference を参照してください。
13.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を参照してください。
13.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/amq7/amq-streams-rhel8-operator:2.1.0
container image.
-
Cluster Operator 設定から
User Operator の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.1.0
container image.
-
Cluster Operator 設定から
Entity Operator TLS サイドカーの場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq7/amq-streams-kafka-31-rhel8:2.1.0
container image.
-
Cluster Operator 設定から
Kafka Exporter の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq7/amq-streams-kafka-31-rhel8:2.1.0
container image.
-
Cluster Operator 設定から
Kafka Bridge の場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_KAFKA_BRIDGE_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq7/amq-streams-bridge-rhel8:2.1.0
container image.
-
Cluster Operator 設定から
Kafka ブローカーイニシャライザーの場合:
-
Cluster Operator 設定から
STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
環境変数に指定されたコンテナーイメージ。 -
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.1.0
container image.
-
Cluster Operator 設定から
コンテナーイメージ設定の例
13.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 スキーマ参照」を参照してください。
13.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 へのメトリクスの導入」を参照してください。
13.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
- ガベッジコレクターのロギングを有効にします。
jvmOptions
の完全なスキーマは、JvmOptions
schema referenceに記載されています。
-Xmx
や -Xms
などの JVM 設定で使用できる単位は、対応するイメージの JDK java
バイナリーで使用できる単位と同じです。そのため、1g
または 1G
は 1,073,741,824 バイトを意味し、Gi
はサフィックスとして有効な単位ではありません。これは、メモリの要求や制限に使用される単位とは異なります。OpenShiftの規約では、1G
は1,000,000,000バイト、1Gi
は1,073,741,824バイトを意味します。
-Xms
および -Xmx
オプション
-Xms
および -Xmx
に使用されるデフォルト値は、コンテナーに メモリー要求 の制限が設定されているかどうかによって異なります。
- メモリーの制限がある場合は、JVM の最小および最大メモリーは制限に対応する値に設定されます。
-
メモリーの制限がない場合、JVM の最小メモリーは
128M
に設定されます。JVM の最大メモリーは、必要に応じてメモリーを拡張するようには定義されていません。これは、テストおよび開発での単一ノード環境に適しています。
-Xmx
を明示的に設定する前に、以下を考慮してください。
-
JVM メモリー使用量の合計は、最大ヒープサイズを超える可能性があります。
-Xmx
の値を検索し、超過せずにコンテナーのメモリー要求を最も適切に使用できるようにします。 適切な OpenShift メモリー要求の設定。
- OpenShift は、ノードで実行されている他の Pod からメモリーに対して負荷がある場合には、コンテナーを強制終了する場合があります。
-
OpenShift は、メモリー不足のノードにコンテナーをスケジュールする場合があります。
-Xms
が-Xmx
に設定されている場合には、コンテナーはすぐにクラッシュし、存在しない場合、コンテナーは後でクラッシュします。
この例では、JVM のヒープに 2 GiB (2,147,483,648 バイト) が使用されます。メモリー使用量の合計は約 8GiB です。
-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
13.1.10. ガベッジコレクターのロギング リンクのコピーリンクがクリップボードにコピーされました!
jvmOptions
プロパティーでは、ガベージコレクター(GC)のロギングを有効または無効にすることもできます。GC ロギングはデフォルトで無効になっています。これを有効にするには、以下のように gcLoggingEnabled
プロパティーを設定します。
GC ロギングの設定例
# ... jvmOptions: gcLoggingEnabled: true # ...
# ...
jvmOptions:
gcLoggingEnabled: true
# ...