Giter VIP home page Giter VIP logo

flintlock's Introduction

Flintlock - Create and manage the lifecycle of MicroVMs, backed by containerd.

GitHub codecov Go Report Card

What is flintlock?

๐ŸŽ‰ This project was originally developed by Weaveworks but is now owned & run by the community. If you are interested in helping out please reach out.

Flintlock is a service for creating and managing the lifecycle of microVMs on a host machine. We support Firecracker and Cloud Hypervisor (experimental).

The original use case for flintlock was to create microVMs on a bare-metal host where the microVMs will be used as nodes in a virtualized Kubernetes cluster. It is an essential part of Liquid Metal and can be orchestrated by Cluster API Provider Microvm.

However, its useful for many other use cases where lightweight virtualization is required (e.g. isolated workloads, pipelines).

Features

Using API requests (via gRPC or HTTP):

  • Create and delete microVMs
  • Manage the lifecycle of microVMs (i.e. start, stop, pause)
  • Configure microVM metadata via cloud-init, ignition etc
  • Use OCI images for microVM volumes, kernel and initrd
  • Expose microVM metrics for collection by Prometheus
  • (coming soon) Use CNI to configure the network for the microVMs

Documentation

See our getting started with flintlock tutorial.

Contributing

Contributions are welcome. Please read the CONTRIBUTING.md and our Code Of Conduct.

You can reach out to the maintainers and other contributors using the #liquid-metal slack channel.

Other interesting resources include:

Getting Help

If you have any questions about, feedback for or problems with flintlock:

Your feedback is always welcome!

Compatibility

The table below shows you which versions of Firecracker are compatible with Flintlock:

Flintlock Firecracker Cloud Hypervisor
v0.5.0 Official v1.0+ or v1.0.0-macvtap v26.0
v0.4.0 Official v1.0+ or v1.0.0-macvtap Not Supported
v0.3.0 Official v1.0+ or v1.0.0-macvtap Not Supported
<= v0.2.0 <= v0.25.2-macvtap Not Supported
<= v0.1.0-alpha.6 <= v0.25.2-macvtap Not Supported
v0.1.0-alpha.7 Do not use Not Supported
v0.1.0-alpha.8 <= v0.25.2-macvtap Not Supported

Note: Flintlock currently requires a custom build of Firecracker if you plan to use macvtap available here.

License

MPL-2.0 License

Acknowledgements

The biggest acknowledgement goes to @Weaveworks who where pioneers in the early Kubernetes world and produced some fantastic open source that lives on despite the demise of the company. A big thank you to the company and everyone that worked there. It was the engineers at Weaveworks that originally created Liquid Metal. RIP Weaveworks.

flintlock's People

Contributors

aryan9600 avatar callisto13 avatar cpanato avatar dependabot[bot] avatar github-actions[bot] avatar ianbuss avatar jmickey avatar nikimanoledaki avatar richardcase avatar skarlso avatar souleb avatar steve-fraser avatar stoovon avatar weaveworks-admin-bot avatar yitsushi 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar

flintlock's Issues

Create README.md

Describe the solution you'd like:
We currently have a blank readme. We need to change this and provide information about the project and also how to contribute. We need to include badges like the codecov badge

Why do you want this feature:
The project needs to provider information to its users and be a good open source citizen

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Create skeleton of Firecracker provider

Describe the solution you'd like:
Create the skeleton of the Firecracker microvm provider. The functions will be unimplemented and will be implemented over time.

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Microvm repo check if spec is the same

Describe the solution you'd like:
When saving the microvm spec in the repo we need to check if there is actually an update to the spec or not. If nothing has changed, then we don't need to take any action.

Why do you want this feature:

If we currently try saving where there is no update then an error is returned.

Anything else you would like to add:

Easiest way is to SHA256 hash the content and compare it to the digest of the content in the containerd content store.

Microvm create plan

Describe the solution you'd like:
A "plan" is needed with associated steps to create a microvm from the spec.

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

CNI integration

Integrate CNI into flintlock so that the network interfaces on the host are created/configured via CNI. We need to expose this via the API and also provide a default config.

Change to urfave/cli

Describe the solution you'd like:
Change the CLI infra to use urfave/cli instead of cobra/viper.

Why do you want this feature:
This is to make the future deployment option of being combined with containerd easier.

Anything else you would like to add:

Add microvm spec validation

Describe the solution you'd like:
Validate the changes to the microvm spec.

Why do you want this feature:

To protect the system from invalid specs. And provide good feedback to the user.,

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Package Manager Publishing

deb/rpm/ pick your linux package manager.

Do we need to make sure dependencies are specified or is that manual via docs?

Change to use mage over make

Describe the solution you'd like:
Change the project to use mage instead of make. As a Go project mage will be easier to use instead of make.

Why do you want this feature:
Ease of use for Go engineers.

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Investigate gogo protobuf

Describe the solution you'd like:
Investigate if there are any benefits to using gogo protobuf over the standard protobuf tooling for go.

https://github.com/gogo/protobuf

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Implement query gRPC methods

Describe the solution you'd like:
I want to be able to get details of an existing microvm and list all microvms via the API.

Why do you want this feature:

As a consumer i need to know which microvms are running on which nodes.

Anything else you would like to add:

There are empty functions currently for the query methods.

Change event service implementation to use containerd event service

Describe the solution you'd like:
The event bus implementation should be the containerd event service.

Why do you want this feature:
Instead of using a separate event bus we should use the containerd event service as it will make it easier responding to existing containerd events and we already are using contaierd for a bunch of other things.

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Remove k8s api and refactor repo

Describe the solution you'd like:

Now there is the protobuf definitions and service we can use the protobuf generate types for the repository. This will remove the need to do conversions between the 2 api types.

Why do you want this feature:
Simplifies the implementation and removes the need to keep 2 different apis in sync

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Code Coverage Tracking

Describe the solution you'd like:
I want to be able to track the change in test code coverage. We should also block PRs that cause the code coverage to drop below a certain threshold.

Why do you want this feature:
To ensure we have adequate test coverage.

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Split gRPC Gateway out into separate executable or command.

Describe the solution you'd like:
Consider splitting out the gRPC gateway into a separate executable or command so it can be deployed separately.

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Investigate using controller-runtime for reignite

Describe the solution you'd like:

There is some prior art around using controller-runtime outside of Kubernetes. Investigate whether this will help with the implementation of the reconciliation part of reignite

Why do you want this feature:

If its possible to reuse existign code then it may save us having to develop a control loop from scratch.

Anything else you would like to add:

See this as an example:
https://github.com/ibuildthecloud/gitbacked-controller

Implement a `vmid` type

Describe the solution you'd like:
A microvm has an identity that is made up of a name and namespace. This should be implemeted as a specific type instead of passing strimgs around

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Delete from API should mark for deletion not delete

Describe the solution you'd like:
When requesting that a microvm is deleted via the API the spec for the VM should be marked as deleted but the content should remain.

The reconciliation loop should do the ultimate delete after the microvm has been removed.

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

Refactor microvm provider interface

Describe the solution you'd like:
Refactor the microvm provider interface to make it simpler. Removed the provider registry.

Why do you want this feature:
There are only going to be 1 or 2 providers so we can use a simpler provider interface and no need for a registry

Anything else you would like to add:

Implement initial vmspec deletion plan (measure, plan, act

Describe the solution you'd like:
A "plan" is needed with associated steps to delete a microvm from the spec.

Why do you want this feature:

Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]

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.