デフォルトでは、1 つの Google Distributed Cloud ノードで実行されているワークロードは、別の Distributed Cloud ノードのローカル ストレージにアクセスできません。ただし、Google Distributed Cloud を構成して Rakuten Symcloud Storage を使用することはできます。これは、各 Distributed Cloud ノードでローカル ストレージ抽象化レイヤとして機能し、他の Distributed Cloud ノードで実行されているワークロードでローカル ストレージを使用できるようにするサードパーティ ソリューションです。
Symcloud Storage は Google Cloud Marketplace からデプロイされ、そこに記載されている規約が適用されます。Google は、Distributed Cloud での Symcloud Storage の使用について限定的なサポートを提供します。必要に応じて、サードパーティ プロバイダに協力を依頼することがあります。Symcloud Storage のソフトウェア アップデートは、Distributed Cloud ソフトウェア アップデートに含まれています。
Symcloud Storage クラス
このセクションでは、Symcloud Storage が Distributed Cloud クラスタで有効にできるストレージ クラスについて説明します。Distributed Cloud の 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
前提条件
始める前に、次の手順を完了します。
- ターゲットの Distributed Cloud プロジェクトのロギングとモニタリングを構成します。
- 移行先の Distributed Cloud クラスタを作成します。
- ターゲットの Distributed Cloud クラスタ内の Pod が Google Cloud データセンターにアクセスできるように、Distributed Cloud ネットワーキングを構成します。
- Symcloud Storage で抽象化しない各 Distributed Cloud ノードの各
local-block永続ボリュームをバインドします。バインドされたlocal-block永続ボリュームのバインドを解除すると、Symcloud Storage のインストール時にその永続ボリュームの内容が消去されます。手順については、Kubernetes ドキュメントのバインディングをご覧ください。
Distributed Cloud ノードに Symcloud Storage をインストールする
Distributed Cloud ノードに Symcloud Storage をインストールするには、次の手順を行います。
次のコマンドを使用して、Symcloud Storage ライセンスをクラスタに適用します。
LICENSE_FILEは、Symcloud Storage ライセンス ファイルのフルパスと名前に置き換えます。kubectl apply -f LICENSE_FILE -n robin-admin
次のコマンドを使用して、
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 クラスタでクライアントを構成する手順は次のとおりです。
Distributed Cloud クラスタにデプロイされた
RobinClusterサービス インスタンスで使用される Symcloud Storage イメージのパスを取得します。kubectl get robincluster -o jsonpath='{.items[].spec.image_robin}'次の内容で
robincliリソースを作成します。ROBIN_CNS_IMAGEは、手順 1 で取得したイメージのフルパスと名前に置き換えます。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"robincliリソースを Distributed Cloud クラスタに適用します。Symcloud Storage は、初期インストール時に、ランダム化されたパスワードを使用して
robinioNamespace にdefault-admin-userSecret を生成します。次のコマンドを使用して、これらのログイン認証情報を取得します。ユーザー名を取得します。
kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.username}' | base64 -dパスワードを取得します。
kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.password}' | base64 -d
新しく作成した Pod にログインして、クライアントを実行します。
kubectl exec -it robincli -- bash
Symcloud Storage の制限事項
Distributed Cloud で Symcloud Storage を使用する場合、Distributed Cloud クラスタが 3 つ以上の Distributed Cloud ノードで構成されている場合にのみ、高可用性を実現できます。