Please enable Javascript to view the contents

容器部署 Ceph

 ·  ☕ 3 分钟

本文介绍 cephadm 单节点验证与三节点生产部署。架构、运维与功能测试见《Ceph 架构与运维》。

1. 磁盘准备

OSD 只能使用块设备(/dev/sdX、分区、/dev/loopN)。

1.1 查看可用设备

1
2
3
4
5
6
7
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL

# 文件系统与 UUID
lsblk -f

# 指定盘是否已挂载(无输出 = 未挂载)
findmnt /dev/nvme0n1

1.2 独立数据盘

/dev/nvme0n1 为例,在每台有数据盘的节点执行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
export OSD_DISK=/dev/nvme0n1

# 再次确认:容量、挂载、分区
lsblk $OSD_DISK
mount | grep -q "$OSD_DISK" && echo "磁盘已挂载,请先 umount" && exit 1

# 清除旧分区表与文件系统签名(破坏性操作,务必确认盘符)
wipefs -a $OSD_DISK

# 验证:FSTYPE 应为空
lsblk -f $OSD_DISK
blkid $OSD_DISK || true    # 无输出表示无签名

若需整盘单分区再交给 OSD:

1
2
3
4
parted -s $OSD_DISK mklabel gpt mkpart primary 0% 100%
partprobe $OSD_DISK
export OSD_PART=${OSD_DISK}1    # 如 /dev/nvme0n11
lsblk -f $OSD_PART

2. 单节点部署

2.1 配置环境变量

1
2
3
4
5
6
7
8
9
export CEPH_RELEASE=20.2.2
export CEPH_CODENAME=tentacle                           # 20.x → tentacle;19.x → squid;18.x → reef;17.x → quincy
export CEPH_IMAGE=quay.io/ceph/ceph:v${CEPH_RELEASE}
export CEPH_CLUSTER_NAME=ceph_single
export CEPH_NODE_IP=10.0.0.11                      # 本机对外可被访问的 IP
export CEPH_PUBLIC_NETWORK=10.0.0.0/8           # bootstrap 后写入,覆盖整个 10 内网
export CEPH_CLUSTER_NETWORK=10.0.0.0/8
export CEPH_DASHBOARD_PORT=8080
export CEPH_DATA=/data/ops/ceph/$CEPH_CLUSTER_NAME

2.2 安装 cephadm

1
2
3
4
5
6
7
8
9
mkdir -p $CEPH_DATA

curl --silent --remote-name --location \
  https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm

./cephadm add-repo --version $CEPH_RELEASE
./cephadm install
./cephadm install ceph-common
1
cephadm --image $CEPH_IMAGE version

2.3 引导集群

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
cat <<EOF > $CEPH_DATA/single-node.conf
[global]
# 默认副本数为 1
osd_pool_default_size = 1
# 最小副本数为 1
osd_pool_default_min_size = 1
# 允许创建大小为 1 的池
mon_allow_pool_size_one = true
# 对于单节点,禁用一些不必要的警告
mgr_allow_pool_size_one = true
EOF
1
2
3
4
5
cephadm --image $CEPH_IMAGE bootstrap \
  --mon-ip $CEPH_NODE_IP \
  --config $CEPH_DATA/single-node.conf \
  --skip-mon-network \
  --allow-fqdn-hostname

bootstrap 完成后,执行《Ceph 架构与运维》配置管理。

2.4 部署 OSD

  • 查看磁盘
1
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
  • 添加磁盘为 OSD
1
ceph orch daemon add osd $(hostname):/dev/vdd

2.5 验证集群

1
2
3
ceph -s
ceph df
ceph health detail

期望 health: HEALTH_OK,OSD 状态为 upceph df 显示可用容量。

3. 三节点部署

节点规划见《Ceph 架构与运维》。从环境变量、免密 SSH、安装 cephadm 到 bootstrap 与纳管,在三台机器上独立完成全流程。

3.1 配置环境变量

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
export CEPH_RELEASE=20.2.2
export CEPH_CODENAME=tentacle                           # 20.x → tentacle;19.x → squid;18.x → reef;17.x → quincy
export CEPH_IMAGE=quay.io/ceph/ceph:v${CEPH_RELEASE}
export CEPH_CLUSTER_NAME=ceph_cluster_3n

export CEPH_NODE1_HOST=ceph-node-01
export CEPH_NODE2_HOST=ceph-node-02
export CEPH_NODE3_HOST=ceph-node-03

export CEPH_NODE1_IP=10.0.0.11
export CEPH_NODE2_IP=10.0.0.12
export CEPH_NODE3_IP=10.0.0.13

