@@ -5,34 +5,82 @@ InfraKit
5
5
[ ![ Go Report Card] ( https://goreportcard.com/badge/github.com/docker/infrakit )] ( https://goreportcard.com/report/github.com/docker/infrakit )
6
6
[ ![ codecov.io] ( https://codecov.io/github/docker/infrakit/coverage.svg?branch=master&token=z08ZKeIJfA )] ( https://codecov.io/github/docker/infrakit?branch=master )
7
7
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.
10
10
These 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.
11
12
12
13
To get started, try the [ tutorial] ( docs/tutorial.md ) , or check out the video below:
13
14
14
15
### InfraKit + [ LinuxKit] ( https://github.com/linuxkit/linuxkit ) POC
15
16
16
17
[ ![ infrakit+linuxkit] ( ./docs/images/infrakit_linuxkit_screencap.png )] ( https://www.youtube.com/watch?v=j50ovfRWpZM " InfraKit + LinuxKit ")
17
18
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.
22
27
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.
24
43
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.
30
44
31
45
## Plugins
32
46
_ 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
+
34
82
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!
36
84
37
85
38
86
## Building
@@ -82,8 +130,16 @@ This will produce binaries for tools and several reference Plugin implementation
82
130
an Instance plugin integrating [ Terraform] ( https://www.terraform.io )
83
131
+ [ ` infrakit-instance-vagrant ` ] ( examples/instance/vagrant ) :
84
132
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
85
135
+ [ ` 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 )
87
143
+ [ ` infrakit-flavor-vanilla ` ] ( examples/flavor/vanilla ) :
88
144
a Flavor plugin for plain vanilla set up with user data and labels
89
145
+ [ ` infrakit-flavor-zookeeper ` ] ( examples/flavor/zookeeper ) :
0 commit comments