05-部署Ceph集群(Ceph Pacific)
1. 引导单节点Ceph集群(隔离环境)
1.1 部署本地容器仓库
部署脚本deploy_registry.sh的内容如下:
#!/bin/bash
#
mkdir -p /var/lib/registry
docker run -d \
--restart=always \
-p 5000:5000 \
--name registry \
-v /var/lib/registry:/var/lib/registry \
registry:2
1.2 在所有集群节点启用不安全的本地容器仓库
registry.local
1.3 将以下镜像上传到本地容器仓库
quay.io/ceph/ceph:v16.2.11
quay.io/ceph/ceph-grafana:8.3.5
quay.io/prometheus/prometheus:v2.33.4
quay.io/prometheus/node-exporter:v1.3.1
quay.io/prometheus/alertmanager:v0.23.0
1.4 创建一个初始化配置文件
init-ceph.conf
1.5 引导集群
格式:
cephadm --image *<hostname>*:5000/ceph/ceph bootstrap --mon-ip *<mon-ip>*
示例:
cephadm --docker --image registry.local:5000/ceph/ceph bootstrap --mon-ip 172.16.0.1 --config init-ceph.conf
引导完成一个单节点群集,程序会做如下事情:
- 在本地主机上为新集群创建 monitor 和 manager daemon 守护程序。
- 为Ceph集群生成一个新的SSH密钥,并将其添加到 root 用户的 /root/.ssh/authorized_keys 文件中。
- 将与新群集进行通信所需的最小配置文件保存到 /etc/ceph/ceph.conf。
- 向 /etc/ceph/ceph.client.admin.keyring 写入 client.admin 管理 secret key 的副本。
- 将 public key 的副本写入 /etc/ceph/ceph.pub。
2. 添加主机
在引导成功单节点Ceph群集后,引导程序会将 public key 的副本写入 /etc/ceph/ceph.pub,在添加主机节点前需要将该 key 分发到要加入群集的主机上。
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node-1
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node-2
ceph orch host add ceph-node-1 172.16.0.2
ceph orch host add ceph-node-2 172.16.0.3
ceph orch host ls
默认情况下,ceph.conf 文件和 client.admin 密钥环的副本保存在所有带有 _admin 标签的主机上的 /etc/ceph 中,该标签最初仅适用于引导程序主机。我们通常建议为一个或多个其他主机提供_admin标签,以便 Ceph CLI(例如,通过 cephadm shell)可以在多个主机上轻松访问。要将_admin标签添加到其他主机,请执行以下操作:
ceph orch host label add ceph-node-1 _admin
ceph orch host label add ceph-node-2 _admin
3. 添加OSD
为了部署 OSD,必须有一个可用于部署 OSD 的存储设备。运行以下命令以显示所有集群主机上的存储设备清单:
ceph orch device ls
添加OSD需求满足以下所有条件:
- 设备必须没有分区。
- 设备不得具有任何LVM状态。
- 不得安装设备。
- 该设备不得包含文件系统。
- 该设备不得包含Ceph BlueStore OSD。
- 设备必须大于5GB。
注:Ceph 不会在不可用的设备上配置 OSD。
3.1 OSD服务规范示例
- osd_spec.yml
service_type: osd
service_id: osd_spec_hdd
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
data_devices:
size: '10TB'
db_devices:
size: '3.2TB'
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
---
service_type: osd
service_id: osd_spec_ssd
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
data_devices:
size: '960GB'
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
3.2 部署命令
ceph orch apply -i osd_spec.yml --dry-run
ceph orch apply -i osd_spec.yml
4. 部署RGW
4.1 RGW服务规范示例
- rgw_spec.yml
service_type: rgw
service_id: rgw
placement:
label: rgw
count_per_host: 2
networks:
- 172.16.0.0/24
spec:
rgw_frontend_port: 8080
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
4.2 部署命令
ceph orch host label add ceph-node-0 rgw
ceph orch host label add ceph-node-1 rgw
ceph orch host label add ceph-node-2 rgw
ceph orch apply -i rgw_spec.yaml --dry-run
ceph orch apply -i rgw_spec.yaml
4.3 Dashboard集成
radosgw-admin user create --uid=rgw --display-name=rgw --system
ceph dashboard set-rgw-api-access-key -i access_key.txt
ceph dashboard set-rgw-api-secret-key -i secret_key.txt
5. 部署CephFS
ceph osd pool create cephfs-data cephfs-hdd-rule
ceph osd pool create cephfs-metadata cephfs-ssd-rule
ceph fs new cephfs cephfs-metadata cephfs-data
5.1 mds服务规范示例
- mds_spec.yml
service_type: mds
service_id: cephfs
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
5.2 部署命令
ceph orch apply -i mds_spec.yml --dry-run
ceph orch apply -i mds_spec.yml
6. 部署NFS
Cephadm 部署 NFS Ganesha 守护进程(或一组守护进程)。NFS 的配置存储在 nfs-ganesha 池中,导出通过 ceph nfs 命令或仪表板导出进行管理。
ceph osd pool create nfs-ganesha
ceph osd pool application enable nfs-ganesha nfs
6.1 nfs服务规范示例
- nfs_spec.yml
service_type: nfs
service_id: nfs
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
spec:
port: 2050
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
6.2 部署命令
ceph orch apply -i nfs_spec.yaml --dry-run
ceph orch apply -i nfs_spec.yaml
7. 部署iSCSI
ceph osd pool create iscsi-config-data
ceph osd pool application enable iscsi-config-data iscsi
7.1 iSCSI服务规范示例
- iscsi_spec.yml
service_type: iscsi
service_id: iscsi
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
spec:
pool: iscsi-config-data # RADOS pool where ceph-iscsi config data is stored.
trusted_ip_list: "172.16.0.1,172.16.0.2,172.16.0.3"
api_user: admin
api_password: 123456
api_secure: false
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
7.2 部署命令
ceph orch apply -i iscsi_spec.yml --dry-run
ceph orch apply -i iscsi_spec.yml
8. 部署ingress
Cephadm将haproxy和keepalived两个封装成了ingress服务。
ingress是每个服务对应一个ingress,比如部署rgw ingress,nfs也有对应的ingress,未来还会有Ceph Dashboard的ingress,现在能部署的只有rgw ingress和nfs ingress。
8.1 RGW ingress
8.1.1 服务规范示例
- rgw_ingress_spec.yml
service_type: ingress
service_id: rgw.rgw # adjust to match your existing RGW service
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
spec:
backend_service: rgw.rgw # adjust to match your existing RGW service
virtual_ips_list:
- 172.16.0.201/24
- 172.16.0.202/24
- 172.16.0.203/24
frontend_port: 80
monitor_port: 1967 # ex: 1967, used by haproxy for load balancer status
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
8.1.2 部署命令
ceph orch apply -i rgw_ingress_spec.yml --dry-run
ceph orch apply -i rgw_ingress_spec.yml
注意:这里的 backend_service 一定要通过 ceph orch ls 查看到实际的名称为准, frontend_port 为VIP的端口,注意到这里有个 monitor_port 这个的意思是haproxy状态页端口。
8.2 NFS ingress
8.2.1 服务规范示例
- nfs_ingress_spec.yml
service_type: ingress
service_id: nfs.nfs
placement:
hosts:
- ceph-node-0
- ceph-node-1
- ceph-node-2
spec:
backend_service: nfs.nfs
virtual_ip: 172.16.0.204/24
frontend_port: 2049
monitor_port: 1968
extra_container_args:
- "-v"
- "/etc/localtime:/etc/localtime:ro"
8.2.2 部署命令
ceph orch apply -i nfs_ingress_spec.yml --dry-run
ceph orch apply -i nfs_ingress_spec.yml
9. 常用排错命令
当部署出现问题可以执行以下命令查看详细信息:
ceph log last cephadm
也可以直接查看Service级别或Daemon级别的日志:
ceph orch ls --service_name=alertmanager --format yaml
ceph orch ps --service-name <service-name> --daemon-id <daemon-id> --format yaml
当daemon出现error,或是stop状态,可以使用以下命令重新启动:
ceph orch daemon restart rgw.rgw.ceph3.sfepof
当有多个Daemon状态不对时,也可以直接重启Service,就会自动重启Service关联的Daemon。
[root@ceph1 ~]# ceph orch restart mds.cephfs
Scheduled to start mds.cephfs.ceph1.znbbqq on host 'ceph1'
Scheduled to start mds.cephfs.ceph2.iazuaf on host 'ceph2'
Scheduled to start mds.cephfs.ceph3.hjuvue on host 'ceph3'
如果删除服务遇到一直在删除中,可以重启主机,例如:
[root@ceph1 ~]# ceph orch ls
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
alertmanager ?:9093,9094 1/1 18m ago 10d count:1
cephfs-mirror 3/3 18m ago 2d count:3
crash 5/5 19m ago 10d *
grafana ?:3000 1/1 18m ago 10d count:1
ingress.mgr 192.168.149.200:8443,8443 0/4 <deleting> 2h ceph1;ceph2