README.md

    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:>=1.18 (*least verified version)

    • 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

    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
    $ cd deploy/kubernetes
    # install, if k8s>=1.22, you can use the './deploy.sh signature 'command to install it
    $ ./deploy.sh
    # uninstall
    $ ./deploy.sh uninstall

    Contribution Guide

    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 not yet, comming soon
    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 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.

    项目简介

    一款高性能、免运维的云原生本地存储开源方案

    发行版本

    当前项目没有发行版本

    贡献者 6

    SunnyJim @baobaoxiannv
    A antmoveh @antmoveh
    Z ZhenhuaZhang @ZhenhuaZhang
    Z Zhang Zhenhua @Zhang Zhenhua

    开发语言

    • Go 94.4 %
    • Shell 3.4 %
    • Makefile 1.3 %
    • Dockerfile 0.6 %
    • Starlark 0.3 %