【大咖专栏】在Kubernetes中手动恢复Rook存储集群

新钛云服已为您服务1205天大咖专栏 | 祝祥Rook介绍Rook将文件、数据块和对象存储系统引入到Kubernetes集群,与其他正在使用存储的应用程序和服务一起无缝运行。通过这种方式,...
摘要由CSDN通过智能技术生成


新钛云服已为您服务1205


大咖专栏 | 祝祥

Rook介绍

Rook将文件、数据块和对象存储系统引入到Kubernetes集群,与其他正在使用存储的应用程序和服务一起无缝运行。

通过这种方式,云原生集群可以在公有云和本地部署中自给自足并且具备可移植性。该项目的开发目的是使企业能够通过动态应用编排,为在本地和公有云环境中运行的分布式存储系统实现数据中心现代化

Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。

Rook由Operator和Cluster两部分组成:

  • Operator:由一些CRD和一个All in one镜像构成,包含包含启动和监控存储系统的所有功能。

  • Cluster:负责创建CRD对象,指定相关参数,包括ceph镜像、元数据持久化位置、磁盘位置、dashboard等等…

Rook使Kubernetes集群中的存储工作变得轻松了许多。但是,这种简单性同时也带来了一些复杂性。我们希望本文能帮助您避免其中的一些复杂性从而使它们简单化。

为了让本文更加有趣,让我们假设我们刚刚遇到了集群的一个问题……


故障场景


想象一下,您已经在K8s集群中配置并启动了Rook。当前的所有任务操作都很正常,然后在某些时候出现了以下状况:

  • 新的Pod无法从Ceph挂载RBD镜像;

  • 诸如lsblkdf之类的命令在Kubernetes节点上不起作用。这表明挂载在节点上的RBD镜像出了点问题。您无法读取它们,这意味着Ceph Mon不可用。

  • Ceph Mon和OSD/MGR Pod都无法在集群中运行。

现在是时候回答这个问题了,rook-ceph-operator Pod是什么时候开始启动的?事实证明,这是最近才发生的。为什么?菜鸟运维人员可能会突然决定创建一个新的集群!那么,我们又该如何还原旧群集及其数据?

让我们从一个更长更有趣的地方开始,一步一步地研究Rook的内部机制并手动恢复其组件。显然,有一种更简短、更恰当的方法:使用备份。如您所知,有两种类型的管理员:一种是还没有使用备份的管理员,另一种是已经痛苦地学会始终使用备份的管理员(我们稍后再讨论)。


Rook的手工恢复历程

恢复Ceph Monitor节点

首先,我们必须检查ConfigMap的列表:rook-ceph-configrook-config-override。它们是在部署集群成功后创建的。

注意:在新版本的Rook中,ConfigMaps不再是部署群集成功的唯一标志。

为了继续下去,我们必须对所有安装了RBD镜像(ls/dev/RBD*)的服务器进行硬重启。您可以使用sysrq。此步骤对于卸载所有已挂载的RBD镜像是必须的,因为在这种情况下,常规重新启动将不起作用(系统无法正常的卸载镜像)。

如您所知,Ceph Monitor守护程序的正常运行是所有Ceph集群的先决条件。下面,让我们来确认一下它。

Rook将以下组件安装到Monitor的Pod中:

Volumes:
 rook-ceph-config:
   Type:      ConfigMap (a volume populated by a ConfigMap)
   Name:      rook-ceph-config
 rook-ceph-mons-keyring:
   Type:        Secret (a volume populated by a Secret)
   SecretName:  rook-ceph-mons-keyring
 rook-ceph-log:
   Type:          HostPath (bare host directory volume)
   Path:          /var/lib/rook/kube-rook/log
 ceph-daemon-data:
   Type:          HostPath (bare host directory volume)
   Path:          /var/lib/rook/mon-a/data
Mounts:
  /etc/ceph from rook-ceph-config (ro)
  /etc/ceph/keyring-store/ from rook-ceph-mons-keyring (ro)
  /var/lib/ceph/mon/ceph-a from ceph-daemon-data (rw)
  /var/log/ceph from rook-ceph-log (rw)

让我们仔细看看这个rook-ceph-mons-keyring secret的内容:

kind: Secret
data:
 keyring: LongBase64EncodedString=

解码后,我们将获得具有管理员和Ceph Monitor权限的常规密钥keyring:

[mon.]
       key = AQAhT19dlUz0LhBBINv5M5G4YyBswyU43RsLxA==
       caps mon = "allow *"
[client.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 Rook 需要以下步骤: 1. 安装 Rook CRDs 和 Operator 使用以下命令安装 Rook CRDs 和 Operator: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/common.yaml $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/operator.yaml ``` 检查 Operator 是否正常运行: ``` $ kubectl -n rook-ceph get pod ``` 2. 创建 Ceph 集群 创建 Rook 集群需要以下步骤: - 创建 Ceph 集群定义 - 创建 Ceph 存储定义 - 创建 Ceph 存储类 - 创建 Ceph 块存储和文件存储 在创建之前,需要先配置 Ceph 集群所需的参数,如 OSD 数量、Monitors 数量等。可以通过修改 `cluster.yaml` 文件来配置这些参数。 使用以下命令创建 Ceph 集群: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/cluster.yaml ``` 检查 Ceph 集群是否成功创建: ``` $ kubectl -n rook-ceph get pod ``` 3. 创建 Ceph 存储定义 使用以下命令创建 Ceph 存储定义: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/storageclass.yaml ``` 4. 创建 Ceph 块存储和文件存储 使用以下命令创建 Ceph 块存储和文件存储: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.yaml ``` 至此,Rook 集群已经成功安装并且 Ceph 存储已经创建完毕。可以使用 `kubectl get` 命令来查看集群状态和存储状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值