All Projects → moosefs → moosefs-csi

moosefs / moosefs-csi

Licence: Apache-2.0 license
Container Storage Interface (CSI) for MooseFS

Programming Languages

go
31211 projects - #10 most used programming language
Dockerfile
14818 projects
Makefile
30231 projects
shell
77523 projects

Projects that are alternatives of or similar to moosefs-csi

linode-blockstorage-csi-driver
Container Storage Interface (CSI) Driver for Linode Block Storage
Stars: ✭ 50 (+13.64%)
Mutual labels:  storage, volume, csi
carina
Carina: an high performance and ops-free local storage for kubernetes
Stars: ✭ 256 (+481.82%)
Mutual labels:  storage, csi
kubernetes-marketplace
Marketplace of Kubernetes applications available for quick and easy installation in to Civo Kubernetes clusters
Stars: ✭ 136 (+209.09%)
Mutual labels:  storage, cluster
Koa Redis
Redis storage for Koa session middleware/cache with Sentinel and Cluster support
Stars: ✭ 324 (+636.36%)
Mutual labels:  storage, cluster
shoebox
ShoeBox is a Kotlin library for persistent data storage that supports views and the observer pattern. While often used with Kweb, it doesn't need to be.
Stars: ✭ 48 (+9.09%)
Mutual labels:  storage, persistent-storage
lvm-localpv
CSI Driver for dynamic provisioning of Persistent Local Volumes for Kubernetes using LVM.
Stars: ✭ 86 (+95.45%)
Mutual labels:  storage, csi
Vagrant Persistent Storage
A Vagrant plugin that creates a persistent storage and attaches it to guest machine.
Stars: ✭ 285 (+547.73%)
Mutual labels:  storage, persistent
Ksync
Sync files between your local system and a kubernetes cluster.
Stars: ✭ 1,005 (+2184.09%)
Mutual labels:  cluster, kubernetes-cluster
Openebs
Leading Open Source Container Attached Storage, built using Cloud Native Architecture, simplifies running Stateful Applications on Kubernetes.
Stars: ✭ 7,277 (+16438.64%)
Mutual labels:  storage, persistent-storage
React Storage Hooks
React hooks for persistent state
Stars: ✭ 146 (+231.82%)
Mutual labels:  storage, persistent
Maya
Manage Container Attached Storage (CAS) - Data Engines in Kubernetes
Stars: ✭ 169 (+284.09%)
Mutual labels:  storage, volume
ibm-spectrum-scale-csi
The IBM Spectrum Scale Container Storage Interface (CSI) project enables container orchestrators, such as Kubernetes and OpenShift, to manage the life-cycle of persistent storage.
Stars: ✭ 41 (-6.82%)
Mutual labels:  storage, csi
Ansible Role K3s
Ansible role for installing k3s as either a standalone server or HA cluster.
Stars: ✭ 132 (+200%)
Mutual labels:  cluster, kubernetes-cluster
kubernetes the easy way
Automating Kubernetes the hard way with Vagrant and scripts
Stars: ✭ 22 (-50%)
Mutual labels:  cluster, kubernetes-cluster
Ansible Rpi K8s Cluster
Deploy Raspberry Pi Kubernetes cluster using Ansible
Stars: ✭ 131 (+197.73%)
Mutual labels:  cluster, kubernetes-cluster
kube-watch
Simple tool to get webhooks on Kubernetes cluster events
Stars: ✭ 21 (-52.27%)
Mutual labels:  cluster, kubernetes-cluster
Kubernetes Gpu Guide
This guide should help fellow researchers and hobbyists to easily automate and accelerate there deep leaning training with their own Kubernetes GPU cluster.
Stars: ✭ 740 (+1581.82%)
Mutual labels:  cluster, kubernetes-cluster
K8s Digitalocean Terraform
Deploy latest Kubernetes cluster on DigitalOcean using Terraform
Stars: ✭ 33 (-25%)
Mutual labels:  cluster, kubernetes-cluster
Ffdl
Fabric for Deep Learning (FfDL, pronounced fiddle) is a Deep Learning Platform offering TensorFlow, Caffe, PyTorch etc. as a Service on Kubernetes
Stars: ✭ 640 (+1354.55%)
Mutual labels:  storage, kubernetes-cluster
Volplugin
**EXPERIMENTAL** Contiv Storage: Policy backed Clustered Storage (via Ceph or NFS) for Docker
Stars: ✭ 217 (+393.18%)
Mutual labels:  storage, volume

Container Storage Interface (CSI) for MooseFs

Container storage interface is an industry standard that will enable storage vendors to develop a plugin once and have it work across a number of container orchestration systems.

MooseFs is an open-source distributed file system which aims to be fault-tolerant, highly available, highly performing, scalable general-purpose network distributed file system for data centers.

Introduction

Similar to other storage providers MooseFs can act as a layer on top of hybrid storage. The storage can be distributed across multiple private/public clouds.

alt MooseFSCSI

How it works (Kubernetes)

MooseFs abstracts heterogenous storage providers and acts as a single interface. Here, you can see a kubernetes cluster with moosefs-csi in GKE having storage from AWS elastic block store and Google's persistant disk. alt k8sMooseFs

Version Compatibility

Kubernetes csi-cluster-driver-registrar csi-node-driver-registrar csi-attacher csi-provisioner MooseFS CSI AWS MooseFS CSI GKE MooseFS CSI Azure MooseFS CSI EP (On_prem)
v1.13.1 v1.0.1 v1.0.1 v1.0.1 v1.0.1 v0.0.4 - - v0.0.4

