Azure Kubernetes Service (AKS)を用いたCENMのデプロイメントのチュートリアル

Corda Enterprise Network Manager(以下CENM)は、Corda Networkを管理する一連のサービスです。このドキュメントではAzure Kubernetes Service(以下AKS)上にCENMをデプロイする時の技術的観点についてまとめています。

Azure Kubernetes Service(以下AKS)上にCENMをデプロイするための前提条件としてAKS上にCENMがインストールされている必要があります。AKSにCENMをインストールする方法は こちらのドキュメントにあります。

Kubernetes(以下k8s)を用いてCENMをデプロイメントする方法はこちらのドキュメントにあります。

 

目次

  1. アーキテクチャーの全体像
  2. Azure上へインストールする際の注意点
      1. AKSクラスターの作成
      2. トラブルシューティング
  3. k8sを用いたCENMのデプロイメントの全体像
      1. CENM Dockerイメージ
      2. デプロイメント
      3. ポッド
      4. ロードバランサー
      5. ボリュームへの保持
      6. ConfigMapsとService Accounts
      7. Angelサービスの注意
  4. CENM adminページへのアクセス

 

1.アーキテクチャの全体像

10.png

CENMのデプロイメントは以下の特徴を持つAKSクラスターから構成されています。

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.)ご参照ください)

デプロイメントごとに永続ボリュームも作成されます。 以下に、filescertificateslogsconfigurations、および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

(詳しく知りたい方はConfigMapsService 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でログインできます。)11.png

ログインすると、Users、Groups、Rolesが既に構成されていることが確認できます。

12.png

これらはFarmサービスのインストール中に構成され、cenm-deployment / k8s / helm / farm / files内にあります。

13.png

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています