@@ -5,34 +5,82 @@ InfraKit
55[ ![ Go Report Card] ( https://goreportcard.com/badge/github.com/docker/infrakit )] ( https://goreportcard.com/report/github.com/docker/infrakit )
66[ ![ codecov.io] ( https://codecov.io/github/docker/infrakit/coverage.svg?branch=master&token=z08ZKeIJfA )] ( https://codecov.io/github/docker/infrakit?branch=master )
77
8- _ InfraKit_ is a toolkit for creating and managing declarative, self-healing infrastructure.
9- It breaks infrastructure automation down into simple , pluggable components.
8+ _ InfraKit_ is a toolkit for infrastructure orchestration .
9+ With an emphasis on immutable infrastructure, it breaks down infrastructure automation and management processes into small , pluggable components.
1010These components work together to actively ensure the infrastructure state matches the user's specifications.
11+ InfraKit therefore provides infrastructure support for higher-level container orchestration systems and can make your infrastructure self-managing and self-healing.
1112
1213To get started, try the [ tutorial] ( docs/tutorial.md ) , or check out the video below:
1314
1415### InfraKit + [ LinuxKit] ( https://github.com/linuxkit/linuxkit ) POC
1516
1617[ ![ infrakit+linuxkit] ( ./docs/images/infrakit_linuxkit_screencap.png )] ( https://www.youtube.com/watch?v=j50ovfRWpZM " InfraKit + LinuxKit ")
1718
18- In this video, InfraKit is used to build a custom linux operating system (based on [ linuxkit] ( https://github.com/linuxkit/linuxkit ) )
19- and deploy a cluster of virtual machine instances from a local Mac laptop to a bare-metal ARM server running on [ Packet.net] ( https://packet.net ) .
20- It demonstrates some of the key concepts and components in InfraKit and shows how InfraKit can be used to implement an integrated
21- workflow from custom OS image creation to cluster deployment and Day N management.
19+ In this video, InfraKit was used to build a custom linux operating system (based on [ linuxkit] ( https://github.com/linuxkit/linuxkit ) ).
20+ We then deployed a cluster of virtual machine instances on a local Mac laptop using the Mac Xhyve hypervisor (HyperKit). A cluster
21+ of 3 servers booted up in seconds. Later, after the custom OS image has been updated with a new public key, InfraKit detects the
22+ change and orchestrates a rolling update of the nodes.
23+ We then deploy the same OS image to a bare-metal ARM server running on [ Packet.net] ( https://packet.net ) , where the server uses
24+ custom ipxe boot directly from the localhost. It demonstrates some of the key concepts and components in InfraKit and shows how
25+ InfraKit can be used to implement an integrated workflow from custom OS image creation to cluster deployment and Day N management.
26+ The entire demo is published as a [ playbook] ( docs/playbooks/README.md ) , and you can create your own playbooks too.
2227
23- ### Who InfraKit is for
28+ ### Use Cases
29+
30+ _ InfraKit_ is designed to automate setup and management of infrastructure in support of distributed systems and higher-level
31+ container orchestration systems. Some of the use cases we are working on include:
32+
33+ + Bootstrap / installation of container orchestration systems like Docker Swarm and Kubernetes
34+ + Cluster autoscaler that can work across a variety of platforms from public clouds (like AWS autoscaling groups) to
35+ bare-metal hosts.
36+ + GPU cluster provisioning
37+ + Integration with LinuxKit for building and deploying immutable infrastructure from declarative specifications of the entire stack:
38+ from infrastructure resources to os / kernel and applications.
39+ + Day-N management and automation of infrastructure - from provisioning to rolling updates and capacity scaling.
40+
41+ InfraKit has a modular architecture with a set of interfaces which define the interactions of these 'plugin objects'.
42+ Plugins are active daemons that cooperate with one another to ensure the infrastructure state matches your specifications.
2443
25- _ InfraKit_ is designed to support setup and management of base infrastructure. For example, it can help you manage a
26- system like a cluster or container orchestrator, ideally relieving you of building custom release and maintenance tools.
27- As a result, it is a low-level tool intended to be used by infrastructure operators directly or indirectly
28- (as a toolkit) through a higher-level tool. Since _ InfraKit_ is pluggable, it allows you to manage resources in diverse
29- environments while using shared components and consistent interfaces.
3044
3145## Plugins
3246_ InfraKit_ makes extensive use of _ Plugins_ to manage arbitrary systems in diverse environments, which can be composed
33- to meet different needs.
47+ to meet different needs. See the [ plugins] ( docs/plugins ) documentation for more technical details.
48+
49+ Here is a list of plugins:
50+
51+ ### Core Implementations
52+
53+ | plugin | type | description |
54+ | :--------------------------------------------------------| :---------| :----------------------------------------|
55+ | [ infrakit/group] ( ./cmd/group ) | group | core group controller for rolling updates, scale group, etc. |
56+ | [ swarm] ( ./examples/flavor/swarm ) | flavor | runs Docker in Swarm mode |
57+ | [ kubernetes] ( ./examples/flavor/kubernetes ) | flavor | bootstraps a single master kubernetes cluster |
58+ | [ vanilla] ( ./examples/flavor/vanilla ) | flavor | manual specification of instance fields |
59+ | [ zookeeper] ( ./examples/flavor/zookeeper ) | flavor | run an Apache ZooKeeper ensemble |
60+ | [ infrakit/file] ( ./examples/instance/file ) | instance | useful for development and testing |
61+ | [ infrakit/docker] ( ./examples/instance/docker ) | instance | provisions container via Docker |
62+ | [ infrakit/terraform] ( ./examples/instance/terraform ) | instance | creates resources using Terraform |
63+ | [ infrakit/maas] ( ./examples/instance/maas ) | instance | bare-metal provisioning using Ubuntu MAAS |
64+ | [ infrakit/vagrant] ( ./examples/instance/vagrant ) | instance | creates Vagrant VMs |
65+ | [ infrakit/hyperkit] ( ./examples/instance/hyperkit ) | instance | creates Xhyve VMs on Mac OSX |
66+ | [ infrakit/packet] ( ./examples/instance/packet ) | instance | provisions bare metal hosts on Packet |
67+ | [ infrakit/libvirt] ( ./examples/instance/libvirt ) | instance | provisions KVM vms via libvirt |
68+ | [ docker/infrakit.aws] ( https://github.com/docker/infrakit.aws ) | instance | creates Amazon EC2 instances and other resource types |
69+ | [ docker/infrakit.gcp] ( https://github.com/docker/infrakit.gcp ) | instance | creates Google Cloud Platform compute instances |
70+ | [ docker/infrakit.digitalocean] ( https://github.com/docker/infrakit.digitalocean ) | instance | creates DigitalOcean droplets |
71+
72+ ### Community Implementations
73+
74+ | plugin | type | description |
75+ | :--------------------------------------------------------| :---------| :----------------------------------------|
76+ | [ HewlettPackard/infrakit-instance-oneview] ( https://github.com/HewlettPackard/infrakit-instance-oneview ) | instance | bare-metal server provisioning via HP-OneView |
77+ | [ codedellemc/infrakit.rackhd] ( https://github.com/codedellemc/infrakit.rackhd ) | instance | bare-metal server provisioning via RackHD |
78+ | [ IBM Bluemix / SoftLayer] ( ./examples/instance/terraform ) | instance | SoftLayer via terraform |
79+ | [ AliyunContainerService/infrakit.aliyun] ( https://github.com/AliyunContainerService/infrakit.aliyun ) | instance | Provisions instances on Alibaba Cloud |
80+ | [ 1and1/infrakit-instance-oneandone] ( https://github.com/1and1/infrakit-instance-oneandone ) | instance | Provisions instances on 1&1 Cloud Server |
81+
3482
35- See the [ plugins ] ( docs/plugins ) documentation for more details.
83+ Have a Plugin you'd like to share? Submit a Pull Request to add yourself to the list!
3684
3785
3886## Building
@@ -82,8 +130,16 @@ This will produce binaries for tools and several reference Plugin implementation
82130 an Instance plugin integrating [ Terraform] ( https://www.terraform.io )
83131 + [ ` infrakit-instance-vagrant ` ] ( examples/instance/vagrant ) :
84132 an Instance plugin using [ Vagrant] ( https://www.vagrantup.com/ )
133+ + [ ` infrakit-instance-docker ` ] ( examples/instance/docker ) :
134+ an Instance plugin for provisioning Docker containers via the Docker API
85135 + [ ` infrakit-instance-maas ` ] ( examples/instance/maas ) :
86- an Instance plugin using [ MaaS] ( https://maas.io )
136+ an Instance plugin using [ MaaS] ( https://maas.io ) to provision bare metal servers
137+ + [ ` infrakit-instance-hyperkit ` ] ( pkg/plugin/instance/hyperkit ) :
138+ an Instance plugin using [ HyperKit] ( https://github.com/docker/hyperkit ) to provision Xhyve-based guest vm's on Mac OSX
139+ + [ ` infrakit-instance-libvirt ` ] ( pkg/plugin/instance/libvirt ) :
140+ an Instance plugin using libvirt to provision KVM / QEMU vm instances
141+ + [ ` infrakit-instance-packet ` ] ( pkg/plugin/instance/packet ) :
142+ an Instance plugin for provisioning bare-metal servers from [ Packet.net] ( https://packet.net )
87143 + [ ` infrakit-flavor-vanilla ` ] ( examples/flavor/vanilla ) :
88144 a Flavor plugin for plain vanilla set up with user data and labels
89145 + [ ` infrakit-flavor-zookeeper ` ] ( examples/flavor/zookeeper ) :
0 commit comments