Hitachi

Hitachi Microservices Platform - Paxos Commit Transaction Orchestrator ユーザーズガイド


5.4.5 Mediatorの要件

このKubernetesアプリケーションは、HMP-PCTOとして提供します。次の表に示す要件を満たすように作成します。

表5‒19 Mediatorの要件

項目

要件

ワークロードリソース

StatefulSetリソースとしてください。

ネームスペース

規定しません。

ラベル

metadata.labelには次に示すキーを設定します。
  • キー名:app.kubernetes.io/instance

    値:<リリース名>

  • キー名:app.kubernetes.io/managed-by

    値:Helm

  • キー名:app.kubernetes.io/name

    値:mediator

    備考:チャート名

  • キー名:app.kubernetes.io/version

    値:V.R.S※2

    備考:バージョン

  • キー名:helm.sh/chart

    値:mediator-V.R.S※2

    備考:<チャート名>-<バージョン>

.spec.selector.matchLabels、および.spec.template.metadata.labelsには次に示すキーを設定します。
  • キー名:app.kubernetes.io/instance

    値:<リリース名>

    備考:

  • キー名:app.kubernetes.io/name

    値:mediator

    備考:チャート名

アノテーション

設定しません(デフォルト)。

初期化コンテナ構成

コンテナ構成

レプリカ数

  • ThreeQuaters合意方式の場合:5〜64

  • PrivilegedValue合意方式の場合:2〜64

サービス名

(StatefulSetリソース特有)

「mediator」

Podの管理ポリシー

(StatefulSetリソース特有)

レプリカ数のPodの起動/停止を並行に実施してください。

再起動ポリシー

コンテナ障害時は必ず再起動(オートヒーリング)してください(Kubernetesのデフォルト設定)。

アップデートストラテジー

ローリングアップデートとしてください(Kubernetesのデフォルト設定)。

Podセキュリティコンテキスト

設定しません(デフォルト)。

アクセス制御

Podに対するロールベースアクセス制御(RBAC)で次のとおり対象リソースへのアクセス許可を定義してください。

<デプロイ依存関係チェック機能用ロール>

  • APIグループ

    空(コアグループ)、apps

  • リソース

    pods、replicasets、deployments、statefulsets、daemonsets

  • アクセス許可

    get、list

これらのアクセス許可を定義するためのKubernetesリソースは、次に示すとおり使い分けてください。

  • MediatorとMediatorのDependency-Checkerコンテナで指定するターゲットKubernetesオブジェクト群1のNamespaceがすべて同一の場合:

    Roleリソース、RoleBindingリソース、ServiceAccountリソースを使用してください。

  • MediatorとMediatorのDependency-Checkerコンテナで指定するターゲットKubernetesオブジェクト群1のNamespaceが1つでも異なる場合:

    ClusterRoleリソース、ClusterRoleBindingリソース、ServiceAccountリソースを使用してください。

ServiceAccountリソースのトークンの自動マウント(automountServiceAccountTokenフィールド)を「有効(true)」にしてください(Kubernetesのデフォルト設定)。

Podの割り当てノードの制御

  • 1つのノードに割り当てられるPod数は1つまでです(例として、ワーカーノード数「5」に対してレプリカ数「5」のとき、各ノードにPodが1つ起動します)。

  • 停止したPodを次に起動する際は前回起動したノードと必ず同一のノードに割り当ててください。該当するノードが障害から復旧していない場合に割り当て不可のときは、ほかの空いているノードが存在していたとしてもPodを割り当てないでください(フェイルオーバーしないでください)。

永続化ボリューム

MediatorのConsensusLogの永続ボリュームを割り当ててください。

  • 1つのPodにつき割り当てる永続化ボリュームは1つとしてください(共有しないでください)。

  • 永続ボリュームの種類を「ローカル永続ボリューム(local)」(ノードにアタッチされたローカルストレージデバイス)としてください。

  • ブロックデバイスとしてください。

uCosminexus Application Runtime with Java for Spring Bootスナップショットログの永続ボリュームを割り当ててください(通常版(uCosminexus Application Runtime with Java for Spring Boot導入あり)の場合だけ)。

Podライフサイクル設定

terminationGracePeriodSecondsを次のとおり設定してください。

  • 安全な停止待機秒数(terminationGracePeriodSeconds)

    推奨値「330」

注※1

OrchestratorのDependency-Checkerコンテナで指定するターゲットKubernetesオブジェクト群については、「表5‒20 MediatorのDependency-Checkerコンテナの要件」を参照してください。

注※2

V.R.Sは使用するHMP-PCTOのバージョンに合わせて読み替えてください。

<制限事項>

スケーリングは不可とします(手動/自動、スケールアウト/インに関係なく)。

