設定 Distributed Cloud 連結網路方案儲存空間

本頁說明如何設定 Distributed Cloud 連線儲存空間,包括:

為 Symcloud Storage 設定 Distributed Cloud connected

根據預設,在一個 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 的軟體更新。

這個版本的 Distributed Cloud connected 隨附並支援 Symcloud Storage 5.4.16。Distributed Cloud connected 的這個版本不支援其他版本的 Symcloud Storage。

取得 Symcloud Storage 授權

您必須從 Google Cloud Marketplace 取得 YAML 格式的 Symcloud Storage 授權:

前往 Marketplace

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 節點時,才能達到高可用性。

從叢集中移除使用 Symcloud Storage 的節點

Symcloud Storage 磁碟區副本會儲存在 Distributed Cloud 連線叢集內的工作站節點上。如果從叢集中移除節點,儲存在該節點的 Symcloud Storage 磁碟區資料就會無法存取。為避免這種情況,請採取下列任一做法:

  • 如要拆除整個叢集,請先移除工作負載和對應的 Symcloud Storage 永久磁碟區,再拆除叢集本身。

  • 如要從叢集中移除特定節點,請務必先遷移儲存在這些節點上的工作負載資料,再從叢集中移除節點。如需操作說明,請參閱「從磁碟撤離磁碟區」。

設定本機儲存空間結構定義

儲存空間結構定義是將一或多個分割區邏輯分組。每個分區都是邏輯上獨立的儲存單元。系統會依序在叢集上建立分割區,直到實體磁碟空間用盡為止。每個儲存空間結構都有不重複的識別名稱。

如要為 Distributed Cloud 連線叢集建立新的本機儲存空間結構定義,請向 Google 提出要求。測試結構定義並在叢集上建立完成後,您就可以使用 gcloud CLI 套用結構定義。

將結構定義套用至叢集後,就無法再修改。如要變更現有結構定義,請先向 Google 申請刪除現有結構定義,然後申請建立新的結構定義來取代。

定義本機儲存空間結構定義的分區

如要要求本機儲存空間結構定義,請先定義該結構定義的分區。

分區具有下列屬性:

  • 大小。您可以指定以二進位位元組為單位的分割區大小,也可以讓分割區使用本機磁碟上的所有剩餘空間。
  • 類型。您可以將磁碟分割區設定為 Kubernetes PersistentVolume (PV) 或 Linux 本機磁碟區。
  • 模式。您可以將儲存在分割區中的磁碟區設定為區塊磁碟區或檔案系統磁碟區。如果是永久磁碟區分割區,分割區的儲存空間類別分別為 local-blocklocal-disks。如果是本機磁碟區分割區,您可以指定所含檔案系統的繫結和掛接點。

要求本機儲存空間結構定義

如要為 Distributed Cloud 連線叢集要求新的本機儲存空間結構定義,請與 Google 支援團隊聯絡,並提供要在結構定義中建立的每個分割區大小、類型、模式,以及 (選用) 掛接點和繫結點。

收到要求後,我們會執行一系列測試,確保結構定義穩健無虞,然後在 Distributed Cloud 連線叢集上建立結構定義。

預設本機儲存空間結構定義

Distributed Cloud 連線隨附下列預設本機儲存空間結構定義:

  • default_control_plane_node。這個結構定義會定義下列分割區:

    • 檔案系統模式下的 100 GB 本機磁碟區分區。
    • 區塊模式下的永久磁碟區分割區,佔用剩餘的可用磁碟空間。
  • default_worker_node。這個結構定義會在區塊模式中定義 410 GB 的永久磁碟區。

將本機儲存空間結構定義套用至叢集

如要將本機儲存空間結構定義套用至 Distributed Cloud connected 叢集,請執行下列其中一項操作:

  • 如要將本機儲存空間結構定義套用至叢集的控制層節點,請在建立叢集時使用 --control-plane-node-storage-schema 旗標。詳情請參閱「建立叢集」。

  • 如要將本機儲存空間結構定義套用至叢集的 worker 節點,請在為叢集建立節點集區時使用 --node-storage-schema。詳情請參閱「建立節點集區」。

成功建立叢集或節點集區後,Distributed Cloud connected 會建立本機儲存空間結構定義中定義的分割區。