为 Symcloud Storage 配置 Distributed Cloud

默认情况下,在一个 Google Distributed Cloud Rack 节点上运行的工作负载无法访问另一个 Distributed Cloud Rack 节点的本地存储空间。不过,您可以将 Google Distributed Cloud Racks 配置为使用 Rakuten Symcloud Storage,这是一种第三方解决方案,可在每个 Distributed Cloud 节点上充当本地存储抽象层,并使其本地存储可供在其他 Distributed Cloud 节点上运行的工作负载使用。Symcloud Storage 是 Google Distributed Cloud Servers 上的默认存储方案,也是唯一可用的存储方案。

Symcloud Storage 是从 Google Cloud Marketplace 部署的,并受其中所述条款的约束。Google 对将 Symcloud Storage 与 Distributed Cloud 搭配使用提供有限支持,并且可能会联系第三方提供商寻求帮助。Symcloud Storage 的软件更新包含在 Distributed Cloud 软件更新中。

Symcloud Storage 存储类别

本部分介绍了 Symcloud Storage 可在分布式云集群上启用的存储类别。分布式云上的 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 项目配置日志记录和监控
  2. 创建目标分布式 Cloud 集群
  3. 配置 Distributed Cloud 网络,以便目标 Distributed Cloud 集群中的 Pod 可以访问 Google Cloud 数据中心。
  4. 绑定每个 Distributed Cloud 节点上您不希望被 Symcloud Storage 抽象化的 local-block 永久性卷。如果您取消绑定已绑定的 local-block 永久性卷,则安装 Symcloud Storage 会清除该永久性卷的内容。如需查看相关说明,请参阅 Kubernetes 文档中的绑定

在分布式云节点上安装 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 存储类别

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 卷配置 PersistentVolumeClaim。将 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

以下示例展示了如何使用注释修改现有 Symcloud Storage RWO 卷(采用 xfs 文件系统)的配置。将 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 提供了一个命令行界面 (CLI) 客户端,您可以使用该客户端来管理 Symcloud Storage 配置。如需在 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. robincli 资源应用到 Distributed Cloud 集群。

  4. 在初始安装时,Symcloud Storage 会在 robinio 命名空间中生成一个包含随机密码的 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 的限制

将 Symcloud Storage 与 Distributed Cloud 搭配使用时,只有当 Distributed Cloud 集群包含三个或更多 Distributed Cloud 节点时,才能实现高可用性。