コンテナごとの要件を次に示します。

表5‒20 MediatorのDependency-Checkerコンテナの要件

項目

要件

コマンド

次に示すコマンド引数(args)を設定します。

  • 第1引数(リトライ回数)

    推奨値「30」

  • 第2引数(リトライ間隔秒数)

    推奨値「10」

  • 第3引数(接続タイムアウト秒数)

    推奨値「10」

  • 第4引数(応答タイムアウト秒数)

    推奨値「10」

  • 第5引数以降(ターゲットKubernetesオブジェクト群)

    <対象Kubernetesアプリケーション>

    Logstash、Jaeger-query、Jaeger-collector、Prometheus、Metricbeat、Filebeat

    例を次に示します。

    (例)

    my-namespace/deployments/logstash

    my-namespace/deployments/jaeger-query

    my-namespace/deployments/jaeger-collector

    my-namespace/deployments/prometheus

    my-namespace/deployments/metricbeat

    my-namespace/daemonsets/filebeat

(エントリポイントはDependency-Checkerコンテナイメージで「HMP-PCTOのデプロイ依存関係チェックスクリプト(dependency_check.sh)」を設定済みです)

ネットワーク設定

設定しません(デフォルト)。

コンフィグ設定

設定しません(デフォルト)。

コンテナセキュリティコンテキスト

設定しません(デフォルト)。

コンテナライフサイクル設定

設定しません(デフォルト)。

CPU/メモリリソース制限

設定しません(デフォルト)。

表5‒21 Mediatorコンテナの要件

項目

要件

コマンド

設定しません(デフォルト)。

ネットワーク設定

Kubernetesクラスタ内のHeadless Service(ClusterIP: None)で次のポートを公開してください(Serviceリソース)。

  • MediatorのgRPCポート番号(Participant,Orchestrator向け)

    プロトコル:TCP

    公開ポート:Mediatorのjp.co.Hitachi.soft.hmppcto.grpc.portパラメタに設定したポート番号

    コンテナポート:Mediatorのjp.co.Hitachi.soft.hmppcto.grpc.portパラメタに設定したポート番号

  • Prometheusメトリクス収集で使用するhttpポート番号

    プロトコル:TCP

    公開ポート:Mediatorのserver.portパラメタに設定したポート番号

    コンテナポート:Mediatorのserver.portパラメタに設定したポート番号

コンフィグ設定

次のHMP-PCTOのパラメタを、Spring Bootのコンフィグソースに設定してください。

次のとおりファイルを配置します。

  • ファイル:Spring Bootのコンフィグソース

    キー名:application.properties

    マウント先:/deployments/config/application.properties

HMP-PCTOのgRPC通信の暗号化を有効にする場合(Helmチャートのgrpc.useTlsがtrue)、取扱説明書「HMP-PCTO テクニカルガイド(SQL-Participant編)」、または取扱説明書「HMP-PCTO テクニカルガイド(TCC-Participant編)」の各プロセスの認証種別ごとに必要となるファイルの一覧に関する説明に示すとおりgRPC通信機能の暗号化通信で必要となるファイルをコンテナ内にマウントしてください。

次のとおりファイルを配置します。

  • ファイル:接続先サーバのサーバ証明書を発行したCAの証明書(PEM形式)ファイル

    キー名:ca.crt

    マウント先:/cert/ca.crt

  • ファイル:自サーバ証明書(PEM形式)ファイル

    キー名:server.crt

    マウント先:/cert/server.crt

  • ファイル:自サーバ証明書を作成した秘密鍵ファイル

    キー名:server.key

    マウント先:/cert/server.key

さらに、クライアント認証を行う場合(Helmチャートのgrpc.tls.clientAuth.enabledがtrue)は、次のとおりファイルを配置します。

  • ファイル:自クライアント証明書ファイル(PEM形式)

    キー名:client.crt

    マウント先:/cert/client.crt

  • ファイル:自クライアント証明書を作成した秘密鍵ファイル

    キー名:client.key

    マウント先:/cert/client.key

  • ファイル:接続元クライアント(orchestrator,participant)の秘密鍵が格納されているキーストア(pkcs12またはJKS)ファイル

    キー名:keystore

    マウント先:/cert/keystore

  • ファイル:キーストアファイルのパスワード

    キー名:keystore_password

    マウント先:application.propertiesのjp.co.Hitachi.soft.hmppcto.grpc.tls.server.client-auth.passwordパラメタの値に設定

「MediatorのgRPC通信機能の暗号化通信用シークレット」をユーザが作成します(「(3) Orchestrator、ParticipantのgRPC通信機能の暗号化通信用シークレットの作成」を参照してください)。

