Ceph Cheatsheet
CLI
# Check status
ceph -s
ceph status
# Help
ceph -h
If Ceph is not deployed in cluster:
# Check status
$ systemctl status ceph
# Restart Ceph
$ systemctl restart ceph
# Check logs
$ journalctl -u ceph
Related Objects:
apiVersion: storage.k8s.io/v1
kind: CSIDriver
apiVersion: ceph.rook.io/v1
kind: CephCluster
CephCluster
is showing the same info as in ceph -s
.
Ceph vs Rook
- Ceph is the Storage.
- Rook is the Storage Operator: It automates the tasks of a storage administrator: deployment, bootstrapping, configuration, provisioning, scaling, upgrading, migration, disaster recovery, monitoring, and resource management.
Block, FS, Object
RADOS: Reliable Autonomous Distributed Object Store. A low-level data store that provides a common backend for multiple user-consumable services. Ceph's foundation.
- RBD: RADOS Block Device. The block storage which can be assigned to pods. Usually RWO.
- OSD: Object Storage Device: Ceph OSD daemons to provide RADOS storage.
- CephFS: shared filesystem volumes, usually RWX.
Components
- Object Storage Devices (OSDs). An OSD in RADOS is always a folder within an existing filesystem. All OSDs together form the object store proper, and the binary objects that RADOS generates from the files to be stored reside in the store. The hierarchy within the OSDs is flat: files with UUID-style names but no subfolders.
ceph-osd
is the object storage daemon. - Ceph Monitor (MON): MONs form the interface to the RADOS store and support access to the objects within the store. They handle communication with all external applications and work in a decentralized way.
- Ceph Manager (MGR)
- Ceph Metadata Server (MDS)
- Ceph Object Gateway (RGW)
Deployment in Kubernetes
2 ways to use Ceph
- (in cluster) as containerized workload: replication x3, ha,
- (external) as non-containerized: directly run on the machine, deployed as part of systemd.
Either way
rook-ceph-operator
will manage damonsets likecsi-rbdplugin
.- default namespace:
rook-ceph
.
In cluster
(Ceph requires 3 nodes to run in containerized mode.)
- rook-ceph-operator
- rook-ceph-mgr
- rook-ceph-mon
- rook-ceph-osd
External
An external cluster is a Ceph configuration that is managed outside of the local K8s cluster. The external cluster could be managed by cephadm
.
How to check if Ceph is external? Check if CephCluster
has .spec.external.enable: true
.
If external, you will only find this in the cluster:
- rook-ceph-operator
Troubleshooting
If you are seeing issues provisioning the PVC then you need to check the network connectivity from the provisioner pods.
- For CephFS PVCs, check network connectivity from the
csi-cephfsplugin
container of thecsi-cephfsplugin-provisioner
pods - For Block PVCs, check network connectivity from the
csi-rbdplugin
container of thecsi-rbdplugin-provisioner
pods
Placement Group
PG = “placement group”. When placing data in the cluster, objects are mapped into PGs, and those PGs are mapped onto OSDs.
Why the indirection? "so that we can group objects, which reduces the amount of per-object metadata we need to keep track of and processes we need to run".
Source Code
- Ceph: https://github.com/ceph/ceph (C++)
- Ceph CSI: CSI driver for Ceph https://github.com/ceph/ceph-csi/ (Go)
- Rook: https://github.com/rook/rook (Go)