Code Monkey home page Code Monkey logo

gluster-subvol's Introduction

Overview

Project status: (Mar 2020) The code in this repository is no longer under active development. If you are interested in helping to maintain this project, please open an issue or send mail to [email protected]. Assuming no additional interest, this repo will be archived soon.


Build Status

This repo contains files necessary to use subdirectories of Gluster volumes as persistent volumes in Kubernetes and OpenShift. It consists of several items:

glfs-subvol

Docker Repository on Quay

image: quay.io/gluster/gluster-subvol-plugin

This is a a flex volume plugin to allow mounting Gluster subdirectories into containers.

subvol-operator

Docker Repository on Quay

image: quay.io/gluster/gluster-subvol-operator

This is a Helm-based operator created with the operator-sdk. It is designed to deploy the flexvol plugin (glfs-subvol) via a DaemonSet and the recycler(s) for the associated supervols (volrecycler).

volcreator

This is a script that can be run on a Gluster server to pre-create the subdirectories and establish quotas.

volrecycler

Docker Repository on Quay

image: quay.io/gluster/gluster-subvol-volrecycler

This is a pod that is run in the cluster to watch for PVs that get released. It deletes any data contained in them and marks them as available for use again.


License

This code is licensed under Apache v2.0 with the exception of JQ which is covered by the MIT license (see COPYING_JQ).

gluster-subvol's People

Contributors

benoitf avatar johnstrunk avatar shyamsundarr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

gluster-subvol's Issues

Limit permissions of volrecycler

Currently, the volrecycler-sa has cluster-admin. Figure out what the real set of permissions are that it should have and adjust the sa appropriately.

Add resource requests

Each pod should have appropriate resource requests/limits for:

  • memory
  • cpu
  • ephemeral storage

Break up CRD

Currently there is a single CRD for both the recycler and the plugin. The recycler fields additionally allow specifying an arbitrary number of volumes to recycle.

The CRD should be split into two:

  • recycler: This should support recycling exactly 1 supervol
  • plugin: This should deploy the flex plugin

Investigate ReadWriteMany PVs

Having seen some documentation that Flex doesn't support RWX, the current PVs are created as ReadWriteOnce. Test whether ReadWriteMany can be used and potentially change volcreator to provision RWX volumes.

Limit operator & operands to Linux hosts

gluster-subvol will only work on Linux hosts. Apply proper nodeAffinity to ensure it is only scheduled there. This also requires properly merging in other nodeAffinity specs from the CR.

Increase robustness of recycler pod

Currently, the recycler pod is just a pod, so it will not get properly restarted upon node failure.

volrecycler.yml needs to be reworked so that the recycler is a Deployment, ensuring it will get respawned should the pod fail or be killed.

Add 'current' timestamps to the log file

We should add current timestamps to the log file in addition to the existing invocation timestamps so that we can tell if the script execution is slow for some reason.

I propose making the change to the log function to add the new timestamp as the first field on the line, moving the current one to 2nd. This is more in keeping w/ a standard logging style.

Switch base image to UBI

Currently, they are available at:

  • registry.access.redhat.com/ubi7-dev-preview/ubi-minimal
  • registry.access.redhat.com/ubi8-dev-preview/ubi-minimal

We should use ubi8

Create version tags for volrecycler image

Docker cloud is used to build the recycler pod image. The only tag currently supported is "latest" which is derived from master.
Augment the build rules to pick up version tags from this repo to build actual version labels so that any deployment using this image can control their version/upgrade cycle.

Prevent fsgroup relabeling in flex plugin

kubernetes/kubernetes#68680 added a new flag on the init call fsGroup that, when set to false, will skip the recursive change group of all the files in the PV on each mount.

We should return fsGroup:false from the init call to prevent the chown.

The main Gluster driver already skips it, so this change would make the behavior consistent with the main implementation of Gluster and greatly speed the mount operation for volumes with a high file count.

Pods stuck in "terminating" state if fuse dies

If the fuse process dies, pods get stuck and won't terminate. The error commonly seen is 'transport endpoint not connected'. The state that the system is left in results in kubelet being confused about the state of the mount.

Investigate (and implement) whether auto_unmount will provide better error recovery.

Set empty StorageClass for recycler PVs

The PVs created when deploying the recycler don't have a StorageClass set, so they get tagged with the cluster default. While there are no ill effects, it can be confusing when viewing PVs in the cluster.

Change the deployment scripts to set a blank class so the default does not get assigned.

Capture flex plugin logs

The flex DS should have a sidecar(s) that:

  • provides the flex logfile to stdout
  • provides the fuse log to stdout
  • properly rotates the log files to prevent space exhaustion

Add block-based subvol type

Gluster-fuse (upon which gluster-subvol is based) struggles with metadata-intensive and small-file workloads.

We would like to have a subvol type that in analogous to gluster-block. It needs to preserve the original objectives of gluster-subvol (i.e., large PV count, thin provisioning to allow overcommit, etc.)

Create PVs as dual RWO, RWX

Change creator.sh to create the PV manifests with both RWO and RWX access modes so that the gluster-subvol PVs can be used as either type.

Improve safety of recycler

Currently, the recycler has cluster IP and volume name passed in as arguments, and these must match the PV/PVC to which it gets attached. If an admin misconfigures this, there is a possibility of either data loss (wrong directory being wiped) or data leakage (failing to wipe the directory).

volcreator could be enhanced to annotate the root directory with the cluster IP and volume name such that we avoid having to pass it to the recycler. On startup, the recycler could read these parameters and use them when looking up the PVs.

This would reduce the amount of configuration as well as improve safety.

Clean up bash scripts

Fix the errors produced by shellcheck

  • glfs-subvol/glfs-subvol
  • volcreator/creator.sh
  • volrecycler/locker.sh
  • volrecycler/recycler.sh

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.