Go to file
Mehran Kholdi d52f8ffbe0 ext4: Do not reserve free space for root user upon creation
PVCs are data volumes most of the times, and reserving space for system
tasks is probably unnecessary.

The user can still modify a specific PVC's reserved blocks through the
`tune2fs` command.
2021-06-26 03:51:40 +04:30
.ci Fix ci setup script 2020-11-08 01:46:08 +03:30
csi Autogen csi grpc interface 2020-04-24 00:08:36 +04:30
deploy/charts/rawfile-csi Release 0.4.4 2021-02-26 17:56:47 +03:30
orchestrator Use immutable tags for running tasks 2020-05-29 21:04:40 +04:30
protos Autogen csi grpc interface 2020-04-24 00:08:36 +04:30
templates Fix typo 2021-02-13 02:03:04 +03:30
.dockerignore Configure CI 2020-04-24 19:35:37 +04:30
.gitignore Autogen python gitignore 2020-04-23 04:18:53 +04:30
.travis.yml Change conditions upon which e2e test are run 2020-11-28 04:50:30 +03:30
bd2fs.py Report "available" space rather than "free" space in volume stats 2021-06-26 03:51:40 +04:30
CODE_OF_CONDUCT.md chore(docs): add contributor guidelines 2020-06-13 06:08:25 +00:00
consts.py Release 0.4.4 2021-02-26 17:56:47 +03:30
declarative.py ext4: Do not reserve free space for root user upon creation 2021-06-26 03:51:40 +04:30
Dockerfile Update dependencies 2021-06-26 01:14:00 +04:30
GOVERNANCE.md chore(docs): add contributor guidelines 2020-06-13 06:08:25 +00:00
LICENSE Publish under Apache License 2.0 2020-06-12 02:31:02 +04:30
MAINTAINERS chore(docs): add contributor guidelines 2020-06-13 06:08:25 +00:00
metrics.py Report "available" space rather than "free" space in volume stats 2021-06-26 03:51:40 +04:30
rawfile_servicer.py Expose volume metrics through gRPC calls rather than metrics endpoint 2021-01-16 03:58:08 +03:30
rawfile_util.py Fix #5: Actually delete PVC image files 2021-02-26 16:10:10 +03:30
rawfile.py Fix #5: Actually delete PVC image files 2021-02-26 16:10:10 +03:30
README.md Change default provisioner name from rawfile.hamravesh.com to rawfile.csi.openebs.io 2020-08-15 01:36:05 +04:30
remote.py Fix race condition by making the scrub function idempotent 2021-06-26 02:50:39 +04:30
requirements.in Implement basic metrics 2020-04-26 02:02:00 +04:30
requirements.txt Update dependencies 2021-06-26 01:14:00 +04:30
SECURITY.md chore(docs): add contributor guidelines 2020-06-13 06:08:25 +00:00
util.py Handle attaching loop devices instead of handing it to mount 2020-04-26 02:01:42 +04:30
volume_schema.py Fix #5: Actually delete PVC image files 2021-02-26 16:10:10 +03:30

FOSSA Status

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.csi.openebs.io
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
    • ReadOnlyMany
    • ReadWriteMany
  • Volume modes
    • Filesystem mode
    • Block mode
  • Volume metrics
  • Supports fsTypes: ext4, btrfs
  • 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)

Motivation

One might have a couple of reasons to consider using node-based (rather than network-based) storage solutions:

  • Performance: Almost no network-based storage solution can keep up with baremetal disk performance in terms of IOPS/latency/throughput combined. And youd like to get the best out of the SSD youve got!
  • On-premise Environment: You might not be able to afford the cost of upgrading all your networking infrastructure, to get the best out of your network-based storage solution.
  • Complexity: Network-based solutions are distributed systems. And distributed systems are not easy! You might want to have a system that is easier to understand and to reason about. Also, with less complexity, you can fix unpredicted issues more easily.

Using node-based storage has come a long way since k8s was born. Right now, OpenEBSs hostPath makes it pretty easy to automatically provision hostPath PVs and use them in your workloads. There are known limitations though:

  • You cant monitor volume usage: There are hacky workarounds to run “du” regularly, but that could prove to be a performance killer, since it could put a lot of burden on your CPU and cause your filesystem cache to fill up. Not really good for a production workload.
  • You cant enforce hard limits on your volumes size: Again, you can hack your way around it, with the same caveats.
  • You are stuck with whatever filesystem your kubelet node is offering
  • You cant customize your filesystem:

All these issues stem from the same root cause: hostPath/LocalPVs are simple bind-mounts from the host filesystem into the pod.

The idea here is to use a single file as the block device, using Linuxs loop, and create a volume based on it. That way:

  • You can monitor volume usage by running df in O(1) since devices are mounted separately.
  • The size limit is enforced by the operating system, based on the backing file size.
  • Since volumes are backed by different files, each file could be formatted using different filesystems, and/or customized with different filesystem options.

License

FOSSA Status