为 Symcloud Storage 配置 Distributed Cloud

默认情况下,在一个 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 搭配使用提供有限支持,并且可能会联系第三方提供商寻求帮助。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 映像路径:

    kubectl get robincluster -o jsonpath='{.items[].spec.image_robin}'
    
  2. 创建一个包含以下内容的 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"
    
  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 节点时,才能实现高可用性。