All Projects → carina-io → carina

carina-io / carina

Licence: Apache-2.0 License
Carina: an high performance and ops-free local storage for kubernetes

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects
Makefile
30231 projects
Smarty
1635 projects
Dockerfile
14818 projects
Mustache
554 projects
Starlark
911 projects

Projects that are alternatives of or similar to carina

synology-csi
Container Storage Interface (CSI) for Synology
Stars: ✭ 136 (-46.87%)
Mutual labels:  storage, csi
Linstor Server
High Performance Software-Defined Block Storage for container, cloud and virtualisation. Fully integrated with Docker, Kubernetes, Openstack, Proxmox etc.
Stars: ✭ 374 (+46.09%)
Mutual labels:  storage, high-performance
Awesome Scalability Toolbox
My opinionated list of products and tools used for high-scalability projects
Stars: ✭ 34 (-86.72%)
Mutual labels:  storage, high-performance
linode-blockstorage-csi-driver
Container Storage Interface (CSI) Driver for Linode Block Storage
Stars: ✭ 50 (-80.47%)
Mutual labels:  storage, csi
moosefs-csi
Container Storage Interface (CSI) for MooseFS
Stars: ✭ 44 (-82.81%)
Mutual labels:  storage, csi
lvm-localpv
CSI Driver for dynamic provisioning of Persistent Local Volumes for Kubernetes using LVM.
Stars: ✭ 86 (-66.41%)
Mutual labels:  storage, csi
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 (-83.98%)
Mutual labels:  storage, csi
k8s-csi-lvm
Kubernetes CSI drivers for LVM
Stars: ✭ 25 (-90.23%)
Mutual labels:  lvm, csi
nft.storage-tools
🛠 Utilities for working with nft.storage.
Stars: ✭ 15 (-94.14%)
Mutual labels:  storage
hermitage-skeleton
Hermitage Skeleton
Stars: ✭ 16 (-93.75%)
Mutual labels:  storage
memo
Android processing and secured library for managing SharedPreferences as key-value elements efficiently and structurally.
Stars: ✭ 18 (-92.97%)
Mutual labels:  storage
kipp
A flexible file storage server
Stars: ✭ 33 (-87.11%)
Mutual labels:  storage
ormdb
ORM tool for .Net / .Net.Core
Stars: ✭ 14 (-94.53%)
Mutual labels:  high-performance
oxen-storage-server
Storage server for Oxen Service Nodes
Stars: ✭ 19 (-92.58%)
Mutual labels:  storage
AzureServicesForUnity
Accessing Azure services (App Service, Table Storage, CosmosDB with Table API, Event Hubs) from a Unity game
Stars: ✭ 52 (-79.69%)
Mutual labels:  storage
leafserver
🍃A high performance distributed unique ID generation system
Stars: ✭ 31 (-87.89%)
Mutual labels:  high-performance
asto
Abstract Storage for All Artipie Slices
Stars: ✭ 16 (-93.75%)
Mutual labels:  storage
jiva
CAS Data Engine - iSCSI Distributed Block Storage Controller built-in Go
Stars: ✭ 121 (-52.73%)
Mutual labels:  storage
arc gcs
Provides an Arc backend for Google Cloud Storage
Stars: ✭ 48 (-81.25%)
Mutual labels:  storage
lockbox-datastore
Experimental Data Storage module for Firefox Lockbox project, not being actively developed
Stars: ✭ 26 (-89.84%)
Mutual labels:  storage

Carina

License

English | 中文

Background

Storage systems are complex! There are more and more kubernetes native storage systems nowadays and stateful applications are shifting into cloud native world, for example, modern databases and middlewares. However, both modern databases and its storage providers try to solve some common problems in their own way. For example, they both deal with data replications and consistency. This introduces a giant waste of both capacity and performance and needs more mantainness effort. And besides that, stateful applications strive to be more peformant, eliminating every possible latency, which is unavoidable for modern distributed storage systems. Enters carina.

