• Stars
    star
    139
  • Rank 261,427 (Top 6 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created almost 8 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

CAS Data Engine - iSCSI Distributed Block Storage Controller built-in Go

Jiva

Build Status Releases Docker Pulls Slack Community Meetings Twitter PRs Welcome Codacy Badge Go Report Card GoDoc CII Best Practices FOSSA Status

OpenEBS Logo

OpenEBS Jiva can be used to dynamically provision highly available Kubernetes Persistent Volumes using local (ephemeral) storage available on the Kubernetes nodes.


Overview

Jiva provides containerized block storage controller.

Jiva Operator helps with dynamically provisioning Jiva Volumes and managing their lifecycle.

Usage

Supported Block Storage Features

  • Thin Provisioning
  • Enforce volume quota
  • Synchronous replication
  • High Availability
  • Incremental/Full Snapshot
  • Full Backup and Restore (using Velero)
  • Supports OS/ARCH: linux/arm64, linux/amd64

How does High Availability work?

Jiva comprises of two components:

  • A Target ( or a Storage Controller) that exposes iSCSI, while synchronously replicating the data to one or more Replicas.
  • A set of Replicas that a Target uses to read/write data. Each of the replicas will be on a different node to ensure high availability against node or network failures. The Replicas save the data into sparse files on the host filesystem directories.

For ensuring that jiva volumes can sustain a node failure, the volumes must be configured with atleast 3 replicas. The target will serve the data as long as there are two healthy replicas. When a node with a replica fails and comes back online, the replica will start in a degraded mode and start rebuilding the missed data from the available healthy replicas.

If 2 of the 3 replicas go offline at the same time, then volume will be marked as read-only. This ensures that target can decided which of the replicas has the latest data.

How does Jiva Perform?

Jiva is optimized for consistency and availability and not performance. There is a significant degradation in performance compared to local storage due to the following design choices:

  • Jiva uses "strong consistency" approach where target will make the write operation as completed only after the data is confirmed to be written to all the healthy replicas.
  • Also Jiva does not implement any caching logic, to allow for the jiva target and replica containers to be ephemeral.
  • Jiva engine is completely written in user space to be able to run on any platform and make upgrades seamless.

If you need low latency storage, please checkout other OpenEBS Engines like Mayastor and Local PVs.

Who uses Jiva?

Some of the organizations that have publicly shared the usage of Jiva.

You can see the full list of organizations/users using OpenEBS here.

If you are using Jiva, and would like yourself to be listed in this page as a an adopter, please raise an issue with the following details:

  • Stateful Applications that you are running on OpenEBS
  • Are you evaluating or already using in development, CI/CD, production
  • Are you using it for home use or for your organization
  • A brief description of the use case or details on how OpenEBS is helping your projects.

If you would like your name (as home user) or organization name to be added to the ADOPTERS.md, please provide a preferred contact handle like github id, twitter id, linkedin id, website etc.

Contributing

OpenEBS welcomes your feedback and contributions in any form possible.

Code of conduct

Please read the community code of conduct here.

Inspiration and Credit

OpenEBS Jiva uses the following two projects:

  • Fork of the Longhorn engine, which helped with the significant portion of the code in this repo, helped us to validate that Storage controllers can be run as microservices and they can be coded in Go.
  • The iSCSI functionality is provided by gostor/gotgt.

License

FOSSA Status

More Repositories

1

openebs

Most popular & widely deployed Open Source Container Native Storage platform for Stateful Persistent Applications on Kubernetes.
8,910
star
2

mayastor

Dynamically provision Stateful Persistent Replicated Cluster-wide Fabric Volumes & Filesystems for Kubernetes that is provisioned from an optimized NVME SPDK backend data storage stack.
Rust
712
star
3

zfs-localpv

Dynamically provision Stateful Persistent Node-Local Volumes & Filesystems for Kubernetes that is integrated with a backend ZFS data storage stack.
Go
411
star
4

lvm-localpv

Dynamically provision Stateful Persistent Node-Local Volumes & Filesystems for Kubernetes that is integrated with a backend LVM2 data storage stack.
Go
243
star
5

maya

Manage Container Attached Storage (CAS) - Data Engines in Kubernetes
Go
187
star
6

node-disk-manager

Kubernetes Storage Device Management
Go
181
star
7

dynamic-nfs-provisioner

Operator for dynamically provisioning an NFS server on any Kubernetes Persistent Volume. Also creates an NFS volume on the dynamically provisioned server for enabling Kubernetes RWX volumes.
Go
150
star
8

dynamic-localpv-provisioner

Dynamically deploy Stateful Persistent Node-Local Volumes & Filesystems for Kubernetes that is provisioned from simple Local-Hostpath /root storage.
Go
137
star
9

charts

OpenEBS Helm Charts and other utilities
Mustache
100
star
10

cstor-operators

Collection of OpenEBS cStor Data Engine Operators
Go
91
star
11

rawfile-localpv

Dynamically deploy Stateful Persistent Node-Local Volumes & Filesystems for Kubernetes that is provisioned from RAW-device file loop mounted Local-Hostpath storage.
Python
67
star
12

velero-plugin

Velero plugin for backup/restore of OpenEBS cStor volumes
Go
61
star
13

spdk-rs

Enables building safer SPDK-based Rust applications
Rust
53
star
14

jiva-operator

Kubernetes Operator for managing Jiva Volumes via custom resource.
Go
47
star
15

openebs-docs

OpenEBS Documentation
JavaScript
37
star
16

mayastor-control-plane

Control plane for OpenEBS Mayastor
Rust
33
star
17

cstor-csi

cStor CSI Driver
Go
32
star
18

monitoring

OpenEBS Monitoring add-on. A set of Grafana, Prometheus, and alert manager plugins.
Jsonnet
30
star
19

openebsctl

`openebsctl` is a kubectl plugin to manage OpenEBS storage components.
Go
28
star
20

device-localpv

CSI Driver for using Local Block Devices
Go
24
star
21

istgt

CAS Data Engine - iSCSI Target for OpenEBS cStor
C
23
star
22

vhost-user

vhost for containerised storage
C
22
star
23

mayastor-extensions

Components and utilities which extend the Mayastor core control & data plane functionality
Rust
18
star
24

libcstor

CAS Data Engine - Library to serve IOs on uZFS with synchronous replication, snapshots and clones
C
18
star
25

performance-benchmark

Performance benchmarking for containerised storage solutions
Shell
17
star
26

elves

Helpers of OpenEBS
Python
16
star
27

website

OpenEBS Website and User Documentation
TypeScript
13
star
28

spdk-sys

Rust bindings for SPDK
Rust
12
star
29

upgrade

contains components that help with OpenEBS data engine upgrades
Go
10
star
30

e2e-tests

E2e tests for OpenEBS. The tests are run on various platforms and results can be seen at https://openebs.ci
Jinja
10
star
31

community-archive

Please refer to https://github.com/openebs/openebs for community updates.
Shell
9
star
32

api

The canonical location of the OpenEBS API definition.
Go
7
star
33

mayastor-docs

Official GitBook-based documentation for OpenEBS Mayastor
JavaScript
6
star
34

helm-operator

Helm Operator for OpenEBS Installation
Makefile
6
star
35

mayastor-dependencies

MayaData Dependencies
Rust
6
star
36

linux-utils

OpenEBS apline based docker images with linux utilities used for launching helper jobs.
Makefile
5
star
37

lib-csi

common packages used by OpenEBS CSI Drivers
Go
4
star
38

mayastor-api

Nix
4
star
39

monitor-pv

custom stats collector for OpenEBS persistent volumes
Shell
4
star
40

data-populator

data populator
Go
3
star
41

community

OpenEBS community resources
3
star
42

jiva-csi

CSI Driver for OpenEBS Jiva Volumes
Go
2
star
43

sts-pv-pvc-handler

Go
2
star
44

moac

The moac control plane for OpenEBS Mayastor has been deprecated as of release v1.0
JavaScript
2
star
45

mayastor-charts

Shell
1
star
46

m-exporter

Go
1
star
47

openebs-k8s-provisioner

Kubernetes external provisioner for OpenEBS cStor and Jiva Volume.
Go
1
star
48

.github

Top level project User Experience repo
1
star
49

google-analytics-4

Google analytics version 4 client for OpenEBS engines
Go
1
star