Symcloud Storage 用に Distributed Cloud を構成する

デフォルトでは、1 つの Google Distributed Cloud コネクテッド ラックノードで実行されているワークロードは、別の Distributed Cloud コネクテッド ラックノードのローカル ストレージにアクセスできません。ただし、Distributed Cloud 接続ラックを構成して Rakuten Symcloud Storage を使用できます。これは、各 Distributed Cloud 接続ノードでローカル ストレージ抽象化レイヤとして機能し、他の Distributed Cloud 接続ノードで実行されているワークロードでローカル ストレージを使用できるようにするサードパーティ ソリューションです。Symcloud Storage は、Google Distributed Cloud 接続サーバーのデフォルトの唯一のストレージ オプションです。

Symcloud Storage は Google Cloud Marketplace からデプロイされ、そこに記載されている規約が適用されます。Google は、Distributed Cloud 接続で Symcloud Storage を使用する場合のサポートを限定的に提供します。また、必要に応じてサードパーティ プロバイダに協力を依頼することがあります。Symcloud Storage のソフトウェア アップデートは、Distributed Cloud Connected のソフトウェア アップデートに含まれています。

Symcloud Storage クラス

このセクションでは、Symcloud Storage が Distributed Cloud 接続クラスタで有効にできるストレージ クラスについて説明します。Distributed Cloud Connected の Symcloud Storage は、robin-rwx ストレージ クラスと、カスタム構成された RWX ファイル システム モードのボリュームをサポートしていません。Symcloud ストレージ クラスの詳細については、Kubernetes での Robin CNS の使用をご覧ください。

robin ストレージ クラス

robin ストレージ クラスは、基本的な Read Write-Once(RWO)ストレージ クラスです。次の例は、クラスのインスタンス化を示しています。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

robin-immediate ストレージ クラス

robin-immediate ストレージ クラスは、対応する永続ボリューム要求の作成直後に永続ボリュームが作成される点を除き、robin と同じです。次の例は、クラスのインスタンス化を示しています。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin-immediate
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate

robin-repl-3 ストレージ クラス

robin-repl-3 は、複数の Distributed Cloud ノードにまたがる 3 つのレプリカを持つ RWO ストレージ クラスです。次の例は、クラスのインスタンス化を示しています。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin-repl-3
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
    replication: "3"
    faultdomain: host

前提条件

始める前に、次の手順を完了します。

  1. ターゲットの Distributed Cloud 接続プロジェクトのロギングとモニタリングを構成します。
  2. 移行先の Distributed Cloud コネクテッド クラスタを作成します
  3. ターゲットの Distributed Cloud 接続クラスタ内の Pod が Google Cloud データセンターにアクセスできるように、Distributed Cloud ネットワーキングを構成します。
  4. Symcloud Storage で抽象化しない各 Distributed Cloud ノードの各 local-block 永続ボリュームをバインドします。バインドされた local-block 永続ボリュームのバインドを解除すると、Symcloud Storage のインストール時にその永続ボリュームの内容が消去されます。手順については、Kubernetes ドキュメントのバインディングをご覧ください。

Distributed Cloud 接続ノードに Symcloud Storage をインストールする

Distributed Cloud 接続ノードに Symcloud Storage をインストールするには、次の操作を行います。

  1. 次のコマンドを使用して、Symcloud Storage ライセンスをクラスタに適用します。LICENSE_FILE は、Symcloud Storage ライセンス ファイルのフルパスと名前に置き換えます。

    kubectl apply -f LICENSE_FILE -n robin-admin
    
  2. 次のコマンドを使用して、RobinCluster サービスとすべての Symcloud Storage ノードのステータスを確認します。

    kubectl describe robinclusters -n robinio
    

    このコマンドでは、次のような出力が返されます。

    [...]
    Status:
    [...]
    Phase:              Ready
    robin_node_status:
    [...]
     Status:           Ready
    [...]
     Status:           Ready
    [...]
     Status:           Ready
    [...]
    

    サービスとノードの想定されるステータスは Ready です。

Symcloud Storage をデフォルトのストレージ クラスとして設定する

次のコマンドを使用して、Distributed Cloud 接続クラスタで Symcloud Storage をデフォルトのストレージ クラスとして設定します。STORAGE_CLASS は、Symcloud ストレージ クラスのいずれかに置き換えます。

kubectl patch storageclass STORAGE_CLASS -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