Deployment (Kubernetes)

Prerequisites:

  • Already have a working Kubernetes cluster (includes kubectl)
  • AWS/GCP/Azure credentials available (not needed for on premise clusters[EP])

Storage deployment topology (Optional)

  • Inorder to work with MooseFS, one should choose the MooseFS topology. MooseFS consists of Master and Chunk servers, get to know more about MooseFS architecture here.
  • The topology to be passed to this plugin should be of format: master:<Provider>,chunk:<Provider>. Some valid examples:
    • master:EP,chunk:EP, EP here stands for endpoint
    • master:AWS,chunk:AWS,
    • master:AWS,chunk:GCP,
    • chunk:AZURE,master:GCP
  • Limitations: As of now, there is support only for: AWS,AWS and EP,EP i.e. the first two example above. The rest of the combinations are under development.

AWS EBS storage for your Kubernetes cluster

  1. Git clone this repository and add your credentials to deploy/kubernetes/moosefs-csi.yaml

  2. Apply the container storage interface for moosefs for your cluster

$ kubectl apply -f deploy/kubernetes/moosefs-csi.yaml
  1. Ensure all the containers are ready and running
$ kubectl get po -n kube-system
  1. Testing: Create a persistant volume claim for 5GiB with name moosefs-csi-pvc with storage class moosefs-block-storage
$ kubectl apply -f deploy/kubernetes/sample-moosefs-pvc.yaml
  1. Verify if the persistant volume claim exists and wait until its the STATUS is Bound
$ kubectl get pvc
  1. After its in Bound state, create a sample workload mounting that volume
$ kubectl apply -f deploy/kubernetes/sample-busybox-pod.yaml
  1. Verify the storage mount of the busybox pod
$ kubectl exec my-csi-app -- df -h
  1. Clean up
$ kubectl delete -f deploy/kubernetes/sample-busybox-pod.yaml
$ kubectl delete -f deploy/kubernetes/sample-moosefs-pvc.yaml
$ kubectl delete -f deploy/kubernetes/moosefs-csi.yaml

Utilize exiting on-premise MooseFS storage for your Kubernetes cluster (bare metal)

  1. Git clone this repository and add your MooseFS master IP to deploy/kubernetes/moosefs-csi-ep.yaml (2 places)

  2. Apply the container storage interface for moosefs for your cluster

$ kubectl apply -f deploy/kubernetes/moosefs-csi-ep.yaml
  1. Ensure all the containers are ready and running
$ kubectl get po -n kube-system
  1. Testing: Create a persistant volume claim for 5GiB with name moosefs-csi-pvc with storage class moosefs-block-storage. The value, 5Gib does not have any significance as for MooseFS the whole filesystem is mounted into the container.
$ kubectl apply -f deploy/kubernetes/sample-moosefs-pvc.yaml
  1. Verify if the persistant volume claim exists and wait until its the STATUS is Bound
$ kubectl get pvc
  1. After its in Bound state, create a sample workload mounting that volume
$ kubectl apply -f deploy/kubernetes/sample-busybox-pod.yaml
  1. Verify the storage mount of the busybox pod
$ kubectl exec my-csi-app -- df -h
  1. Clean up
$ kubectl delete -f deploy/kubernetes/sample-busybox-pod.yaml
$ kubectl delete -f deploy/kubernetes/sample-moosefs-pvc.yaml
$ kubectl delete -f deploy/kubernetes/moosefs-csi.yaml

Debuging

Section Issues Commands
Persistance volume claim pvc is in Pending state kubectl get events
kubectl logs csi-attacher-moosefs-plugin-0 -c moosefs-csi-plugin -n kube-system
kubectl logs csi-provisioner-moosefs-plugin-0 -c moosefs-csi-plugin -n kube-system
Driver name not found MountVolume.MountDevice failed for volume "pvc-XYZ" : driver name com.tuxera.moosefs.csi not found in the list of registered CSI drivers Ensure kube-apiserver and kubelet has the correct feature-gates enabled (for k8s < 1.14)

Developing and contributing

  1. Add and commit your changes after forking this repository
  2. Run unit tests
make test
  1. After its successfull, create a pull request ❤️ ❤️

Miscelleneous

Description Command
AWS session token creation aws sts get-session-token --duration-seconds 129600
Docker command for launching moosefs docker run --cap-add SYS_ADMIN --security-opt apparmor:unconfined -v /dev/fuse:/dev/fuse --privileged -it mfs /bin/bash

TODO

  • Possibility to define the count of physical disks on servers
  • Possibility to define the count of chunk servers
  • Automatically generate the best mooseFs configration based on user's need/metrics (how many chunks, topology of servers etc.)
  • Possibility to define replication goal (Erosure codes)

Known Bugs/limitations

  • AWS
    • Chunk server creation is not idempotent, sometimes creates more chunk servers than requested causing more disk space available than requested.
    • AWS Security Group is not deleted while decommissioning, needs to be done manually
    • Fargate cluster is not deleted while decommissioning

MountVolume.MountDevice failed for volume "pvc-c3738d2cc47711e8" : driver name com.digitalocean.csi.dobs not found in the list of registered CSI drivers

License

Apache v2 license

Code of conduct

Participation in this project is governed by Kubernetes/CNCF code of conduct

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].