d1c0d49cf0
Summary: Online volume expansion is a 2 phase process: 1. The backing storage, in this case the raw file, needs to be resized. (i.e. `truncate -s`) 2. The node should be notified, so that it can both refresh its device capacity (i.e. `losetup -c`) and resize the filesystem (`resize2fs`) accordingly. Although in our case both steps could be performed on the node itself, for the sake of following the semantics of how volume expansion works, we perform step 1 from the controller, and step 2 from the node. Also, the `external-resizer` component is added which watches for PVC size updates, and notifies the CSI controller about it. Test Plan: Setup: - Deploy - Create a rawfile-backed pvc, and attach a Deployment to it - Keep an eye on `rawfile` pod logs in `kube-system` namespace to see if any errors pop out during all scenarios Scenario 1: - Increase the size of the pvc - Exec into the pod and verify that the volume is resized indeed (using `df`) Scenario 2: - Decrease deployment's replica to 0 - Increase the size of the pvc. Wait for a couple of minutes. - Increase deployment's replica to 1 - Exec into the pod and verify that the volume is resized indeed. Reviewers: bghadiri, mhyousefi, h.marvi, sina_rad Reviewed By: bghadiri, mhyousefi, sina_rad Differential Revision: https://phab.hamravesh.ir/D817 |
||
---|---|---|
csi | ||
deploy/charts/rawfile-csi | ||
orchestrator | ||
protos | ||
templates | ||
.dockerignore | ||
.gitignore | ||
.gitlab-ci.yml | ||
CODE_OF_CONDUCT.md | ||
consts.py | ||
Dockerfile | ||
GOVERNANCE.md | ||
LICENSE | ||
MAINTAINERS | ||
metrics.py | ||
rawfile_servicer.py | ||
rawfile_util.py | ||
rawfile.py | ||
README.md | ||
remote.py | ||
requirements.in | ||
requirements.txt | ||
SECURITY.md | ||
util.py |
RawFilePV
Kubernetes LocalPVs on Steroids
Install
helm install -n kube-system rawfile-csi ./deploy/charts/rawfile-csi/
Usage
Create a StorageClass
with your desired options:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: rawfile.hamravesh.com
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Features
- Direct I/O: Near-zero disk performance overhead
- Dynamic provisioning
- Enforced volume size limit
- Thin provisioned
- Access Modes
- ReadWriteOnce
ReadOnlyManyReadWriteMany
- Volume modes
Filesystem
modeBlock
mode
- Volume metrics
- Supports fsTypes
- Online expansion: If fs supports it (e.g. ext4, btrfs)
- Online shrinking: If fs supports it (e.g. btrfs)
- Offline expansion/shrinking
- Ephemeral inline volume
- Snapshots: If the fs supports it (e.g. btrfs)