❓ What?
Storage classes in [storage class](./ceph]] correspond to a certain data pool. They are a subsection of placement-rules-ceph-s3 that link them to data pools. A [[./storage-classes-ceph-s3) is unique to a placement rule but placement rules can have many storage classes. Every placement rule has a storage class called STANDARD
by default but this STANDARD
might correspond to different data pools for different placement rules.
Changing Default Storage Class for a User
The default storage class for a placement rule (and therefore a bucket) cannot be modified. If it’s desired that a certain user’s uploads, by default, goto a different storage class, this can be done by modifying the default_storage_class
key for the specific user with radosgw-admin
.
$ radosgw-admin user info --uid test-user
{
"user_id": "test-user",
"display_name": "test-user",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "test-user",
"access_key": "QTAQHWDZBLBSPAK3MEL3",
"secret_key": "Oe9oqCDY1c3DIgqnK34CBo0M4IWyXkYtTP7MP3Yf"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
$ radosgw-admin user modify \
--uid test-user \
--placement-id default-placement \
--storage-class hot_storage_class
{
"user_id": "test-user",
"display_name": "test-user",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "test-user",
"access_key": "QTAQHWDZBLBSPAK3MEL3",
"secret_key": "Oe9oqCDY1c3DIgqnK34CBo0M4IWyXkYtTP7MP3Yf"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "default-placement",
"default_storage_class": "hot_storage_class",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
Otherwise, a storage class can also be specified during the time of the upload like in the placement rule example.
❔ Why?
Storage classes help users and administrators to prioritise space and costs by having different types of storage classes corresponding to different types of Device Class|device classes. For example, frequently accessed data may reside on NVMe while archives may reside on HDD. This type of Transitioning Data to a Different Storage Class|transitioning is made possible with Lifecycle Policy|lifecycle policies.
🎤 How?
A storage class can be created like so:
Same over the command line:
radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id default-placement \
--storage-class hot_storage_class
radosgw-admin zone placement add \
--rgw-zone default \
--placement-id default-placement \
--storage-class hot_storage_class \
--data-pool hot.rgw.data \
--compression lz4
👓 References
https://docs.ceph.com/en/latest/radosgw/placement/#adding-a-storage-class