2.6.5 TCC-ParticipantのKubernetesマニフェストの作成(TCC-Participant限定)
「6.4.4 TCC-Participantの要件」に記載されている要件を満たすように、ParticipantをデプロイするためのKubernetesマニフェストを作成してください。
Kubernetesマニフェストの記述例を次に示します。
apiVersion: apps/v1 …1 kind: Deployment metadata: name: tcc-participant namespace: my-namespace spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: tcc-participant template: metadata: labels: app.kubernetes.io/name: tcc-participant spec: serviceAccount: tcc-participant-service-account …11 initContainers: - name: dependency-checker …2 image: myregistry.example.com/myproject/dependency-checker:V.R.S※ args: - "30" - "10" - "10" - "10" - my-namespace/statefulsets/mediator - my-namespace/statefulsets/eads-server …21 containers: - name: entity-module-tcc-participant …3 image: myregistry.example.com/myproject/entity-module-tcc-participant:V.R.S※ resources: …22 limits: cpu: 2 memory: 1Gi requests: cpu: 1 memory: 512Mi ports: - name: http …4 containerPort: 8080 protocol: TCP - name: grpc …5 containerPort: 20552 protocol: TCP - name: ucars containerPort: 28081 …20 protocol: TCP env: - name: TZ …13 value: Asia/Tokyo - name: HMPPCTO_JAVA_OPTIONS …17 value: -XX:+UseG1GC volumeMounts: - name: entity-module-tcc-participant-config …6 mountPath: /deployments/config - name: ucars-config …18 mountPath: /opt/hitachi/ucars/conf - name: snapshot-volume …19 mountPath: /ucars-snapshots - name: eads-config …12 mountPath: /eads-properties - name: tomcat …15 mountPath: /deployments/tomcat - name: eads …16 mountPath: /deployments/eads-log livenessProbe: …7 exec: command: - /deployments/health_check.sh - "0" - "0" - "10" - "10" - "8080" initialDelaySeconds: 180 periodSeconds: 30 failureThreshold: 3 timeoutSeconds: 10 lifecycle: postStart: …8 exec: command: - /deployments/health_check.sh - "30" - "10" - "10" - "10" - "8080" preStop: …9 exec: command: - /deployments/wait_transactions.sh - "30" - "10" - "10" - "10" - "8080" - name: filebeat-sidecar image: myregistry.example.com/myproject/filebeat:V.R.S※ args: - "-e" - "-E" - "http.enabled=true" env: …23 - name: HMPPCTO_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: HMPPCTO_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: HMPPCTO_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName livenessProbe: exec: command: - sh - -c - | #!/usr/bin/env bash -e curl --fail 127.0.0.1:5066 initialDelaySeconds: 10 periodSeconds: 10 failureThreshold: 3 timeoutSeconds: 5 readinessProbe: exec: command: - sh - -c - | #!/usr/bin/env bash -e filebeat test output initialDelaySeconds: 10 periodSeconds: 10 failureThreshold: 3 timeoutSeconds: 5 …14 securityContext: runAsUser: 0 volumeMounts: - name: beatconfig mountPath: /usr/share/filebeat/filebeat.yml readOnly: true subPath: filebeat.yml - name: tomcat mountPath: /deployments/tomcat - name: eads mountPath: /deployments/eads-log terminationGracePeriodSeconds: 330 …10 volumes: - name: entity-module-tcc-participant-config …6 configMap: name: entity-module-tcc-participant-config items: - key: application.properties path: application.properties - name: ucars-config …18 configMap: name: entity-module-tcc-participant-ucars-config items: - key: config.properties path: config.properties - name: snapshot-volume …19 persistentVolumeClaim: claimName: snapshot-volume - name: eads-config …12 configMap: name: eads-config items: - key: hmp-pcto.eads-client.properties path: hmp-pcto.eads-client.properties - name: beatconfig configMap: name: tcc-p-filebeat-sidecar-config - name: tomcat - name: eads --- apiVersion: v1 kind: Service metadata: name: tp namespace: my-namespace spec: type: ClusterIP selector: app.kubernetes.io/name: tcc-participant ports: - name: http …4 protocol: TCP port: 8080 targetPort: http - name: grpc …5 protocol: TCP port: 20552 targetPort: grpc - name: ucars protocol: TCP port: 28081 …20 targetPort: ucars --- apiVersion: v1 …6 kind: ConfigMap metadata: name: entity-module-tcc-participant-config namespace: my-namespace data: application.properties: | server.port=8080 server.tomcat.accesslog.enabled=true server.tomcat.basedir=tomcat jp.co.Hitachi.soft.hmppcto.tcc.pod.service-name=tp.my-namespace jp.co.Hitachi.soft.hmppcto.client.proposer.type=TCC jp.co.Hitachi.soft.hmppcto.mediator.name=mediator jp.co.Hitachi.soft.hmppcto.mediator.name-suffix=.mediator.my-namespace.svc.cluster.local jp.co.Hitachi.soft.hmppcto.mediator.port=20551 jp.co.Hitachi.soft.hmppcto.tracing.url=http://jaeger-collector:14268/api/traces --- apiVersion: v1 …18 kind: ConfigMap metadata: name: entity-module-tcc-participant-ucars-config namespace: my-namespace data: config.properties: | monitor.rest.bindaddress=0.0.0.0 monitor.rest.port=28081 …20 snapshot.log.filepath=/ucars-snapshots/${HOSTNAME}/snapshot --- apiVersion: v1 …12 kind: ConfigMap metadata: name: eads-config namespace: my-namespace data: hmp-pcto.eads-client.properties: | eads.client.connect.servers=sv1,sv2,sv3 eads.client.sv1.address=eads-service-eads-service-0.my-namespace eads.client.sv1.port=24600 eads.client.sv2.address=eads-service-eads-service-1.my-namespace eads.client.sv2.port=24600 eads.client.sv3.address=eads-service-eads-service-2.my-namespace eads.client.sv3.port=24600 eads.client.logger.dir=eads-log eads.client.connectionPool.poolsize=1 --- apiVersion: v1 …11 kind: ServiceAccount metadata: name: tcc-participant-service-account namespace: my-namespace --- apiVersion: v1 …14 kind: ConfigMap metadata: name: tcc-p-filebeat-sidecar-config namespace: my-namespace data: filebeat.yml: | filebeat.inputs: - type: filestream id: "eads" paths: - '/deployments/eads-log/eads_client_message*.log' - '/deployments/eads-log/maintenance/eads_client_maintenance*.log' - type: filestream id: "tomcat" paths: - '/deployments/tomcat/logs/access_log.*.log' processors: …23 - add_fields: target: kubernetes fields: namespace: ${HMPPCTO_POD_NAMESPACE} pod: name: ${HMPPCTO_POD_NAME} node: name: ${HMPPCTO_NODE_NAME} output.logstash: hosts: ["logstash.my-namespace.svc.cluster.local:5044"]
- 注※
-
V.R.Sは使用するHMP-PCTOとFilebeatのバージョンに合わせて読み替えてください。
記述例の番号は、説明の番号と対応しています。
<説明>
この例では、各KubernetesオブジェクトのNamespace名(.metadata.namespaceフィールド)は、「my-namespace」としています。
-
ワークロードリソースを定義します。この例では、ワークロードリソースを「Deployment」としています。
-
初期化コンテナ構成にDependency-Checkerコンテナを定義します。「3.4.5 Dependency-Checkerコンテナイメージの作成(通常版限定)」で作成したコンテナイメージを指定します。
-
コンテナ構成にEntity-Module/TCC-Participantコンテナを定義します。「2.4.8 Entity-Module/TCC-Participantコンテナイメージの作成(TCC-Participant限定)」で作成したコンテナイメージを指定します。
-
ユーザ責務のKubernetesアプリケーション(およびPrometheus向け)で使用する各種ポート番号をKubernetesクラスタ内で公開するように定義します。この例では、アプリケーションが使用するポートをTCPプロトコルの8080ポートとしています。
-
TCC-ParticipantのgRPCポート番号(Mediator向け)をKubernetesクラスタ内で公開するように定義します。TCC-Participantのjp.co.Hitachi.soft.hmppcto.tcc.mediator.portパラメタの設定値と同じポート番号を指定します。
-
Entity-Module/TCC-Participantコンテナのパラメタを、Spring Bootのコンフィグソースに設定するように定義します。この例では、必須パラメタだけ指定しています。
-
コンテナライフサイクル設定のLiveness Probeを定義します。
-
コンテナライフサイクル設定のpostStartフックを定義します。
-
コンテナライフサイクル設定のpreStopフックを定義します。
-
Podライフサイクル設定のterminationGracePeriodSecondsを定義します。
-
Podに対するロールベースアクセス制御(RBAC)に使用するServiceAccountを定義します。
-
EADSクライアント定義のパラメタを、EADSクライアント定義ファイルのコンフィグソースに設定するように定義します。この例では、必須パラメタだけ指定しています。EADSクライアント定義ファイルのディレクトリおよび名称は「8.2.5 TCC-Participant」のパラメタjp.co.Hitachi.soft.hmppcto.external-consensus.eads.propertiesに指定した値と合わせる必要があります。
トライアル版の場合、この定義は必要ありません。
-
Entity-Module/TCC-Participantコンテナのタイムゾーンを設定します。設定するタイムゾーンはユーザ任意です。この例では、タイムゾーンを日本標準時(Asia/Tokyo、UTC+09:00)としています。
-
FilebeatのSidecarコンテナを定義します。 /usr/share/filebeat/filebeat.yml にFilebeatの設定ファイルをマウントします。この設定によってEADSからのログをFilebeatが取得します。なお、output.logstashフィールドのNamespace名にはLogstashアプリケーションをデプロイするNamespaceを指定します。
-
Tomcatのベースディレクトリとして /deployments/tomcat をマウントします。
-
EADSのログ出力ディレクトリとして/deployments/eads-logをマウントします。
-
Entity-Module/TCC-ParticipantのJavaプロセス起動時にJava VMに渡すオプションを設定します。設定するオプションはユーザ任意です(ただし、「-XX:+UseG1GC」オプションは必ず含めてください)。この例では、オプションを「-XX:+UseG1GC」だけとしています。
-
オレンジ色の背景で示す行は、uCosminexus Application Runtime with Java for Spring Boot導入ありの場合だけ記述します。
uCosminexus Application Runtime with Java for Spring Bootの設定ファイル(config.properties)をEntity-Module/TCC-Participantコンテナ内にマウントします。この例では、次のパラメタを設定しています。
-
monitor.rest.bindaddress=0.0.0.0
プロセスモニタのHTTP機能に割り当てるIPアドレスを定義します。コンテナ外部から通信を受け付けることができるようにするために、設定を行います。
-
monitor.rest.port=28081
プロセスモニタのHTTP機能の受付ポート番号を定義します。
-
snapshot.log.filepath=/ucars-snapshots/${HOSTNAME}/snapshot
異常検知時のスナップショットログ出力先を、永続ボリュームにマウントするパスに変更します。親ディレクトリ名に「${HOSTNAME}」を採用してコンテナごとに異なるディレクトリに出力されるようにすることで、同時刻に複数のコンテナから同じファイル名で出力することを防止できます。
スナップショットログの収集対象を追加したい場合は、「10.6.2 情報の収集方法」を参照して設定してください。
-
-
オレンジ色の背景で示す行は、uCosminexus Application Runtime with Java for Spring Boot導入ありの場合だけ記述します。
uCosminexus Application Runtime with Java for Spring Bootスナップショットログの永続ボリュームをEntity-Module/TCC-Participantコンテナ内にマウントします。.spec.template.spec.volumes[].persistentVolumeClaim.claimNameフィールドには、「2.6.8 uCosminexus Application Runtime with Java for Spring Bootスナップショットログの永続ボリュームおよび永続ボリューム要求のKubernetesマニフェストの作成(通常版限定)」で作成するuCosminexus Application Runtime with Java for Spring BootスナップショットログのPersistentVolumeClaimリソースの名称(.metadata.nameフィールドに指定した値)を設定してください。この例では、PersistentVolumeClaimリソースの名称を「snapshot-volume」としています。
-
オレンジ色の背景で示す行は、uCosminexus Application Runtime with Java for Spring Boot導入ありの場合だけ記述します。
uCosminexus Application Runtime with Java for Spring Bootのスナップショットログの手動取得のため、HTTP機能として公開する受付ポート番号を定義します。
-
通常版の場合はmy-namespace/statefulsets/eads-serverを記載してください。トライアル版の場合はmy-namespace/deployments/ext-consを記載してください。
-
Entity-Module/TCC-Participantコンテナのリソースを設定します。実稼働を通して、環境に合わせた設定を実施してください。
-
Kibanaなどの可視化ツールで検索する際、条件として使用するフィールドを付与するために環境変数を設定します。また、環境変数を使用してフィールドを付与する設定をConfigMapに記載します。
- 重要
-
Kubernetesマニフェスト作成時の注意事項
-
Kubernetesマニフェストは、行頭のインデント(文字の開始位置)が厳密に評価されます。注意して作成してください。
-
TCC-Participantを構成するPodを定義したKubernetesのServiceのService名とネームスペース名の長さの合計は、40バイト以下としてください。
-