為 Symcloud Storage 設定 Distributed Cloud

根據預設,在一個 Google Distributed Cloud connected 機架節點上執行的工作負載,無法存取另一個 Distributed Cloud connected 機架節點的本機儲存空間。不過,您可以設定 Distributed Cloud 連線機架,使用 Rakuten Symcloud Storage。這項第三方解決方案可做為每個 Distributed Cloud 連線節點上的本機儲存空間抽象層,並讓其他 Distributed Cloud 連線節點上執行的工作負載使用本機儲存空間。Symcloud Storage 是 Google Distributed Cloud 連線伺服器上預設且唯一的儲存選項。

Symcloud Storage 是從 Google Cloud Marketplace 部署,並受其中所述條款約束。Google 僅提供有限的支援,協助您搭配使用 Symcloud Storage 與 Distributed Cloud Connected,並可能會聘僱第三方供應商提供協助。Distributed Cloud 連線軟體更新包含 Symcloud Storage 的軟體更新。

Symcloud 儲存空間級別

本節說明 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 是 RWO 儲存空間類別,具有三個副本,可跨多個 Distributed Cloud 節點。以下範例說明如何建立類別的例項:

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 connected 專案設定記錄和監控
  2. 建立目標 Distributed Cloud connected 叢集
  3. 設定 Distributed Cloud 網路,讓目標 Distributed Cloud 連線叢集中的 Pod 可以連上 Google Cloud 資料中心。
  4. 在每個 Distributed Cloud 節點上,繫結您不希望由 Symcloud Storage 抽象化的每個 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 設為預設儲存空間級別

請使用下列指令,將 Symcloud Storage 設為 Distributed Cloud 連線叢集的預設儲存空間類別。請將 STORAGE_CLASS 改成其中一個 Symcloud Storage 類別

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 Storage 類別

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 Storage 類別

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 Storage 類別

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 提供指令列介面 (CLI) 用戶端,可用於管理 Symcloud Storage 設定。如要在 Distributed Cloud 連線叢集上設定用戶端,請完成下列步驟:

  1. 取得 RobinCluster 服務執行個體使用的 Symcloud Storage 映像檔路徑,該執行個體部署在 Distributed Cloud 連線叢集上,並依下列方式設定環境變數:

    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. robincli 資源套用至 Distributed Cloud 已連結叢集。

  4. 首次安裝時,Symcloud Storage 會在 robinio 命名空間中產生 default-admin-user 密碼,並隨機產生密碼。請使用下列指令取得這些登入憑證:

    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 叢集包含三個以上的 Distributed Cloud connected 節點時,才能達到高可用性。