2.5.5 SQL-ParticipantのKubernetesマニフェストの作成(SQL-Participant限定)
「5.4.3 SQL-Participantの要件」に記載されている要件を満たすように、ParticipantをデプロイするためのKubernetesマニフェストを作成してください。
Kubernetesマニフェストの記述例を次に示します。
apiVersion: apps/v1 …1
kind: Deployment
metadata:
name: sql-participant
namespace: my-namespace
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: sql-participant
template:
metadata:
labels:
app.kubernetes.io/name: sql-participant
spec:
serviceAccount: sql-participant-service-account …13
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
- my-namespace/statefulsets/postgresql
containers:
- name: entity-service …3
image: myregistry.example.com/myproject/entity-service:V.R.S※
resources: …29
limits:
cpu: 2
memory: 1Gi
requests:
cpu: 1
memory: 512Mi
ports:
- name: http …4
containerPort: 8080
protocol: TCP
- name: ucars-entity
containerPort: 28082 …28
protocol: TCP
env:
- name: TZ …15
value: Asia/Tokyo
- name: HMPPCTO_JAVA_OPTIONS
value: -XX:+UseG1GC
volumeMounts:
- name: entity-service-config …5
mountPath: /deployments/config
- name: entity-service-ucars-config …22
mountPath: /opt/hitachi/ucars/conf
- name: snapshot-volume …23
mountPath: /ucars-snapshots
- name: tomcat …19
mountPath: /deployments/tomcat
- name: sql-participant …6
image: myregistry.example.com/myproject/sql-participant:V.R.S※
resources: …30
limits:
cpu: 2
memory: 1Gi
requests:
cpu: 1
memory: 512Mi
ports:
- name: grpc …7
containerPort: 20552
protocol: TCP
- name: http …17
containerPort: 8080
protocol: TCP
- name: ucars-sql
containerPort: 28081 …28
protocol: TCP
env:
- name: TZ …16
value: Asia/Tokyo
- name: HMPPCTO_JAVA_OPTIONS
value: -XX:+UseG1GC
volumeMounts:
- name: sql-participant-config …7
mountPath: /deployments/config
- name: sql-participant-ucars-config …24
mountPath: /opt/hitachi/ucars/conf
- name: snapshot-volume …25
mountPath: /ucars-snapshots
- name: eads-config …14
mountPath: /eads-properties
- name: tomcat …19
mountPath: /deployments/tomcat
- name: eads
mountPath: /deployments/eads-log …20
livenessProbe: …9
exec:
command:
- /deployments/health_check.sh
- "0"
- "0"
- "10"
- "10"
- "20555"
initialDelaySeconds: 180
periodSeconds: 30
failureThreshold: 3
timeoutSeconds: 10
lifecycle:
postStart: …10
exec:
command:
- /deployments/health_check.sh
- "30"
- "10"
- "10"
- "10"
- "20555"
preStop: …11
exec:
command:
- /deployments/wait_transactions.sh
- "30"
- "10"
- "10"
- "10"
- "20555"
- name: filebeat-sidecar …18
image: myregistry.example.com/myproject/filebeat:V.R.S※
env: …31
- 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
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 …12
volumes:
- name: entity-service-config …5
configMap:
name: entity-service-config
items:
- key: application.properties
path: application.properties
- name: entity-service-ucars-config …22
configMap:
name: entity-service-ucars-config
items:
- key: config.properties
path: config.properties
- name: snapshot-volume …23,25
persistentVolumeClaim:
claimName: snapshot-volume
- name: sql-participant-config
configMap:
name: sql-participant-config …8
items:
- key: application.properties
path: application.properties
- name: sql-participant-ucars-config …24
configMap:
name: sql-participant-ucars-config
items:
- key: config.properties
path: config.properties
- name: eads-config …14
configMap:
name: eads-config
items:
- key: hmp-pcto.eads-client.properties
path: hmp-pcto.eads-client.properties
- name: beatconfig …18
configMap:
name: sql-p-filebeat-sidecar-config
- name: tomcat
- name: eads
---
apiVersion: v1
kind: Service
metadata:
name: sp
namespace: my-namespace
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: sql-participant
ports:
- name: http …4
protocol: TCP
port: 8080
targetPort: http
- name: grpc …7
protocol: TCP
port: 20552
targetPort: grpc
- name: ucars
protocol: TCP
port: 28081 …28
targetPort: ucars-sql
---
apiVersion: v1 …5
kind: ConfigMap
metadata:
name: entity-service-config
namespace: my-namespace
data:
application.properties: |
server.port=8080
server.tomcat.accesslog.enabled=true
server.tomcat.basedir=tomcat
jp.co.Hitachi.soft.hmppcto.client.proposer.type=SQL
jp.co.Hitachi.soft.hmppcto.tracing.url=http://jaeger-collector:14268/api/traces
spring.datasource.type=jp.co.Hitachi.soft.hmppcto.jdbc.client.PctoDataSource
spring.datasource.driver-class-name=jp.co.Hitachi.soft.hmppcto.jdbc.client.PctoDriver
spring.datasource.url=http://localhost:20553
spring.datasource.username=dummy
spring.datasource.password=dummy
spring.sql.init.mode=never
---
apiVersion: v1 …22
kind: ConfigMap
metadata:
name: entity-service-ucars-config
namespace: my-namespace
data:
config.properties: |
monitor.rest.bindaddress=0.0.0.0
monitor.rest.port=28082 …28
snapshot.log.filepath=/ucars-snapshots/${HOSTNAME}/snapshot
---
apiVersion: v1 …8
kind: ConfigMap
metadata:
name: sql-participant-config
namespace: my-namespace
data:
application.properties: |
server.port=20555
server.tomcat.accesslog.enabled=true
server.tomcat.basedir=tomcat
jp.co.Hitachi.soft.hmppcto.sql.pod.service-name=sp.my-namespace
jp.co.Hitachi.soft.hmppcto.sql.xa-server-name=sql-participant
jp.co.Hitachi.soft.hmppcto.sql.jdbc.driver.path=/deployments/postgresql-42.2.22.jar
jp.co.Hitachi.soft.hmppcto.sql.datasource.class-name=org.postgresql.xa.PGXADataSource
jp.co.Hitachi.soft.hmppcto.sql.datasource.property.values=serverName=postgresql;portNumber=5432;databaseName=appuser1;user=appuser1;password=appuser1
jp.co.Hitachi.soft.hmppcto.sql.pool.max-pool-size=10
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.sql.db-type=PostgreSQL …32
jp.co.Hitachi.soft.hmppcto.tracing.url=http://jaeger-collector:14268/api/traces
---
apiVersion: v1 …24
kind: ConfigMap
metadata:
name: sql-participant-ucars-config
namespace: my-namespace
data:
config.properties: |
monitor.rest.bindaddress=0.0.0.0
monitor.rest.port=28081 …28
snapshot.log.filepath=/ucars-snapshots/${HOSTNAME}/snapshot
---
apiVersion: v1 …14
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 …13
kind: ServiceAccount
metadata:
name: sql-participant-service-account
namespace: my-namespace
---
apiVersion: v1 …18
kind: ConfigMap
metadata:
name: sql-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: …31
- 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のバージョンに合わせて読み替えてください。
記述例の番号1〜32は、説明の番号1.〜32.と対応しています。
<説明>
この例では、各KubernetesオブジェクトのNamespace名(.metadata.namespaceフィールド)は、「my-namespace」としています。
-
ワークロードリソースを定義します。この例では、ワークロードリソースを「Deployment」としています。
-
初期化コンテナ構成にDependency-Checkerコンテナを定義します。「3.3.4 Dependency-Checkerコンテナイメージの作成(通常版限定)」で作成したコンテナイメージを指定します。
-
コンテナ構成にEntity-Serviceコンテナを定義します。「2.4.6 Entity-Serviceコンテナイメージの作成」で作成したコンテナイメージを指定します。
-
ユーザ責務のKubernetesアプリケーション(およびPrometheus向け)で使用する各種ポート番号をKubernetesクラスタ内で公開するように定義します。この例では、アプリケーションが使用するポートをTCPプロトコルの8080ポートとしています。
-
Entity-Serviceコンテナのパラメタを、Spring Bootのコンフィグソースに設定するように定義します。この例では、必須パラメタだけ指定しています。
-
コンテナ構成にSQL-Participantコンテナを定義します。「2.4.7 SQL-Participantコンテナイメージの作成(SQL-Participant限定)」で作成したコンテナイメージを指定します。
-
SQL-ParticipantのgRPCポート番号(Mediator向け)をKubernetesクラスタ内で公開するように定義します。SQL-Participantのjp.co.Hitachi.soft.hmppcto.sql.mediator.portパラメタの設定値と同じポート番号を指定します。
-
SQL-Participantのパラメタを、Spring Bootのコンフィグソースに設定するように定義します。この例では、必須パラメタだけ指定しています。
-
コンテナライフサイクル設定のLiveness Probeを定義します。
-
コンテナライフサイクル設定のpostStartフックを定義します。
-
コンテナライフサイクル設定のpreStopフックを定義します。
-
Podライフサイクル設定のterminationGracePeriodSecondsを定義します。
-
Podに対するロールベースアクセス制御(RBAC)に使用するServiceAccountを定義します。
-
EADSクライアント定義のパラメタを、EADSクライアント定義ファイルのコンフィグソースに設定するように定義します。この例では、必須パラメタだけ指定しています。EADSクライアント定義ファイルのディレクトリおよび名称は「7.2.4 SQL-Participant」のパラメタjp.co.Hitachi.soft.hmppcto.external-consensus.eads.propertiesに指定した値と合わせる必要があります。
トライアル版の場合、この定義は必要ありません。
-
Entity-Serviceコンテナのタイムゾーンを設定します。設定するタイムゾーンはユーザ任意です。この例では、タイムゾーンを日本標準時(Asia/Tokyo、UTC+09:00)としています。
-
SQL-Participantコンテナのタイムゾーンを設定します。設定するタイムゾーンはユーザ任意です。この例では、タイムゾーンを日本標準時(Asia/Tokyo、UTC+09:00)としています。
-
Prometheus向けで使用する各種ポート番号をKubernetesクラスタ内で公開するように定義します。この例では、アプリケーションが使用するポートをTCPプロトコルの8080ポートとしています。
-
FilebeatのSidecarコンテナを定義します。 /usr/share/filebeat/filebeat.yml にFilebeatの設定ファイルをマウントします。この設定によってEADSからのログをFilebeatが取得します。なお、output.logstashフィールドのNamespace名にはLogstashアプリケーションをデプロイするNamespaceを指定します。
-
Tomcatのベースディレクトリとして /deployments/tomcat をマウントします。
-
EADSのログ出力ディレクトリとして/deployments/eads-logをマウントします。
-
通常版の場合はmy-namespace/statefulsets/eads-serverを記載してください。トライアル版の場合はmy-namespace/deployments/ext-consを記載してください。
-
Entity-ServiceのJavaプロセス起動時にJava VMに渡すオプションを設定します。設定するオプションはユーザ任意です(ただし、「-XX:+UseG1GC」オプションは必ず含めてください)。この例では、オプションを「-XX:+UseG1GC」だけとしています。
-
SQL-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-Serviceコンテナ内にマウントします。この例では、次のパラメタを設定しています。
-
monitor.rest.bindaddress=0.0.0.0
プロセスモニタのHTTP機能に割り当てるIPアドレスを定義します。コンテナ外部から通信を受け付けることができるようにするために、設定を行います。
-
monitor.rest.port=28082
プロセスモニタのHTTP機能の受付ポート番号を定義します。設定値はデフォルト値(28081)とは異なるポート番号に変更します。これは、同一Pod内に起動するEntity-ServiceコンテナとSQL-Participantコンテナでポート番号の重複を避けるためです。
-
snapshot.log.filepath=/ucars-snapshots/${HOSTNAME}/snapshot
異常検知時のスナップショットログ出力先を、永続ボリュームにマウントするパスに変更します。親ディレクトリ名に「${HOSTNAME}」を採用してコンテナごとに異なるディレクトリに出力されるようにすることで、同時刻に複数のコンテナから同じファイル名で出力することを防止できます。
-
-
オレンジ色の背景で示す行は、uCosminexus Application Runtime with Java for Spring Boot導入ありの場合だけ記述します。
uCosminexus Application Runtime with Java for Spring Bootスナップショットログの永続ボリュームをEntity-Serviceコンテナ内にマウントします。
.spec.template.spec.volumes[].persistentVolumeClaim.claimNameフィールドには、「2.5.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の設定ファイル(config.properties)をSQL-Participantコンテナ内にマウントします。この例では、次のパラメタを設定しています。
-
monitor.rest.bindaddress=0.0.0.0
プロセスモニタのHTTP機能に割り当てるIPアドレスを定義します。コンテナ外部から通信を受け付けることができるようにするために、設定を行います。
-
monitor.rest.port=28081
プロセスモニタのHTTP機能の受付ポート番号を定義します。
-
snapshot.log.filepath=/ucars-snapshots/${HOSTNAME}/snapshot
異常検知時のスナップショットログ出力先を、永続ボリュームにマウントするパスに変更します。親ディレクトリ名に「${HOSTNAME}」を採用してコンテナごとに異なるディレクトリに出力されるようにすることで、同時刻に複数のコンテナから同じファイル名で出力することを防止できます。
-
-
オレンジ色の背景で示す行は、uCosminexus Application Runtime with Java for Spring Boot導入ありの場合だけ記述します。
uCosminexus Application Runtime with Java for Spring Bootスナップショットログの永続ボリュームをSQL-Participantコンテナ内にマウントします。.spec.template.spec.volumes[].persistentVolumeClaim.claimNameフィールドには、「2.5.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機能として公開する受付ポート番号を定義します。
-
Entity-Serviceコンテナのリソースを設定します。実稼働を通して、環境に合わせた設定を実施してください。
-
SQL-Participantコンテナのリソースを設定します。実稼働を通して、環境に合わせた設定を実施してください。
-
Kibanaなどの可視化ツールで検索する際、条件として使用するフィールドを付与するために環境変数を設定します。また、環境変数を使用してフィールドを付与する設定をConfigMapに記載します。
-
SQL-Participantが接続するRDBMSを指定します。PostgreSQLを指定する場合、「7.3.11 PostgreSQL(SQL-Participant限定)」のパラメタも確認してください。
- 重要
-
Kubernetesマニフェスト作成時の注意事項
Kubernetesマニフェストは、行頭のインデント(文字の開始位置)が厳密に評価されます。注意して作成してください。