在 SUSE CaaS Platform 上运行容器化 Ceph 集群是一项技术预览功能。请不要在生产 Kubernetes 集群上部署。
本章介绍如何在 SUSE CaaS Platform 4 Kubernetes 集群上部署容器化 SUSE Enterprise Storage 6。
开始部署前,请考虑以下事项:
要在 Kubernetes 中运行 Ceph,SUSE Enterprise Storage 6 会使用名为 Rook 的上游项目 (https://rook.io/)。
Rook 可能会占用 Kubernetes 集群中所有节点的全部未使用磁盘,具体视配置而定。
该设置需要特权容器。
开始部署前,您需要具有以下资源:
正在运行的 SUSE CaaS Platform 4 集群。
挂接了一些额外磁盘作为 Ceph 集群存储的 SUSE CaaS Platform 4 工作节点。
Rook 协调程序使用称为清单的 YAML 格式配置文件。您所需的清单包含在 rook-k8s-yaml RPM 包中。可通过运行以下命令来安装该包:
root #
zypper install rook-k8s-yaml
Rook-Ceph 包含两个主要组件:由 Kubernetes 运行且可用于创建 Ceph 集群的“操作器”,以及 Ceph“集群”本身,由操作器创建并管理它的一部分。
此设置中使用的清单会将所有 Rook 和 Ceph 组件都安装在“rook-ceph”名称空间中。如果您需要更改该设置,请相应地将对该名称空间的所有参照纳入 Kubernetes 清单。
根据您要使用的 Rook 特性,更改 common.yaml
中的“Pod 安全策略”配置,以限制 Rook 的安全要求。按照清单文件中的注释操作。
清单 operator.yaml
用于配置 Rook 操作器。通常情况下,您不需要进行更改。有关详细信息,请查阅清单文件中的注释。
清单 cluster.yaml
负责配置将在 Kubernetes 中运行的实际的 Ceph 集群。有关所有可用选项的详细说明,请参见 https://rook.io/docs/rook/v1.0/ceph-cluster-crd.html 中的上游 Rook 文档。
Rook 默认配置为使用未通过 node-role.kubernetes.io/master:NoSchedule
污染的所有节点,并将按照配置的归置设置运行(请参见 https://rook.io/docs/rook/v1.0/ceph-cluster-crd.html#placement-configuration-settings)。下面的示例禁止此类行为,并仅使用节点部分明确列出的节点:
storage: useAllNodes: false nodes: - name: caasp4-worker-0 - name: caasp4-worker-1 - name: caasp4-worker-2
Rook 默认配置为使用每个节点上的所有可用和空磁盘来作为 Ceph 存储。
Rook-Ceph 上游文档 (https://rook.github.io/docs/rook/v1.3/ceph-storage.html) 包含有关配置更高级部署的更多详细信息。在进行更高级的配置前,请参考此文档了解 Rook-Ceph 的基本知识。
有关 SUSE CaaS Platform 产品的更多详细信息,请参见 https://www.suse.com/documentation/suse-caasp。
通过在 SUSE CaaS Platform 主节点上执行以下命令,安装 Rook-Ceph 通用组件、CSI 角色和 Rook-Ceph 操作器:
root #
kubectl apply -f common.yaml -f operator.yaml
common.yaml
将创建“rook-ceph”名称空间、Ceph 自定义资源定义(Custom Resource Definitions,CRD)(请参见 https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/),以使 Kubernetes 可感知 Ceph 对象(例如“CephCluster”)以及 Rook 管理集群特定资源所必需的 RBAC 角色和 Pod 安全策略(请参见 https://kubernetes.io/docs/concepts/policy/pod-security-policy/)。
hostNetwork
和 hostPorts
的使用
如果在集群资源定义中使用 hostNetwork: true
,则必须允许使用 hostNetwork
。还需要在 PodSecurityPolicy
中允许使用 hostPorts
。
通过在 SUSE CaaS Platform 主节点上运行 kubectl get pods -n rook-ceph
命令来确认安装,例如:
root #
kubectl get pods -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-agent-57c9j 1/1 Running 0 22h
rook-ceph-agent-b9j4x 1/1 Running 0 22h
rook-ceph-operator-cf6fb96-lhbj7 1/1 Running 0 22h
rook-discover-mb8gv 1/1 Running 0 22h
rook-discover-tztz4 1/1 Running 0 22h
根据需要修改 cluster.yaml
后,您便可创建 Ceph 集群。在 SUSE CaaS Platform 主节点上运行以下命令:
root #
kubectl apply -f cluster.yaml
监视“rook-ceph”名称空间以查看 Ceph 集群的创建过程。您将看到 cluster.yaml
清单中所配置数量的 Ceph Monitor(默认为 3)、一个 Ceph Manager,以及与可用磁盘数量一样多的 Ceph OSD。
在引导 Ceph 集群时,您会发现一些名为 rook-ceph-osd-prepare-NODE-NAME
的 Pod 在运行一段时间后会以“已完成”状态终止。其名称表明了这些 Pod 用于供应 Ceph OSD。这些 Pod 将保留下来,不会被删除,以便您可在其终止后检查其日志。例如:
root #
kubectl get pods --namespace rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-agent-57c9j 1/1 Running 0 22h
rook-ceph-agent-b9j4x 1/1 Running 0 22h
rook-ceph-mgr-a-6d48564b84-k7dft 1/1 Running 0 22h
rook-ceph-mon-a-cc44b479-5qvdb 1/1 Running 0 22h
rook-ceph-mon-b-6c6565ff48-gm9wz 1/1 Running 0 22h
rook-ceph-operator-cf6fb96-lhbj7 1/1 Running 0 22h
rook-ceph-osd-0-57bf997cbd-4wspg 1/1 Running 0 22h
rook-ceph-osd-1-54cf468bf8-z8jhp 1/1 Running 0 22h
rook-ceph-osd-prepare-caasp4-worker-0-f2tmw 0/2 Completed 0 9m35s
rook-ceph-osd-prepare-caasp4-worker-1-qsfhz 0/2 Completed 0 9m33s
rook-ceph-tools-76c7d559b6-64rkw 1/1 Running 0 22h
rook-discover-mb8gv 1/1 Running 0 22h
rook-discover-tztz4 1/1 Running 0 22h
Rook 允许您使用三种不同类型的存储:
对象存储会向存储集群公开 S3 API,以供应用存放和获取数据。有关详细说明,请参见 https://rook.io/docs/rook/v1.0/ceph-object.html。
可以使用读/写权限从多个 Pod 装入共享文件系统。这对于使用共享文件系统集群化的应用非常有用。有关详细说明,请参见 https://rook.io/docs/rook/v1.0/ceph-filesystem.html。
块存储可让您将存储装入到单个 Pod。有关详细说明,请参见 https://rook.io/docs/rook/v1.0/ceph-block.html。
要卸装 Rook,请执行以下步骤:
删除任何占用 Rook 存储的 Kubernetes 应用。
删除您按照第 13.5 节 “使用 Rook 作为 Kubernetes 工作负载的存储”所述创建的所有对象、文件和/或块存储项目。
删除 Ceph 集群、操作器和相关资源:
root #
kubectl delete -f cluster.yamlroot #
kubectl delete -f operator.yamlroot #
kubectl delete -f common.yaml
删除主机上的数据:
root #
rm -rf /var/lib/rook
必要时,擦除 Rook 已使用的磁盘。有关更多详细信息,请参见 https://rook.io/docs/rook/v1.3/ceph-teardown.html。