适用于 SUSE Enterprise Storage 6

13 部署于 SUSE CaaS Platform 4 Kubernetes 集群上的 SUSE Enterprise Storage 6

警告
警告:技术预览

在 SUSE CaaS Platform 上运行容器化 Ceph 集群是一项技术预览功能。请不要在生产 Kubernetes 集群上部署。

本章介绍如何在 SUSE CaaS Platform 4 Kubernetes 集群上部署容器化 SUSE Enterprise Storage 6。

13.1 注意事项

开始部署前,请考虑以下事项:

  • 要在 Kubernetes 中运行 Ceph,SUSE Enterprise Storage 6 会使用名为 Rook 的上游项目 (https://rook.io/)。

  • Rook 可能会占用 Kubernetes 集群中所有节点的全部未使用磁盘,具体视配置而定。

  • 该设置需要特权容器。

13.2 先决条件

开始部署前,您需要具有以下资源:

  • 正在运行的 SUSE CaaS Platform 4 集群。

  • 挂接了一些额外磁盘作为 Ceph 集群存储的 SUSE CaaS Platform 4 工作节点。

13.3 获取 Rook 清单

Rook 协调程序使用称为清单的 YAML 格式配置文件。您所需的清单包含在 rook-k8s-yaml RPM 包中。可通过运行以下命令来安装该包:

root # zypper install rook-k8s-yaml

13.4 安装

Rook-Ceph 包含两个主要组件:由 Kubernetes 运行且可用于创建 Ceph 集群的“操作器”,以及 Ceph“集群”本身,由操作器创建并管理它的一部分。

13.4.1 配置

13.4.1.1 全局配置

此设置中使用的清单会将所有 Rook 和 Ceph 组件都安装在“rook-ceph”名称空间中。如果您需要更改该设置,请相应地将对该名称空间的所有参照纳入 Kubernetes 清单。

根据您要使用的 Rook 特性,更改 common.yaml 中的“Pod 安全策略”配置,以限制 Rook 的安全要求。按照清单文件中的注释操作。

13.4.1.2 操作器配置

清单 operator.yaml 用于配置 Rook 操作器。通常情况下,您不需要进行更改。有关详细信息,请查阅清单文件中的注释。

13.4.1.3 Ceph 集群配置

清单 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 存储。

13.4.1.4 文档

13.4.2 创建 Rook 操作器

通过在 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/)。

提示
提示:hostNetworkhostPorts 的使用

如果在集群资源定义中使用 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

13.4.3 创建 Ceph 集群

根据需要修改 cluster.yaml 后,您便可创建 Ceph 集群。在 SUSE CaaS Platform 主节点上运行以下命令:

root # kubectl apply -f cluster.yaml

监视“rook-ceph”名称空间以查看 Ceph 集群的创建过程。您将看到 cluster.yaml 清单中所配置数量的 Ceph Monitor(默认为 3)、一个 Ceph Manager,以及与可用磁盘数量一样多的 Ceph OSD。

提示
提示:临时 OSD Pod

在引导 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

13.5 使用 Rook 作为 Kubernetes 工作负载的存储

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

13.6 卸装 Rook

要卸装 Rook,请执行以下步骤:

  1. 删除任何占用 Rook 存储的 Kubernetes 应用。

  2. 删除您按照第 13.5 节 “使用 Rook 作为 Kubernetes 工作负载的存储”所述创建的所有对象、文件和/或块存储项目。

  3. 删除 Ceph 集群、操作器和相关资源:

    root # kubectl delete -f cluster.yaml
    root # kubectl delete -f operator.yaml
    root # kubectl delete -f common.yaml
  4. 删除主机上的数据:

    root # rm -rf /var/lib/rook
  5. 必要时,擦除 Rook 已使用的磁盘。有关更多详细信息,请参见 https://rook.io/docs/rook/v1.3/ceph-teardown.html