Code Monkey home page Code Monkey logo

discoblocks's People

Contributors

cannischan avatar dependabot[bot] avatar hubvu avatar mhmxs avatar romdalf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

discoblocks's Issues

validate service connection: CRI v1 runtime API is not implemented for endpoint

Kuttl test fails on github action:

2023-01-09T12:57:28.766132542Z stderr F ++ crictl --runtime-endpoint unix:///run/containerd/containerd.sock inspect --output go-template --template '{{.info.pid}}' c6498557205f69edad77ac4c8bdd929eef3032d9a6b32ecbfd7a5ebc37ba0972
2023-01-09T12:57:28.791778323Z stderr F time="2023-01-09T12:57:28Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
2023-01-09T12:57:28.79406194Z stderr F + PID=

But works well on my local box, so maybe there is some version mismatch.

Replace Busybox in mount job

Busybox has lots of tools and it increases the attack surface. Need to replace it with specific commands maybe in a custom image.

Tail of StorageClass and finalizer

Discoblocks creates storageclass on topology bases. The created StorageClass has finalizer just like any other. But during DiskConfig deletion we remove finalizers of SCs. When customer recreates the config with same name and storageclass, Discoblocks re-uses the existing SC, but don't append finalizer! Not a big drama, just we loose the protection of those SCs.

Solve rotation of metrics cert

Currently Discoblocks uses one single cert, it creates secret per namespace once and doesn't take care on cert rotation or change.

Automated release pipeline

It would be nice to create a pipeline to automatically publish images, manifests or other release related artifacts.

Low coolDown should kills provisioning

The system uses coolDown time for many wait operation, so if the value is too low it kills the context of provisioning. Because the relation of timeout and cooldown makes sense and low cooldown doesn't makes sense at all, i suggest to validate and decline low values

Produce metrics of discoblocks operations

Currently, only the log tells if something fails. It would be nice to produce metrics about the different operations, including failed and successful tasks. Kubernetes events also would be nice.

Ondat driver isn't production ready

Ondat driver finds new disk by listing /var/lib/storageos by time. It picks the latest, but this should lead to concurrency issues in production. Also would be nice to make /var/lib/storageos configurable.

Support autoscaling with pod.Spec.HostPID

Autoscaling and Pod.Spec.HostPID is not supported together in Discoblocks. We have to figure out how to find, format, mount, and resize a filesystem when hostPid is true.

Make socket paths configurable

Currently containerd and docker sockets are hard-coded into mount and resize job. Would be nice to turn them configurable.

Ensure resize job works well

Currently, the first PVC of a PVC group (/mountpoint-1, /mountpoint-2, /mountpoint-N) is resized by the CSI driver, and others via resize job.

It would be nice to double-check what happens when an additional volume needs to be resized after a restart. I guess CSI driver also
resizes the volume. What would happen with our resize job? Does it fail? Does it necessary at all? Should we detect this case to avoid unnecessary job execution?

Mutation webhook vs. side effects

Currently, the pod mutation webhook has side effects, but we tell Kubernetes it hasn't. Would be nice to set side effect of mutationWebhookConfiguration to Some

ReadWriteDeamon vs. PVC finalizers

ReadWriteDeamon mode gives back the same volume if exists per node. If some deletes the diskconfig and then restarts daemonset pods, Disco block gives the volume back, but that volume doesn't have finalizer (because of the delete), so auto scaling would be skipped.

Make metrics service optional

Currently, service for metrics has been created for each pod and volume monitor uses service endpoints to fetch metrics of disks. Would be nice to make service optional (for customer usage) and change monitor to use pod ip instead.

Create new disk on case of maximum size

Once disk capacity is maximum per PVC would be nice to create a new disk.

Initial creation and scaling are solved on the Kube native way, but a new disk for a running pod isn't trivial.

We need to:

  • create volume manually via CSI driver
  • format/mount drive
  • create PV and PVC in Kubernetes
  • ensure disks are exists after pod restart

As i see this project does something similar with persistent volumes: https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner

Full support of daemonsets

Currently, there are two availability options, readwriteonce, readwritesame. In the case of daemonset readwritesame isn't an option, because all pods are scheduled to the same node. On the other hand with readwriteonce, the daemonset pods get fresh new PVCs, so they lose connection with the volume after the restart. It would be nice to support daemonsets.

Socket mounts are hard coded

Currently, both containerd and docker sockets are hard-coded into the mount and resize jobs. It works nicely but creates unnecessary directories on the host if any of the sockets are missing. It would be nice to mount only the socket available on the host.

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.