Carina is a standard kubernetes CSI plugin. Users can use standard kubernetes storage resources like storageclass/PVC/PV to request storage media. Its key features includes:

  • Completely kubernetes native and easy to install
  • Using local disks and partition them into different groups based on disk type, user can provison different type of disks using different storage class.
  • Scaning physical disks and building a RAID as required. If disk fails, just plugin a new one and it's done.
  • Node capacity and performance aware, so scheduling pods more smartly.
  • Extremly low overhead. Carina sit besides the core data path and provide raw disk performance to applications.
  • Auto tiering. Admins can configure carina to combine the large-capacity-but-low-performant disk and small-capacity-but-high-performant disks as one storageclass, so user can benifit both from capacity and performance.
  • If nodes fails, carina will automatically detach the local volume from pods thus pods can be rescheduled.

Running Environments

  • Kubernetes:(CSI_VERSION=1.3.0)

  • Node OS:Linux

  • Filesystems:ext4,xfs

  • If Kubelet is running in containerized mode, you need to mount the host /dev directory

  • Each node in the cluster has 1..N Bare disks, supporting SSDS and HDDS. (You can run the LSBLK --output NAME,ROTA command to view the disk type. If ROTA=1 is HDD,ROTA =0 is SSD.)

  • The capacity of a raw disk must be greater than 10 GB

  • If the server does not support the bcache kernel module, see FAQ, Modify yamL deployment

Carina architecture

Carina is built for cloudnative stateful applications with raw disk performance and ops-free maintainess. Carina can scan local disks and classify them by disk types, for example, one node can have 10 HDDs and 2 SSDs. Carina then will group them into different disk pools and user can request different disk type by using different storage class. For data HA, carina now leverages STORCLI to build RAID groups.

carina-arch

Carina components

It has three componets: carina-scheduler, carina-controller and carina-node.

  • carina-scheduler is an kubernetes scheduler plugin, sorting nodes based on the requested PV size、node's free disk space and node IO perf stats. By default, carina-scheduler supports binpack and spreadout policies.
  • carina-controller is the controll plane of carina, which watches PVC resources and maintain the internal logivalVolume object.
  • carina-node is an agent which runs on each node. It manage local disks using LVM.

Features

Quickstart

Install by shell

  • In this deployment mode, the image TAG is Latest. If you want to deploy a specific version of Carina, you need to change the image address
$ cd deploy/kubernetes
# install, The default installation is kube-system.
$ ./deploy.sh

# uninstall
$ ./deploy.sh uninstall

Install by helm3

  • Support installation of specified versions of Carina
helm repo add carina-csi-driver https://raw.githubusercontent.com/carina-io/charts/main

helm search repo -l carina-csi-driver

helm install carina-csi-driver carina-csi-driver/carina-csi-driver --namespace kube-system --version v0.9.0

Carina to upgrade

  • Uninstall the old version ./deploy.sh uninstall and then install the new version ./deploy.sh (uninstalling carina will not affect volume usage)

Contribution Guide

Roadmap

Typical storage providers

NFS/NAS SAN Ceph Carina
typical usage general storage high performance block device extremly scalability high performance block device for cloudnative applications
filesystem yes yes yes yes
filesystem type NFS driver specific ext4/xfs ext4/xfs
block no yes yes yes
bandwidth standard standard high high
IOPS standard high standard high
latency standard low standard low
CSI support yes yes yes yes
snapshot no driver specific yes yes
clone no driver specific yes not yet, comming soon
quota no yes yes yes
resizing yes driver specific yes yes
data HA RAID or NAS appliacne yes yes RAID
ease of maintainess driver specific multiple drivers for multiple SAN high maintainess effort ops-free
budget high for NAS high high low, using the extra disks in existing kubernetes cluster
others data migrates with pods data migrates with pods data migrates with pods binpack or spreadout scheduling policy
data doesn't migrate with pods
* inplace rebulid if pod fails

FAQ

Similar projects

Community

  • 微信用户扫码进入社区交流群

carina-wx

License

Carina is under the Apache 2.0 license. See the LICENSE file for details.

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].