Corda Enterprise Network Manager(以下CENM)は、Corda Networkを管理する一連のサービスです。このドキュメントではAzure Kubernetes Service(以下AKS)上にCENMをデプロイする時の技術的観点についてまとめています。
Azure Kubernetes Service(以下AKS)上にCENMをデプロイするための前提条件としてAKS上にCENMがインストールされている必要があります。AKSにCENMをインストールする方法は こちらのドキュメントにあります。
Kubernetes(以下k8s)を用いてCENMをデプロイメントする方法はこちらのドキュメントにあります。
目次
- アーキテクチャーの全体像
- Azure上へインストールする際の注意点
-
- AKSクラスターの作成
- トラブルシューティング
-
- k8sを用いたCENMのデプロイメントの全体像
- CENM Dockerイメージ
- デプロイメント
- ポッド
- ロードバランサー
- ボリュームへの保持
- ConfigMapsとService Accounts
- Angelサービスの注意
- CENM adminページへのアクセス
1.アーキテクチャの全体像
CENMのデプロイメントは以下の特徴を持つAKSクラスターから構成されています。
- 1つのノード(ただし、ノードの数はクラスター構成も可能です。2.1 AKSクラスターの作成をご参考ください)
- 7つのポッド
-
- Auth: https://docs.corda.net/docs/cenm/1.4/auth-service.html
- Farm (now called Gateway): https://docs.corda.net/docs/cenm/1.4/gateway-service.html
- Identity Manager (idman): https://docs.corda.net/docs/cenm/1.4/identity-manager.html
- Network Map (nmap): https://docs.corda.net/docs/cenm/1.4/network-map.html
- Notary: https://docs.corda.net/docs/corda-enterprise/4.6/notary/ha-notary-service-overview.html
- Signer: https://docs.corda.net/docs/cenm/1.4/signing-service.html
- Zone: https://docs.corda.net/docs/cenm/1.4/zone-service.html
-
- Farm (Gateway)、Identity Manager 、Network Map 、Notaryポッドは外部のクラスターからポッドが利用可能にできるように外部向けのIPを提供するK8sのロードバランサーを搭載しています。詳細はこの記事で後程触れます。
- Angelサービスは自身のポッドサービス上では動きません。代わりに、Identity ManagerポッドとNetwork Mapポッドの両方で直接実行されます。 したがって、angel.jarまたはidmanのいずれかが失敗すると、idmanポッド全体が失敗します。 Network Map(nmap)についても同様です。 こちらのドキュメントでも説明されています。
2.Azure上へインストールする際の注意点
完全なインストール手順はこちらのドキュメントに既に記載されています。ここでは実施するにあたり、いくつかの注意事項を述べていきたいと思います。
2.1 AKSクラスターの作成
AKSクラスターを作成するために、Azure CLIから以下を実行します。
$ az aks create --resource-group MyResourceGroup --name myAKSCluster --node-count 1 --enable-addons monitoring --generate-ssh-keys --node-vm-size Standard_D8s_v3
以下2つのパラメーターに注意が必要です。
—node-count 1
と--node-vm-size Standard_D8s_v3
に注意してください。Azureでは、vCPUの使用に対して地域的な制限があります。 デフォルトの制限はvCPU = 10
です。CENM1.3は10未満のvCPUを必要とするため、Standard_D8s_v3
を利用すれば十分です。 今後のCENMのリリースでより多くのvCPUが必要となった場合は、Azureサブスクリプションのクォータ制限(割り当て制限)を増やす必要があります(手順はこちら)。
注:Azureサブスクリプションのクォータ制限量を確認してください。過去にクォータ制限量を増やしている場合、新しく増やす必要はありません。
2.2 トラブルシューティング
$ ./bootstrap.cenm --ACCEPT_LICENSE Y -a
のコマンドを実行し、AKSクラスター作成が開始されたら、クラスターの進行状況を確認します。
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cenm-auth-8448c56fc5-bbxxt 2/2 Running 0 16m 10.244.0.17 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-gateway-6dd97dfb97-jn8z5 0/2 Pending 0 16m <none> <none> <none> <none>
cenm-gateway-job-tcwtj 0/1 Init:0/2 0 16m 10.244.0.10 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-hsm-lmc9w 0/1 Completed 0 16m 10.244.0.9 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-idman-66b7577f8c-jmrpq 0/3 Init:2/3 0 16m 10.244.0.13 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-nmap-b6f854757-4bmv6 0/3 Init:0/1 0 16m 10.244.0.16 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-notary-7c7c869655-hvc4n 0/1 Init:0/1 0 16m 10.244.0.14 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-pki-q42jp 0/1 Completed 0 16m 10.244.0.15 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-signer-b7456974c-tzkth 0/2 Init:0/1 0 16m 10.244.0.12 aks-nodepool1-21810328-vmss000000 <none> <none>
cenm-zone-85fb945895-ptkls 0/2 Pending 0 16m <none> <none> <none> <none>
一部のポッドがPending
のままになっている場合は、その詳細を確認して、問題がないかどうかを確認します。以下ではcenm-zone-85fb945895-ptkls
の詳細を確認しています。
$ kubectl.exe -n cenm describe pods cenm-zone-85fb945895-ptkls
Name: cenm-zone-85fb945895-ptkls
Namespace: cenm
Priority: 0
Node: <none>
Labels: app.kubernetes.io/instance=cenm-zone
app.kubernetes.io/name=zone
pod-template-hash=85fb945895
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/cenm-zone-85fb945895
Init Containers:
init-waitforpki:
Image: corda/enterprise-zone:1.4.0-zulu-openjdk8u242
Port: <none>
Host Port: <none>
Command:
....
.... other description ....
....
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 16m (x5 over 16m) default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
Warning FailedScheduling 30s (x15 over 16m) default-scheduler 0/1 nodes are available: 1 node(s) exceed max volume count.
上記の例では、1 node(s) exceed max volume count
というエラーがあります。これは、ポッド用の十分なディスク容量がないことを意味します。 この場合、VMサイズを増やす必要があるため、より多くのディスク容量を持つ別のVMタイプを使用します。
3.k8sを用いたCENMデプロイメントの全体像
以下は、AKS上にCENMをデプロイメントすることによって作成されたサービスとコンポーネントの概要です。
3.1 CENM Dockerイメージ
デプロイメントでは、Corda DockerHubにある公式のCorda Enterprise Dockerイメージを使用します。
3.2 デプロイメント
(詳しく知りたい方は Deploymentsをご参考ください。)
7つのデプロイメントがあります。これらはcenm-deployment / k8s / helm / [service-name] /templates/deployment.yaml
にあるHelmチャートに対応しており、こちらのドキュメントにそってカスタマイズできます。
3.3 ポッド
(詳しく知りたい方はPodsをご参考ください。)
デプロイメントごとに1つずつ、計7つのポッドが作成されます。
$ kubectl get pods
NAME READY STATUS RESTARTS
cenm-auth-5674f565f-x8txb 2/2 Running 0
cenm-farm-669dbb8dd7-n6wqs 2/2 Running 0
cenm-idman-6d6d44fb4c-h5792 3/3 Running 0
cenm-nmap-744d5b5d89-95h8h 3/3 Running 0
cenm-notary-8bf89ff8c-5pjzq 1/1 Running 0
cenm-signer-7485f56f76-g9scv 2/2 Running 0
cenm-zone-6c4758c55d-8q5v5 2/2 Running 0
3.4 ロードバランサー
(詳しく知りたい方はK8sの Services, Load Balancing, and Networkingご参考ください。)
前に述べたように、Farm、idman、nmap、notaryには、externalIP
を提供するk8sロードバランサーがあります。
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
cenm-auth ClusterIP 10.0.101.233 <none> 8081/TCP
cenm-farm LoadBalancer 10.0.84.252 externalIP 8080:30085/TCP
cenm-idman-internal ClusterIP 10.0.62.82 <none> 5052/TCP,5053/TCP,6000/TCP
cenm-idman-ip LoadBalancer 10.0.185.22 externalIP 10000:30267/TCP
cenm-nmap LoadBalancer 10.0.40.73 externalIP 10000:30363/TCP
cenm-nmap-internal ClusterIP 10.0.247.72 <none> 5050/TCP,6000/TCP
cenm-notary ClusterIP 10.0.218.135 <none> 10002/TCP,2222/TCP
cenm-notary-ip LoadBalancer 10.0.139.145 externalIP 10002:31513/TCP,2222:31311/TCP
cenm-signer ClusterIP 10.0.56.85 <none> 6000/TCP
cenm-zone ClusterIP 10.0.97.85 <none> 25000/TCP,12345/TCP
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP
3.5 ボリュームへの保持
(詳しく知りたい方はstorage (Storage Class, Persistent Volumes etc.)ご参照ください)
デプロイメントごとに永続ボリュームも作成されます。 以下に、files、certificates、logs、configurations、およびH2 dbを格納するために使用されるNotaryサービス用に作成されたボリュームの例を示します。
デプロイメントごとにボリュームが作成され、これはクラスターに必要なVMのディスクサイズに影響を与えます。
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS
pvc-1111 2Gi RWO Delete Bound default/cenm-notary-bin cenm
pvc-2222 10Gi RWO Delete Bound default/cenm-notary-logs cenm
pvc-3333 1Gi RWO Delete Bound default/cenm-notary-nodeinfo cenm
pvc-4444 1Gi RWO Delete Bound default/cenm-notary-certificates cenm
pvc-5555 10Gi RWO Delete Bound default/cenm-notary-h2 cenm
pvc-6666 1Gi RWO Delete Bound default/cenm-notary-etc cenm
CENM 1.3では、永続ボリュームのストレージクラスがcenm.yaml
ファイルに設定されていました。 CENM 1.4では、これらは別のファイルとして置かれているため、クラスター構成の最初にstorage-class-azure.yaml
ファイルを追加する必要があります。そのために以下を実行します。(この内容はこちらのドキュメントでも説明されています。)
kubectl.exe apply -f cenm.yaml -f storage-class-azure.yaml
3.6 ConfigMaps とService Accounts
(詳しく知りたい方はConfigMapsとService Accountsをご参照ください。)
$ kubectl get configmaps
NAME DATA
cenm-auth-conf 2
cenm-farm-conf 17
cenm-hsm-conf 1
cenm-idman-conf 3
cenm-nmap-conf 5
cenm-notary-conf 4
cenm-pki-conf 3
cenm-signer-conf 4
cenm-zone-conf 1
$ kubectl get serviceaccounts
NAME SECRETS
cenm-auth 1
cenm-farm 1
cenm-hsm 1
cenm-idman 1
cenm-nmap 1
cenm-notary 1
cenm-pki 1
cenm-signer 1
cenm-zone 1
default 1
3.7 Angelサービスの注意点
以前述べた通り、Angelサービスはidmanポッドとnetmapポッドの両方で実行されています。 angel.jar
が実行されていることを次のように確認できます。
# Verify that it is running inside the Identity Manager pod
kubectl exec -it cenm-idman-6d6d44fb4c-h5792 -- ps -aux | grep angel
cenm 10 0.7 0.5 3163272 195384 ? Sl Dec03 12:43 java -jar bin/angel.jar --jar-name=bin/identitymanager.jar --zone-host=cenm-zone --zone-port=25000 --token=a62e0f80-fec6
4.CENM adminページへのアクセス
CENM adminページにアクセスするには、Farmサービス(現在はGatewayサービス)のWebページに接続する必要があります。 まず、公開された
externalIPアドレスを取得する必要があります。
kubectl get svc cenm-farm
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cenm-farm LoadBalancer 10.0.84.252 externalIP 8080:30085/TCP
次に好きなWebブラウザーを開いてそのexternalIP:8080/admin
にログインします。
(Usernameをadmin, Passwordをpasswordでログインできます。)
ログインすると、Users、Groups、Rolesが既に構成されていることが確認できます。
これらはFarmサービスのインストール中に構成され、cenm-deployment / k8s / helm / farm / files
内にあります。