在 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/