默认情况下,在一个 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 软件更新中。
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
前提条件
在开始之前,请完成以下步骤:
- 为目标 Distributed Cloud 连接项目配置日志记录和监控。
- 创建目标 Distributed Cloud Connected 集群。
- 配置 Distributed Cloud 网络,以便目标 Distributed Cloud 连接集群中的 Pod 可以访问 Google Cloud 数据中心。
- 绑定每个 Distributed Cloud 节点上您不希望被 Symcloud Storage 抽象化的
local-block永久性卷。如果您取消绑定已绑定的local-block永久性卷,则安装 Symcloud Storage 会清除该永久性卷的内容。如需查看相关说明,请参阅 Kubernetes 文档中的绑定。
在 Distributed Cloud Connected 节点上安装 Symcloud Storage
如需在连接的分布式云节点上安装 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 存储类别。
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 上配置客户端,请完成以下步骤:
获取部署在 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"创建一个包含以下内容的
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 步中获得的映像的完整仓库路径和名称。将
robincli资源应用到 Distributed Cloud 已连接的集群。在初始安装时,Symcloud Storage 会在
robinio命名空间中生成一个包含随机密码的default-admin-userSecret。使用以下命令获取这些登录凭据:获取用户名:
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 的限制
将 Symcloud Storage 与 Distributed Cloud Connected 搭配使用时,只有当 Distributed Cloud Connected 集群包含三个或更多 Distributed Cloud Connected 节点时,才能实现高可用性。
从集群中移除使用 Symcloud Storage 的节点
Symcloud Storage 卷副本存储在 Distributed Cloud 连接集群中的工作器节点上。如果您从集群中移除某个节点,则存储在该节点上的 Symcloud Storage 卷数据将无法使用。为防止出现此问题,您必须执行以下任一操作:
如果您要拆除整个集群,请先移除工作负载及其对应的 Symcloud Storage 永久性卷,然后再拆除集群本身。
如果您要从集群中移除特定节点,则必须先迁移存储在这些节点上的工作负载数据,然后再从集群中移除这些节点。如需查看相关说明,请参阅从磁盘中撤出卷。