export CEPH_NODE_IP=$CEPH_NODE1_IP
export CEPH_PUBLIC_NETWORK=10.0.0.0/8           # bootstrap 后写入,覆盖整个 10 内网
export CEPH_CLUSTER_NETWORK=10.0.0.0/8
export CEPH_DASHBOARD_PORT=8080
export CEPH_DATA=/data/ops/ceph/$CEPH_CLUSTER_NAME

3.2 配置免密

1
2
3
4
5
6
7
[ -f ~/.ssh/id_rsa ] || ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

ssh-copy-id -o StrictHostKeyChecking=no root@$CEPH_NODE2_IP
ssh-copy-id -o StrictHostKeyChecking=no root@$CEPH_NODE3_IP

ssh -o BatchMode=yes root@$CEPH_NODE2_IP hostname
ssh -o BatchMode=yes root@$CEPH_NODE3_IP hostname

3.3 全部节点安装 cephadm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
mkdir -p $CEPH_DATA

curl --silent --remote-name --location \
  https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm

./cephadm rm-repo 2>/dev/null || true
./cephadm add-repo --version $CEPH_RELEASE
./cephadm install
./cephadm install ceph-common

which cephadm

下面的操作,只需要在管理节点上执行即可。

3.4 引导集群

cephadm bootstrap 会校验 public_network 须为本机网卡子网,不能在 bootstrap 阶段直接写 10.0.0.0/8。先用 --skip-mon-network 完成引导,再写入整个 10 内网段:

1
2
3
4
cephadm --image $CEPH_IMAGE bootstrap \
  --mon-ip $CEPH_NODE_IP \
  --skip-mon-network \
  --allow-fqdn-hostname

bootstrap 完成后,执行《Ceph 架构与运维》配置管理。

3.5 纳管其他节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ssh-keyscan -H $CEPH_NODE2_IP $CEPH_NODE3_IP >> ~/.ssh/known_hosts

ceph orch host add $CEPH_NODE2_HOST $CEPH_NODE2_IP
ceph orch host add $CEPH_NODE3_HOST $CEPH_NODE3_IP

ceph orch host label add $CEPH_NODE1_HOST _admin
ceph orch host label add $CEPH_NODE2_HOST _admin
ceph orch host label add $CEPH_NODE3_HOST _admin

ceph orch host ls

3.6 部署 MON / MGR / OSD

在 node1(管理节点)执行:

1
2
ceph orch apply mon --placement="3 $CEPH_NODE1_HOST $CEPH_NODE2_HOST $CEPH_NODE3_HOST"
ceph orch apply mgr --placement="2 $CEPH_NODE1_HOST $CEPH_NODE2_HOST"

各节点准备好裸盘后,在管理节点执行:

1
ceph orch apply osd --all-available-devices

或显式指定:

1
2
3
ceph orch daemon add osd $CEPH_NODE1_HOST:/dev/nvme0n1
ceph orch daemon add osd $CEPH_NODE2_HOST:/dev/nvme0n1
ceph orch daemon add osd $CEPH_NODE3_HOST:/dev/nvme0n1

查看编排进度:

1
2
ceph orch ps
watch -n 5 ceph -s

3.7 验证集群

1
2
3
4
5
6
ceph -s
ceph mon stat
ceph osd tree
ceph df
ceph health detail
ceph orch host ls

期望:

  • mon: 3 daemons
  • mgr: ceph-node-01(active), ceph-node-02(standby) 或类似
  • 各节点 osd 均为 up
  • health: HEALTH_OK

3.8 打印交付结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
FSID=$(ceph fsid)
cat <<EOF
Ceph Cluster:
  Cluster Name:     $CEPH_CLUSTER_NAME
  FSID:             $FSID
  Nodes:
    $CEPH_NODE1_HOST: $CEPH_NODE1_IP
    $CEPH_NODE2_HOST: $CEPH_NODE2_IP
    $CEPH_NODE3_HOST: $CEPH_NODE3_IP
  Public Network:   $CEPH_PUBLIC_NETWORK
  Cluster Network:  $CEPH_CLUSTER_NETWORK
  Image:            $CEPH_IMAGE
  Config:           /etc/ceph/ceph.conf
  Keyring:          /etc/ceph/ceph.client.admin.keyring
  Dashboard:        $(ceph dashboard get-url 2>/dev/null || echo "ceph dashboard get-url")
  MGR Prometheus:   http://$CEPH_NODE1_IP:9283/metrics
EOF

4. 参考


微信公众号
作者
微信公众号