根據預設,在一個 Google Distributed Cloud 節點上執行的工作負載,無法存取另一個 Distributed Cloud 節點的本機儲存空間。不過,您可以設定 Google Distributed Cloud 使用 Rakuten Symcloud Storage,這項第三方解決方案可做為每個 Distributed Cloud 節點上的本機儲存空間抽象層,並讓其他 Distributed Cloud 節點上執行的工作負載使用本機儲存空間。
Symcloud Storage 是從 Google Cloud Marketplace 部署,並受其中所述條款約束。Google 僅提供有限的支援,協助您將 Symcloud Storage 與 Distributed Cloud 搭配使用,並可能會聘僱第三方供應商提供協助。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
必要條件
開始之前,請先完成下列步驟:
- 為目標 Distributed Cloud 專案設定記錄和監控。
- 建立目標 Distributed Cloud 叢集。
- 設定 Distributed Cloud 網路,讓目標 Distributed Cloud 叢集中的 Pod 可以連線至 Google Cloud 資料中心。
- 在每個 Distributed Cloud 節點上,繫結您不希望由 Symcloud Storage 抽象化的每個
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 設為預設儲存空間級別
使用下列指令,將 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 叢集上設定用戶端,請完成下列步驟:
取得部署在 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 會在
robinio命名空間中產生default-admin-user密碼,並隨機產生密碼。請使用下列指令取得這些登入憑證:取得使用者名稱:
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 時,只有在 Distributed Cloud 叢集包含三個以上的 Distributed Cloud 節點時,才能達到高可用性。