在 M1 Mac 上使用 Docker 驱动程序安装 Minikube 的 Rook Ceph

Anushruti Sharma

简介

本文档介绍了如何在单个节点 Minikube 集群上设置一个测试 Ceph 集群。

由于其可靠性和简单性,Docker 已被选为 Mac M1 上 Minikube 集群的驱动程序。 通过选择 Docker,我们可以避免虚拟化的复杂性、防火墙配置(bootpd)的困难以及 x86 模拟的成本。

Docker 直接运行基于 ARM 的容器。 这提高了性能和兼容性,并降低了成本,这对于 Rook 和 Ceph 等资源密集型系统非常重要。

先决条件

  • 配备 macOS Sonoma 14 的 MAC M1
  • 2 个或更多 CPU
  • 2GB 可用内存
  • 20GB 可用磁盘空间
  • 互联网连接

步骤

  • 安装 docker
brew install docker
brew install colima
colima start
  • 安装并启动 Minikube
brew install minikube
minikube start --disk-size=20g --driver docker
  • 在您的主机上安装 kubectl
curl -LO "https://dl.k8s.io/release/v1.26.1/bin/darwin/arm64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
  • 由于 M1 Mac 是基于 ARM 的,因此无法附加 /dev/sd* 设备或 /dev/vd* 设备。 在这种情况下,我们通常默认使用 /dev/loop 设备,但 Ceph 不允许使用 /dev/loop 设备。 相反,我们将使用网络块设备 /dev/nbd0。
minikube ssh
sudo mkdir /mnt/disks

# Create an empty file of size 10GB to mount disk as ceph osd

sudo dd if=/dev/zero of=/mnt/disks/mydisk.img bs=1M count=10240
sudo apt update
sudo apt upgrade
sudo apt-get install qemu-utils

# List the nbd devices

lsblk | grep nbd

# If you are unable to see the nbd device, load the NBD (Network Block Device)
kernel module.

sudo modprobe nbd max_part=8

# To bind nbd device to the file
# Note: Please check there is no necessary data in /dev/nbdx, otherwise back up
that data.

sudo qemu-nbd --format raw -c /dev/nbd0 /mnt/disks/mydisk.img
  • 使用 lsblk 验证 nbd 设备的尺寸
 lsblk | grep nbd0
  • 将 Rook 仓库克隆到您的主机。
git clone https://github.com/rook/rook.git
  • 进入 rook/deploy/examples/ 目录。
cd rook/deploy/examples/
  • 部署 Rook 运算符。
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
  • 在继续之前,请验证 rook-ceph-operator 是否处于运行状态。
kubectl get pods -n rook-ceph
  • 在 cluster-test.yaml 中,对存储部分进行必要的更改,选择设备
  storage:
    useAllNodes: false
    useAllDevices: false
    nodes:
    - name: minikube    # node name of minikube node
      devices:
      - name: /dev/nbd0   # device name being used
    allowDeviceClassUpdate: true
    allowOsdCrushWeightUpdate: false
  • 创建 Ceph 集群。
kubectl create -f cluster-test.yaml
  • 通过检查 rook-ceph 命名空间中 Pod 的状态来验证集群是否正在运行
kubectl -n rook-ceph get pod
  • 如果未创建 rook-ceph-mon、rook-ceph-mgr 或 rook-ceph-osd Pod,请参阅 Ceph 常见问题 以获取更多信息。

  • 要验证集群是否处于健康状态,请连接到 Rook 工具箱。

kubectl create -f toolbox.yaml
  • 等待工具箱 Pod 下载其容器并进入运行状态
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools
  • rook-ceph-tools Pod 运行后,您可以使用以下命令连接到它
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
  • 运行 ceph status 命令并确保以下内容

    • 所有监视器都已达到法定数量
    • 一个管理器正在运行
    • 至少应该有 1 个 OSD 处于启动和运行状态
    • 如果健康状态不是 HEALTH_OK,请调查警告或错误
bash-5.1$ ceph -s
  cluster:
    id:     f89dd5e5-e2bb-44e8-8969-659f0fc9dc55
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum a (age 7m)
    mgr: a(active, since 5m)
    osd: 1 osds: 1 up (since 6m), 1 in (since 6m)

  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   27 MiB used, 10 GiB / 10 GiB avail
    pgs:     1 active+clean

如果集群不健康,请参阅 Ceph 常见问题 以获取潜在的解决方案。

脚注

感谢 Yuval Lifshitz 提供所有支持和指导来撰写本文。

参考资料

https://rook.io/docs/rook/latest/Getting-Started/quickstart/