デフォルトのストレージ クラスの設定の詳細については、Kubernetes ドキュメントのデフォルトの StorageClass を変更するをご覧ください。

ワークロード用に抽象化された Symcloud Storage ボリュームを構成する

このセクションでは、Symcloud Storage クラスを使用して、Distributed Cloud に接続されたワークロードの抽象化されたストレージを構成する方法の例を示します。Symcloud Storage ボリュームの構成の詳細については、Kubernetes での Robin CNS の使用をご覧ください。

ファイル システム モードで ext4 RWO ボリュームを構成する

次の例は、ext4 ファイル システムを使用して、ファイル システム モードの RWO ボリュームの永続ボリューム クレームを構成する方法を示しています。STORAGE_CLASS は、Symcloud ストレージ クラスのいずれかに置き換えます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-fs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

ブロックモードで RWO ボリュームを構成する

次の例は、ブロックモードの RWO ボリュームの永続ボリューム クレームを構成する方法を示しています。STORAGE_CLASS は、Symcloud Storage クラスのいずれかに置き換えます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS
  volumeMode: Block

既存のボリュームの構成を変更する

次の例は、アノテーションを使用して既存の Symcloud Storage LZ4 圧縮 RWO ボリュームの構成を変更する方法を示しています。STORAGE_CLASS は、Symcloud ストレージ クラスのいずれかに置き換えます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: compressed-rwo-fs-pvc
  annotations:
    robin.io/compression: LZ4
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

次の例は、アノテーションを使用して xfs ファイル システムで既存の Symcloud Storage RWO ボリュームの構成を変更する方法を示しています。STORAGE_CLASS は、Symcloud ストレージ クラスのいずれかに置き換えます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-xfs-pvc
  annotations:
    robin.io/fstype: xfs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

Symcloud Storage CLI クライアントを構成する

Symcloud Storage には、Symcloud Storage の構成の管理に使用できるコマンドライン インターフェース(CLI)クライアントが用意されています。Distributed Cloud 接続クラスタでクライアントを構成する手順は次のとおりです。

  1. Distributed Cloud 接続クラスタにデプロイされた RobinCluster サービス インスタンスで使用される Symcloud Storage イメージパスを取得し、環境変数を次のように設定します。

    image_robin=$(kubectl get robincluster -o jsonpath='{.items[].spec.image_robin}')
    image_registry_path=$(kubectl get robincluster -o jsonpath='{.items[].spec.image_registry_path}')
    ROBIN_CNS_IMAGE="$image_registry_path/$image_robin"
    
  2. 次の内容で robincli リソースを作成します。

    kind: Deployment
    apiVersion: apps/v1
    metadata:
     name: robincli
     namespace: default
     labels:
       name: robincli
    spec:
     replicas: 1
     selector:
       matchLabels:
         name: robincli
     template:
       metadata:
         annotations:
           product: robin
         labels:
           name: robincli
       spec:
         containers:
         - name: robincli
           image: ROBIN_CNS_IMAGE
           workingDir: /root
           command: ["/bin/bash","-c","mkdir -p /root/.robin; ln -s -t /usr/lib/python3.7/site-packages/ /opt/robin/current/python3/site-packages/robincli /opt/robin/current/python3/site-packages/stormgr_def.py /opt/robin/current/python3/site-packages/stormgr_lib.py; /opt/robin/current/bin/robin client add-context robin-master.robinio --set-current; while true; do sleep 10000; done"]
           resources:
             requests:
               memory: "10Mi"
               cpu: "100m"
    

    ROBIN_CNS_IMAGE は、手順 1 で取得したイメージの完全なリポジトリ パスと名前に置き換えます。

  3. Distributed Cloud 接続クラスタに robincli リソースを適用します。

  4. Symcloud Storage は、初期インストール時に、ランダム化されたパスワードを使用して robinio Namespace に default-admin-user Secret を生成します。次のコマンドを使用して、これらのログイン認証情報を取得します。

    1. ユーザー名を取得します。

      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.username}' | base64 -d
      
    2. パスワードを取得します。

       
      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.password}' | base64 -d
      
  5. 新しく作成した Pod にログインして、クライアントを実行します。

    kubectl exec -it robincli -- bash
    

Symcloud Storage の制限事項

Distributed Cloud Connected で Symcloud Storage を使用する場合、Distributed Cloud Connected クラスタが 3 つ以上の Distributed Cloud Connected ノードで構成されている場合にのみ、高可用性を実現できます。