Helm Charts の入門 (ScalarDL Ledger / Ledger のみ)
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、Kubernetes クラスター上の Helm Chart をテスト環境として使用して、ScalarDL Ledger を開始する方法について説明します。 ここでは、テスト用の Mac または Linux 環境がすでにあることを前提としています。 このドキュメントでは Minikube を使用しますが、これから説明する手順はどの Kubernetes クラスターでも機能するはずです。
要件
以下のコンテナイメージを入手するには、AWS Marketplace または Azure Marketplace でScalarDL Ledgerを購読する必要があります。
- AWS Marketplace
- scalar-ledger
- scalar-ledger-envoy
- scalardl-schema-loader-ledger
- Azure Marketplace
- scalar-ledger
- scalardl-envoy
- scalardl-schema-loader
詳細については、以下のドキュメントを参照してください。
- How to install Scalar products through AWS Marketplace
- How to install Scalar products through Azure Marketplace
私たちが作るもの
次のように、次のコンポーネントを Kubernetes クラスターにデプロイします。
+--------------------------------------------------------------------------------------------------------------------------------------+
| [Kubernetes クラスター] |
| |
| [ポッド] [ポッド] [ポッド] [ポッド] |
| |
| +-------+ +-----------------+ |
| +---> | Envoy | ---+ +---> | ScalarDL Ledger | ---+ |
| | +-------+ | | +-----------------+ | |
| | | | | |
| +--------+ +---------+ | +-------+ | +-------------------+ | +-----------------+ | +------------+ |
| | クライアント | ---> | サービス | ---+---> | Envoy | ---+---> | サービス | ---+---> | ScalarDL Ledger | ---+---> | PostgreSQL | |
| +--------+ | (Envoy) | | +-------+ | | (ScalarDL Ledger) | | +-----------------+ | +------------+ |
| +---------+ | | +-------------------+ | | |
| | +-------+ | | +-----------------+ | |
| +---> | Envoy | ---+ +---> | ScalarDL Ledger | ---+ |
| +-------+ +-----------------+ |
| |
+--------------------------------------------------------------------------------------------------------------------------------------+
ステップ 1. Kubernetes クラスターを開始する
まず、Kubernetes クラスターを準備する必要があります。 minikube 環境を使 用する場合は、Scalar Helm Charts の入門 を参照してください。 すでに Kubernetes クラスターを開始している場合は、この手順をスキップできます。
ステップ 2. PostgreSQL コンテナーを開始する
ScalarDL Ledger は、バックエンド データベースとして何らかのデータベース システムを使用します。 このドキュメントでは PostgreSQL を使用します。
次のようにして、Kubernetes クラスターに PostgreSQL をデプロイできます。
-
Bitnami Helm リポジトリを追加します。
helm repo add bitnami https://charts.bitnami.com/bitnami
-
PostgreSQLをデプロイします。
helm install postgresql-ledger bitnami/postgresql \
--set auth.postgresPassword=postgres \
--set primary.persistence.enabled=false -
PostgreSQL コンテナが実行されているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
postgresql-ledger-0 1/1 Running 0 11s
ステップ 3. 作業ディレクトリを作成する
いくつかの構成ファイルとキー/証明書ファイルをローカルに作成します。 したがって、それらの作業ディレクトリを作成します。
- 作業ディレクトリを作成します。
mkdir -p ~/scalardl-test/certs/
ステップ 4. キー/証明書ファイルを作成する
注記:このガイドでは、テストに自己署名証明書を使用します。 ただし、これらの証明書を運用環境では使用しないことを強くお勧めします。
-
作業ディレクトリを
~/scalardl-test/certs/
ディレクトリに変更します。cd ~/scalardl-test/certs/
-
Ledger 情報を含む JSON ファイルを作成します。
cat << 'EOF' > ~/scalardl-test/certs/ledger.json
{
"CN": "ledger",
"hosts": ["example.com","*.example.com"],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"O": "ledger",
"OU": "test team",
"L": "Shinjuku",
"ST": "Tokyo",
"C": "JP"
}
]
}
EOF -
クライアント情報を含む JSON ファイルを作成します。
cat << 'EOF' > ~/scalardl-test/certs/client.json
{
"CN": "client",
"hosts": ["example.com","*.example.com"],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"O": "client",
"OU": "test team",
"L": "Shinjuku",
"ST": "Tokyo",
"C": "JP"
}
]
}
EOF -
Ledger のキー/証明書ファイルを作成します。
cfssl selfsign "" ./ledger.json | cfssljson -bare ledger
-
クライアントのキー/証明書ファイルを作成します。
cfssl selfsign "" ./client.json | cfssljson -bare client
-
キー/証明書ファイルが作成されたことを確認します。
ls -1
【コマンド実行結果】
client-key.pem
client.csr
client.json
client.pem
ledger-key.pem
ledger.csr
ledger.json
ledger.pem
ステップ 5. Helm Charts を使用して ScalarDL Ledger の DB スキーマを作成する
Helm Charts を使用して、ScalarDL Schema Loader を Kubernetes クラスターにデプロイします。 ScalarDL Schema Loader は、PostgreSQL で ScalarDL Ledger の DB スキーマを作成します。
-
作業ディレクトリを
~/scalardl-test/
に変更します。cd ~/scalardl-test/
-
Scalar helm リポジトリを追加します。
helm repo add scalar-labs https://scalar-labs.github.io/helm-charts
-
AWS/Azure Marketplace から ScalarDL コンテナー イメージをプルするためのシークレット リソースを作成します。
- AWS Marketplace
kubectl create secret docker-registry reg-ecr-mp-secrets \
--docker-server=709825985650.dkr.ecr.us-east-1.amazonaws.com \
--docker-username=AWS \
--docker-password=$(aws ecr get-login-password --region us-east-1) - Azure Marketplace
kubectl create secret docker-registry reg-acr-secrets \
--docker-server=<your private container registry login server> \
--docker-username=<Service principal ID> \
--docker-password=<Service principal password>
詳細については、以下のドキュメントを参照してください。
- AWS Marketplace
-
ScalarDL Schema Loader のカスタム値ファイル (schema-loader-ledger-custom-values.yaml) を作成します。
-
AWS Marketplace
cat << 'EOF' > ~/scalardl-test/schema-loader-ledger-custom-values.yaml
schemaLoading:
schemaType: "ledger"
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardl-schema-loader-ledger"
version: "3.6.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
databaseProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
secretName: "ledger-credentials-secret"
EOF -
Azure Marketplace
cat << 'EOF' > ~/scalardl-test/schema-loader-ledger-custom-values.yaml
schemaLoading:
schemaType: "ledger"
image:
repository: "<your private container registry>/scalarinc/scalardl-schema-loader"
version: "3.6.0"
imagePullSecrets:
- name: "reg-acr-secrets"
databaseProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
secretName: "ledger-credentials-secret"
EOF
-
-
PostgreSQL のユーザー名とパスワードを含むシークレット リソースを作成します。
kubectl create secret generic ledger-credentials-secret \
--from-literal=SCALAR_DL_LEDGER_POSTGRES_USERNAME=postgres \
--from-literal=SCALAR_DL_LEDGER_POSTGRES_PASSWORD=postgres -
ScalarDL Schema Loader をデプロイします。
helm install schema-loader-ledger scalar-labs/schema-loading -f ./schema-loader-ledger-custom-values.yaml
-
ScalarDL Schema Loader ポッドがデプロイされ、完了しているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
postgresql-ledger-0 1/1 Running 0 11m
schema-loader-ledger-schema-loading-46rcr 0/1 Completed 0 3sScalarDL Schema Loader ポッドが ContainerCreating または Running の場合は、プロセスが完了するまで待ちます (STATUS は Completed になります)。
ステップ 6. Helm Charts を使用して Kubernetes クラスターに ScalarDL Ledger をデプロイする
-
ScalarDL Ledger のカスタム値ファイル (scalardl-ledger-custom-values.yaml) を作成します。
-
AWS Marketplace
cat << 'EOF' > ~/scalardl-test/scalardl-ledger-custom-values.yaml
envoy:
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalar-ledger-envoy"
version: "1.3.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
ledger:
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalar-ledger"
version: "3.6.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
ledgerProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
scalar.dl.ledger.proof.enabled=true
scalar.dl.ledger.proof.private_key_path=/keys/private-key
secretName: "ledger-credentials-secret"
extraVolumes:
- name: "ledger-keys"
secret:
secretName: "ledger-keys"
extraVolumeMounts:
- name: "ledger-keys"
mountPath: "/keys"
readOnly: true
EOF -
Azure Marketplace
cat << 'EOF' > ~/scalardl-test/scalardl-ledger-custom-values.yaml
envoy:
image:
repository: "<your private container registry>/scalarinc/scalardl-envoy"
version: "1.3.0"
imagePullSecrets:
- name: "reg-acr-secrets"
ledger:
image:
repository: "<your private container registry>/scalarinc/scalar-ledger"
version: "3.6.0"
imagePullSecrets:
- name: "reg-acr-secrets"
ledgerProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
scalar.dl.ledger.proof.enabled=true
scalar.dl.ledger.proof.private_key_path=/keys/private-key
secretName: "ledger-credentials-secret"
extraVolumes:
- name: "ledger-keys"
secret:
secretName: "ledger-keys"
extraVolumeMounts:
- name: "ledger-keys"
mountPath: "/keys"
readOnly: true
EOF
-
-
秘密リソース
ledger-keys
を作成します。kubectl create secret generic ledger-keys --from-file=private-key=./certs/ledger-key.pem
-
ScalarDL Ledger をデプロイします。
helm install scalardl-ledger scalar-labs/scalardl -f ./scalardl-ledger-custom-values.yaml
-
ScalarDL Ledger ポッドがデプロイされているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
postgresql-ledger-0 1/1 Running 0 14m
scalardl-ledger-envoy-547bbf7546-6cn88 1/1 Running 0 52s
scalardl-ledger-envoy-547bbf7546-rpg5p 1/1 Running 0 52s
scalardl-ledger-envoy-547bbf7546-x2vlg 1/1 Running 0 52s
scalardl-ledger-ledger-9bdf7f8bd-29bzm 1/1 Running 0 52s
scalardl-ledger-ledger-9bdf7f8bd-9fklw 1/1 Running 0 52s
scalardl-ledger-ledger-9bdf7f8bd-9tw5x 1/1 Running 0 52s
schema-loader-ledger-schema-loading-46rcr 0/1 Completed 0 3m38sScalarDL Ledger ポッドが適切にデプロイされている場合、STATUS が Running であることがわかります。
-
ScalarDL Ledger サービスがデプロイされているかどうかを確認します。
kubectl get svc
【コマンド実行結果】
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 47d
postgresql-ledger ClusterIP 10.109.253.150 <none> 5432/TCP 15m
postgresql-ledger-hl ClusterIP None <none> 5432/TCP 15m
scalardl-ledger-envoy ClusterIP 10.106.141.153 <none> 50051/TCP,50052/TCP 83s
scalardl-ledger-envoy-metrics ClusterIP 10.108.36.136 <none> 9001/TCP 83s
scalardl-ledger-headless ClusterIP None <none> 50051/TCP,50053/TCP,50052/TCP 83s
scalardl-ledger-metrics ClusterIP 10.98.4.217 <none> 8080/TCP 83sScalarDL Ledger サービスが適切にデプロイされている場合は、CLUSTER-IP 列にプライベート IP アドレスが表示されます。 (注記:
scalardl-ledger-headless
には CLUSTER-IP がありません。)
ステップ 7. クライアントコンテナを開始する
クライアントコンテナで証明書ファイルを使用します。 そこで、シークレット リソースを作成し、クライアント コンテナにマウントします。
-
秘密リソース
client-keys
を作成します。kubectl create secret generic client-keys --from-file=certificate=./certs/client.pem --from-file=private-key=./certs/client-key.pem
-
Kubernetes クラスター上でクライアント コンテナーを起動します。
cat << 'EOF' | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: "scalardl-client"
spec:
containers:
- name: scalardl-client
image: eclipse-temurin:8-jdk
command: ['sleep']
args: ['inf']
volumeMounts:
- name: "client-keys"
mountPath: "/keys"
readOnly: true
volumes:
- name: "client-keys"
secret:
secretName: "client-keys"
restartPolicy: Never
EOF -
クライアントコンテナが実行されているかどうかを確認します。
kubectl get pod scalardl-client
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
scalardl-client 1/1 Running 0 11s
ステップ 8. クライアント コンテナで ScalarDL サンプル コントラクトを実行する
以下に最低限の手順を説明します。 ScalarDL の詳細やコントラクトについて知りたい場合は、Getting Started with ScalarDL をご覧ください。
-
クライアントコンテナで bash を実行します。
kubectl exec -it scalardl-client -- bash
この手順の後、クライアント コンテナで各コマンドを実行します。
-
git、curl、および unzip コマンドをクライアント コンテナにインストールします。
apt update && apt install -y git curl unzip
-
ScalarDL Java Client SDK git リポジトリのクローンを作成します。
git clone https://github.com/scalar-labs/scalardl-java-client-sdk.git
-
ディレクトリを
scalardl-java-client-sdk/
に変更します。cd scalardl-java-client-sdk/
pwd
【コマンド実行結果】
/scalardl-java-client-sdk -
ブランチを任意のバージョンに変更します。
git checkout -b v3.6.0 refs/tags/v3.6.0
git branch
【コマンド実行結果】
master
* v3.6.0別のバージョンを使用する場合は、使用するバージョン(タグ)を指定してください。 同じバージョンの ScalarDL Ledger と ScalarDL Java Client SDK を使用する必 要があります。
-
サンプルコントラクトを作成します。
./gradlew assemble
-
ScalarDL の CLI ツールは ScalarDL Java Client SDK Releases からダウンロードしてください。
curl -OL https://github.com/scalar-labs/scalardl-java-client-sdk/releases/download/v3.6.0/scalardl-java-client-sdk-3.6.0.zip