配置 Distributed Cloud connected 存储空间

本页面介绍了如何配置分布式云连接存储,包括:

为 Symcloud Storage 配置 Distributed Cloud connected

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

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

此版本的 Distributed Cloud Connected 随附并支持 Symcloud Storage 5.4.10。在 Distributed Cloud Connected 的此版本中,不支持其他版本的 Symcloud Storage。

获取 Symcloud Storage 许可

您必须从 Google Cloud Marketplace 获取 YAML 格式的 Symcloud Storage 许可:

前往 Marketplace

Symcloud Storage 存储类别

本部分介绍了 Symcloud Storage 可在 Distributed Cloud Connected 集群上启用的存储类别。连接到分布式云的 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. 创建目标 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 Connected 节点上安装 Symcloud Storage

如需在连接的分布式云节点上安装 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 Connected Cluster 上配置客户端,请完成以下步骤:

  1. 获取部署在 Distributed Cloud Connected 集群上的 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 Connected 搭配使用时,只有当 Distributed Cloud Connected 集群包含三个或更多 Distributed Cloud Connected 节点时,才能实现高可用性。

从集群中移除使用 Symcloud Storage 的节点

Symcloud Storage 卷副本存储在 Distributed Cloud 连接集群中的工作器节点上。如果您从集群中移除某个节点,则存储在该节点上的 Symcloud Storage 卷数据将无法使用。为防止出现此问题,您必须执行以下任一操作:

  • 如果您要拆除整个集群,请先移除工作负载及其对应的 Symcloud Storage 永久性卷,然后再拆除集群本身。

  • 如果您要从集群中移除特定节点,则必须先迁移存储在这些节点上的工作负载数据,然后再从集群中移除这些节点。如需查看相关说明,请参阅从磁盘中撤出卷

配置本地存储架构

存储架构是一个或多个分区的逻辑分组。每个分区都是一个逻辑上独立的存储单元。系统会在集群上依次创建分区,直到物理磁盘空间耗尽。每个存储架构都有一个唯一名称作为标识。

如需为 Distributed Cloud 连接集群创建新的本地存储架构,您必须向 Google 提出请求。在测试架构并将其创建在集群上后,您可以使用 gcloud CLI 应用该架构。

将架构应用于集群后,您便无法再修改该架构。如需更改现有架构,您必须向 Google 请求删除现有架构,然后请求创建新架构来替换它。

为本地存储架构定义分区

您必须先为本地存储架构定义分区,然后才能请求该架构。

分区具有以下属性:

  • 大小。您可以指定分区大小(以二进制字节为单位),也可以让它使用本地磁盘上的所有剩余空间。
  • 类型。您可以将分区配置为 Kubernetes 永久性卷 (PV) 或本地磁盘上的 Linux 本地卷。
  • 模式。您可以将存储在分区中的卷配置为块卷或文件系统卷。对于永久性卷分区,相应分区的存储类别为 local-blocklocal-disks。对于本地卷分区,您可以为包含的文件系统指定绑定点和装载点。

请求本地存储架构

如需为 Distributed Cloud Connected 集群请求新的本地存储架构,请与 Google 支持团队联系,并提供您要在架构中创建的每个分区的大小、类型、模式以及(可选)装载点和绑定点。

收到您的请求后,我们会运行一系列测试来确保架构的稳健性,然后在连接到 Distributed Cloud 的集群上创建该架构。

默认本地存储架构

Distributed Cloud connected 随附以下默认本地存储架构:

  • default_control_plane_node。此架构定义了以下分区:

    • 文件系统模式下的 100 GB 本地卷分区。
    • 以块模式占用剩余可用磁盘空间的持久卷分区。
  • default_worker_node。此架构定义了一个 410GB 的块模式永久性卷分区。

将本地存储区架构应用于集群

如需将本地存储架构应用于 Distributed Cloud 连接集群,请执行以下操作之一:

  • 如需将本地存储架构应用于集群的控制平面节点,请在创建集群时使用 --control-plane-node-storage-schema 标志。如需了解详情,请参阅创建集群

  • 如需将本地存储空间架构应用于集群的工作器节点,请在为集群创建节点池时使用 --node-storage-schema。如需了解详情,请参阅创建节点池

Distributed Cloud connected 会在成功创建集群或节点池后,创建本地存储架构中定义的分区。