ユーザが作成した「MediatorのgRPC通信機能の暗号化通信用シークレット」をStatefulSetから参照する際、Helmチャートのgrpc.tls.secretName パラメタに指定されているSecretオブジェクト名で参照してください。

環境変数TZでタイムゾーンを設定します。ユーザ責務のコンテナと同じタイムゾーンに設定することを推奨します。デフォルト値は日本標準時(Asia/Tokyo、UTC+09:00)です。

Helmチャートのtimezoneパラメタで、Mediatorコンテナのタイムゾーンを指定します。

Helmチャートのjava.optionsパラメタでMediatorのJavaプロセス起動時にJava VMに渡すオプションを指定してください。

uCosminexus Application Runtime with Java for Spring Bootの設定ファイル(config.properties)をコンテナ内にマウントしてください(通常版(uCosminexus Application Runtime with Java for Spring Boot導入あり)の場合だけ)。

次のとおりファイルを配置してください。

  • ファイル:uCosminexus Application Runtime with Java for Spring Bootの設定ファイル

    キー名:config.properties

    マウント先:/opt/hitachi/ucars/conf/config.properties

コンテナセキュリティコンテキスト

設定しません(デフォルト)。

コンテナライフサイクル設定

Liveness Probeを次のとおり設定してください。
  • コマンド実行

    パス:HMP-PCTOのトランザクションヘルスチェックスクリプト(health_check.sh)

    第1引数(リトライ回数):「0」固定(Liveness Probeの設定でリトライするため)

    第2引数(リトライ間隔秒数):「0」固定(Liveness Probeの設定でリトライするため)

    第3引数(接続タイムアウト秒数):推奨値「10」

    第4引数(応答タイムアウト秒数):推奨値「10」

    第5引数(HTTPポート番号):Mediatorのserver.portパラメタに設定したポート番号

  • 初回Probe実行待機秒数(initialDelaySeconds)

    推奨値「180」

  • Probe実行間隔秒数(periodSeconds)

    推奨値「30」

  • Probe最大失敗回数(failureThreshold)

    推奨値「3」

  • Probeタイムアウト秒数(timeoutSeconds)

    推奨値「10」

postStartフックを次のとおり設定してください。
  • コマンド実行

    パス:HMP-PCTOのトランザクションヘルスチェックスクリプト(health_check.sh)

    第1引数(リトライ回数):推奨値「30」

    第2引数(リトライ間隔秒数):推奨値「10」

    第3引数(接続タイムアウト秒数):推奨値「10」

    第4引数(応答タイムアウト秒数):推奨値「10」

    第5引数(HTTPポート番号):Mediatorのserver.portパラメタに設定したポート番号

preStopフックを次のとおり設定してください。
  • コマンド実行

    パス:HMP-PCTOの未決着トランザクション待機スクリプト(wait_transactions.sh)

    第1引数(リトライ回数):推奨値「30」

    第2引数(リトライ間隔秒数):推奨値「10」

    第3引数(接続タイムアウト秒数):推奨値「10」

    第4引数(応答タイムアウト秒数):推奨値「10」

    第5引数(HTTPポート番号):Mediatorのserver.portパラメタに設定したポート番号

CPU/メモリリソース制限

実稼働を通して、環境に合わせた設定を実施してください。

Helmチャートのディレクトリ/ファイル構成を次の表に示します。

表5‒22 MediatorのHelmチャートのディレクトリ/ファイル構成

ディレクトリ/ファイル

説明

templates/

Helmチャートのtemplate配置用ディレクトリ

includes/

HelmチャートのConfigMapオブジェクトの設定内容外部化ファイル配置用ディレクトリ

application.properties.tpl

MediatorのConfigMapオブジェクトの設定内容外部化ファイル

mediator-config-map-data.yaml

MediatorのConfigMapオブジェクトの設定内容外部化ファイル

config.properties.tpl

uCosminexus Application Runtime with Java for Spring BootのConfigMapオブジェクトの設定内容外部化ファイル

ucars-config-map-data.yaml

uCosminexus Application Runtime with Java for Spring BootのConfigMapオブジェクトの設定内容外部化ファイル

mediator-config-map.yaml

MediatorのConfigMapオブジェクトのマニフェスト

ucars-config-map.yaml

uCosminexus Application Runtime with Java for Spring BootのConfigMapオブジェクトのマニフェスト

service.yaml

Serviceオブジェクトのマニフェスト

serviceaccount.yaml

ServiceAccountオブジェクトのマニフェスト

statefulset.yaml

StatefulSetオブジェクトのマニフェスト

Chart.yaml

Chart.yaml

values.yaml

values.yaml

values.schema.json

values.yamlの設定値のバリデーション用ファイル