Distributed Cloud 接続ストレージを構成する

このページでは、次の構成を含む、Distributed Cloud 接続ストレージを構成する方法について説明します。

Symcloud Storage 用に Distributed Cloud Connected を構成する

デフォルトでは、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 のソフトウェア アップデートに含まれています。

このリリースの Distributed Cloud Connected には、Symcloud Storage 5.4.10 が付属しており、サポートされています。このリリースの Distributed Cloud Connected では、Symcloud Storage の他のバージョンはサポートされていません。

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 ノードで構成されている場合にのみ、高可用性を実現できます。

Symcloud Storage を使用するノードをクラスタから削除する

Symcloud Storage ボリューム レプリカは、Distributed Cloud 接続クラスタ内のワーカーノードに保存されます。クラスタからノードを削除すると、そのノードに保存されている Symcloud Storage ボリューム データが使用できなくなります。これを防ぐには、次のいずれかを行う必要があります。

  • クラスタ全体を削除する場合は、クラスタ自体を削除する前に、ワークロードと対応する Symcloud Storage 永続ボリュームを削除します。

  • クラスタから特定のノードを削除する場合は、クラスタからノードを削除する前に、そのノードに保存されているワークロード データを移行する必要があります。手順については、ディスクからボリュームを退避させるをご覧ください。

ローカル ストレージ スキーマを構成する

ストレージ スキーマは、1 つ以上のパーティションの論理グループです。各パーティションは、論理的に独立したストレージ ユニットです。パーティションは、物理ディスク容量がなくなるまでクラスタに順番に作成されます。各ストレージ スキーマには、それを識別する一意の名前があります。

Distributed Cloud 接続クラスタの新しいローカル ストレージ スキーマを作成するには、Google にリクエストする必要があります。スキーマをテストしてクラスタに作成したら、gcloud CLI を使用して適用できます。

スキーマをクラスタに適用した後は、スキーマを変更できません。既存のスキーマを変更するには、Google に既存のスキーマの削除をリクエストしてから、それを置き換える新しいスキーマの作成をリクエストする必要があります。

ローカル ストレージ スキーマのパーティションを定義する

ローカル ストレージ スキーマをリクエストする前に、まずそのスキーマのパーティションを定義する必要があります。

パーティションには次のプロパティがあります。

  • サイズ。パーティション サイズをバイナリ バイトで指定するか、ローカル ディスクの残りの領域をすべて使用するように指定できます。
  • タイプ。パーティションは、Kubernetes 永続ボリューム(PV)またはローカル ディスク上の Linux ローカル ボリュームとして構成できます。
  • モード。パーティションに保存されたボリュームは、ブロック ボリュームまたはファイル システム ボリュームとして構成できます。永続ボリューム パーティションの場合、パーティションのストレージ クラスはそれぞれ local-block または local-disks です。ローカル ボリューム パーティションの場合、含まれるファイル システムのバインド ポイントとマウント ポイントを指定できます。

ローカル ストレージ スキーマをリクエストする

Distributed Cloud 接続クラスタの新しいローカル ストレージ スキーマをリクエストするには、Google サポートにお問い合わせのうえ、スキーマで作成する各パーティションのサイズ、タイプ、モード、マウント ポイントとバインド ポイント(省略可)を指定してください。

リクエストを受け取ると、スキーマの堅牢性を確認するための一連のテストが実行され、Distributed Cloud 接続クラスタにスキーマが作成されます。

デフォルトのローカル ストレージ スキーマ

Distributed Cloud Connected には、次のデフォルトのローカル ストレージ スキーマが付属しています。

  • default_control_plane_node。このスキーマは、次のパーティションを定義します。

    • ファイル システム モードの 100 GB のローカル ボリューム パーティション。
    • 残りのディスク空き容量を占有するブロックモードの永続ボリューム パーティション。
  • default_worker_node。このスキーマは、ブロックモードで 410 GB の永続ボリューム パーティションを定義します。

ローカル ストレージ スキーマをクラスタに適用する

ローカル ストレージ スキーマを Distributed Cloud 接続クラスタに適用するには、次のいずれかを行います。

  • ローカル ストレージ スキーマをクラスタのコントロール プレーン ノードに適用するには、クラスタの作成時に --control-plane-node-storage-schema フラグを使用します。詳細については、クラスタを作成するをご覧ください。

  • ローカル ストレージ スキーマをクラスタのワーカーノードに適用するには、クラスタのノードプールを作成するときに --node-storage-schema を使用します。詳細については、ノードプールを作成するをご覧ください。

Distributed Cloud Connected は、クラスタまたはノードプールの作成が成功すると、ローカル ストレージ スキーマで定義されたパーティションを作成します。