Coder Social home page Coder Social logo

aland-zhang / kube-linstor Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kvaps/kube-linstor

0.0 0.0 0.0 332 KB

Containerized LINSTOR SDS for Kubernetes, ready for production use.

License: Apache License 2.0

Dockerfile 43.44% Shell 48.98% Smarty 7.58%

kube-linstor's Introduction

Kube-Linstor

Containerized Linstor Storage easy to run in your Kubernetes cluster.

Images

Image Latest Tag
linstor-controller linstor-controller-version
linstor-satellite linstor-satellite-version
linstor-csi linstor-csi-version
linstor-stork linstor-stork-version
linstor-ha-controller linstor-ha-controller-version

Requirements

  • Working Kubernetes cluster (v1.18 or higher).
  • DRBD9 kernel module installed on each satellite node.
  • PostgeSQL database / etcd or any other backing store for redundancy.
  • Snapshot Controller (optional)

QuckStart

Kube-Linstor consists of several components:

  • Linstor-controller - Controller is the main control point for Linstor. It provides an API for clients and communicates with satellites for creating and monitoring DRBD-devices.
  • Linstor-satellite - Satellites run on every node. They listen and perform controller tasks, and operate directly with LVM and ZFS subsystems.
  • Linstor-csi - CSI driver provides compatibility level for adding Linstor support for Kubernetes.
  • Linstor-stork - Stork is a scheduler extender plugin for Kubernetes which allows a storage driver to give the Kubernetes scheduler hints about where to place a new pod so that it is optimally located for storage performance.

Preparation

Install Helm.

NOTE: Commands below provided for Helm v3 but Helm v2 is also supported.
You can use helm template instead of helm install, this is also working as well.

Create linstor namespace.

kubectl create ns linstor

Install Helm repository:

helm repo add kvaps https://kvaps.github.io/charts

Database

  • Install stolon chart:

    # download example values
    curl -LO https://github.com/kvaps/kube-linstor/raw/v1.14.0/examples/linstor-db.yaml
    
    # install release
    helm install linstor-db kvaps/stolon \
      --namespace linstor \
      -f linstor-db.yaml

    NOTE: The current example will deploy stolon cluster on your Kubernetes-master nodes

    NOTE: In case of update your stolon add --set job.autoCreateCluster=false flag to not reinitialisate your cluster.

  • Create Persistent Volumes:

    helm install data-linstor-db-stolon-keeper-0 kvaps/pv-hostpath \
      --namespace linstor \
      --set path=/var/lib/linstor-db \
      --set node=node1
    
    helm install data-linstor-db-stolon-keeper-1 kvaps/pv-hostpath \
      --namespace linstor \
      --set path=/var/lib/linstor-db \
      --set node=node2
    
    helm install data-linstor-db-stolon-keeper-2 kvaps/pv-hostpath \
      --namespace linstor \
      --set path=/var/lib/linstor-db \
      --set node=node3

    Parameters name and namespace must match the PVC's name and namespace of your database, node should match exact node name.

    Check your PVC/PV list after creation, if everything right, they should obtain Bound status.

  • Connect to database:

    kubectl exec -ti -n linstor sts/linstor-db-stolon-keeper -- bash
    PGPASSWORD=$(cat $STKEEPER_PG_SU_PASSWORDFILE) psql -h linstor-db-stolon-proxy -U stolon postgres
  • Create user and database for linstor:

    CREATE DATABASE linstor;
    CREATE USER linstor WITH PASSWORD 'hackme';
    GRANT ALL PRIVILEGES ON DATABASE linstor TO linstor;

Linstor

  • Install kube-linstor chart:

    # download example values
    curl -LO https://github.com/kvaps/kube-linstor/raw/v1.14.0/examples/linstor.yaml
    
    # install release
    helm install linstor kvaps/linstor --version 1.14.0 \
      --namespace linstor \
      -f linstor.yaml

    NOTE: The current example will deploy linstor- and csi-controllers on your Kubernetes-master nodes and satellites on all nodes in the cluster.

Install snapshot-controller

https://kubernetes-csi.github.io/docs/snapshot-controller.html#deployment

Usage

The satellite nodes will register themselves on controller automatically by init-container.

You can get interactive linstor shell by simple exec into linstor-controller pod:

kubectl exec -ti -n linstor deploy/linstor-controller -- linstor interactive

Refer to official linstor documentation to define storage pools on them and configure resource groups.

SSL notes

This chart enables SSL encryption for control-plane by default. It does not affect the DRBD performance but makes your LINSTOR setup more secure.

If you want to have external access, you need to download certificates for linstor client:

kubectl get secrets --namespace linstor linstor-client-tls \
  -o go-template='{{ range $k, $v := .data }}{{ $v | base64decode }}{{ end }}'

Then follow official linstor documentation to configure the client.

Additional Information

How Kube-Linstor compares to other DRBD-on-Kubernetes solutions

Piraeus Operator

Piraeus Operator is the operator that powers Piraeus, LINBIT's official Software Defined Storage (SDS) solution for Kubernetes. The dependencies of Kube-Linstor and Piraeus Operator are mostly shared, as both projects aim to create and administer LINSTOR clusters, but there are some differences in methodology and features:

  • Kube-Linstor aims to be simple to operate, with less built-in logic for more straight-forward administration. To achieve this goal Kube-Linstor installs via a simple Helm chart, and installs primarily Kubernetes-native resources (Deployments, DaemonSets, etc).
  • Piraeus Operator relies heavily on a Custom Resource Definition-driven approach to bootstrapping pieces of infrastructure like the Linstor-Server (satellites, etc) itself. With Piraeus Operator you create CRDs that manage the creation of Kubernetes-native resources
  • Kube-Linstor directly contains the Deployments, DaemonSets and other Kubernetes-native resources as necessary
  • Both Piraeus Operator and Kube-Linstor offer offers automatic configuration of nodes, storage pools and other LINSTOR-related resources. Where Piraeus Operator accomplishes this with CRDs, Kube-Linstor uses simple shell script with template helpers integrated into the Helm chart
  • Piraeus Operator offers automatic DRBD9 Kernel Module Injection Image. Kube-Linstor expects the DRBD9 kernel module to pre-installed on all nodes.

Licenses

kube-linstor's People

Contributors

bazuchan avatar diwu1989 avatar elmato avatar it-svit avatar jbanety avatar krakazyabra avatar kvaps avatar seeekr avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.