diff --git a/README.md b/README.md
deleted file mode 100644
index 3500b0237..000000000
--- a/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-![Kubespray Logo](http://s9.postimg.org/md5dyjl67/kubespray_logoandkubespray_small.png)
-
-##Deploy a production ready kubernetes cluster
-
-- Can be deployed on **AWS, GCE, OpenStack or Baremetal**
-- **High available** cluster
-- **Composable** (Choice of the network plugin for instance)
-- Support most popular **Linux distributions**
-- **Continuous integration tests**
-
-
-To deploy the cluster you can use :
-
-* [**kargo-cli**](https://github.com/kubespray/kargo-cli)
-* **vagrant** by simply running `vagrant up`
-* **Ansible** usual commands
-
-A complete **documentation** can be found [**here**](https://docs.kubespray.io)
-
-If you have questions, you can [invite yourself](https://slack.kubespray.io/) to **chat** with us on Slack! [![SlackStatus](https://slack.kubespray.io/badge.svg)](https://kubespray.slack.com)
-
-[![Build Status](https://travis-ci.org/kubespray/kargo.svg)](https://travis-ci.org/kubespray/kargo)
-CI tests sponsored by Google (GCE), and [teuto.net](https://teuto.net/) for OpenStack.
diff --git a/README.md b/README.md
new file mode 120000
index 000000000..e0ec929fb
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+docs/documentation.md
\ No newline at end of file
diff --git a/docs/ansible.md b/docs/ansible.md
new file mode 100644
index 000000000..0786a7764
--- /dev/null
+++ b/docs/ansible.md
@@ -0,0 +1,50 @@
+Ansible variables
+===============
+
+
+Inventory
+-------------
+The inventory is composed of 3 groups:
+
+* **kube-node** : list of kubernetes nodes where the pods will run.
+* **kube-master** : list of servers where kubernetes master components (apiserver, scheduler, controller) will run.
+ Note: if you want the server to act both as master and node the server must be defined on both groups _kube-master_ and _kube-node_
+* **etcd**: list of server to compose the etcd server. you should have at least 3 servers for failover purposes.
+
+Below is a complete inventory example:
+
+```
+## Configure 'ip' variable to bind kubernetes services on a
+## different ip than the default iface
+node1 ansible_ssh_host=95.54.0.12 # ip=10.3.0.1
+node2 ansible_ssh_host=95.54.0.13 # ip=10.3.0.2
+node3 ansible_ssh_host=95.54.0.14 # ip=10.3.0.3
+node4 ansible_ssh_host=95.54.0.15 # ip=10.3.0.4
+node5 ansible_ssh_host=95.54.0.16 # ip=10.3.0.5
+node6 ansible_ssh_host=95.54.0.17 # ip=10.3.0.6
+
+[kube-master]
+node1
+node2
+
+[etcd]
+node1
+node2
+node3
+
+[kube-node]
+node2
+node3
+node4
+node5
+node6
+
+[k8s-cluster:children]
+kube-node
+kube-master
+etcd
+```
+
+Group vars
+--------------
+The main variables to change are located in the directory ```inventory/group_vars/all.yml```.
diff --git a/docs/calico.md b/docs/calico.md
new file mode 100644
index 000000000..50744f63f
--- /dev/null
+++ b/docs/calico.md
@@ -0,0 +1,39 @@
+Calico
+===========
+
+Check if the calico-node container is running
+
+```
+docker ps | grep calico
+```
+
+The **calicoctl** command allows to check the status of the network workloads.
+* Check the status of Calico nodes
+
+```
+calicoctl status
+```
+
+* Show the configured network subnet for containers
+
+```
+calicoctl pool show
+```
+
+* Show the workloads (ip addresses of containers and their located)
+
+```
+calicoctl endpoint show --detail
+```
+
+##### Optionnal : BGP Peering with border routers
+
+In some cases you may want to route the pods subnet and so NAT is not needed on the nodes.
+For instance if you have a cluster spread on different locations and you want your pods to talk each other no matter where they are located.
+The following variables need to be set:
+`peer_with_router` to enable the peering with the datacenter's border router (default value: false).
+you'll need to edit the inventory and add a and a hostvar `local_as` by node.
+
+```
+node1 ansible_ssh_host=95.54.0.12 local_as=xxxxxx
+```
diff --git a/docs/cloud.md b/docs/cloud.md
new file mode 100644
index 000000000..f0db21c70
--- /dev/null
+++ b/docs/cloud.md
@@ -0,0 +1,22 @@
+Cloud providers
+==============
+
+#### Provisioning
+
+You can use kargo-cli to start new instances on cloud providers
+here's an example
+```
+kargo [aws|gce] --nodes 2 --etcd 3 --cluster-name test-smana
+```
+
+#### Deploy kubernetes
+
+With kargo-cli
+```
+kargo deploy [--aws|--gce] -u admin
+```
+
+Or ansible-playbook command
+```
+ansible-playbook -u smana -e ansible_ssh_user=admin -e cloud_provider=[aws|gce] -b --become-user=root -i inventory/single.cfg cluster.yml
+```
diff --git a/docs/coreos.md b/docs/coreos.md
new file mode 100644
index 000000000..e38369aef
--- /dev/null
+++ b/docs/coreos.md
@@ -0,0 +1,24 @@
+CoreOS bootstrap
+===============
+
+Example with **kargo-cli**:
+
+```
+kargo deploy --gce --coreos
+```
+
+Or with Ansible:
+
+Before running the cluster playbook you must satisfy the following requirements:
+
+* On each CoreOS nodes a writable directory **/opt/bin** (~400M disk space)
+
+* Uncomment the variable **ansible\_python\_interpreter** in the file `inventory/group_vars/all.yml`
+
+* run the Python bootstrap playbook
+
+```
+ansible-playbook -u smana -e ansible_ssh_user=smana -b --become-user=root -i inventory/inventory.cfg coreos-bootstrap.yml
+```
+
+Then you can proceed to [cluster deployment](#run-deployment)
diff --git a/docs/documentation.md b/docs/documentation.md
new file mode 100644
index 000000000..a540a562b
--- /dev/null
+++ b/docs/documentation.md
@@ -0,0 +1,75 @@
+![Kubespray Logo](http://s9.postimg.org/md5dyjl67/kubespray_logoandkubespray_small.png)
+
+##Deploy a production ready kubernetes cluster
+
+If you have questions, you can [invite yourself](https://slack.kubespray.io/) to **chat** with us on Slack! [![SlackStatus](https://slack.kubespray.io/badge.svg)](https://kubespray.slack.com)
+
+- Can be deployed on **AWS, GCE, OpenStack or Baremetal**
+- **High available** cluster
+- **Composable** (Choice of the network plugin for instance)
+- Support most popular **Linux distributions**
+- **Continuous integration tests**
+
+
+To deploy the cluster you can use :
+
+[**kargo-cli**](https://github.com/kubespray/kargo-cli)
+**Ansible** usual commands
+**vagrant** by simply running `vagrant up` (for tests purposes)
+
+
+* [Requirements](#requirements)
+* [Getting started](docs/getting-started.md)
+* [Vagrant install](docs/vagrant.md)
+* [CoreOS bootstrap](docs/coreos.md)
+* [Ansible variables](docs/ansible.md)
+* [Cloud providers](docs/cloud.md)
+* [Openstack](docs/openstack.md)
+* [Network plugins](#network-plugins)
+
+Supported Linux distributions
+===============
+
+* **CoreOS**
+* **Debian** Wheezy, Jessie
+* **Ubuntu** 14.10, 15.04, 15.10, 16.04
+* **Fedora** 23
+* **CentOS/RHEL** 7
+
+Versions
+--------------
+
+[kubernetes](https://github.com/kubernetes/kubernetes/releases) v1.3.0
+[etcd](https://github.com/coreos/etcd/releases) v3.0.1
+[calicoctl](https://github.com/projectcalico/calico-docker/releases) v0.20.0
+[flanneld](https://github.com/coreos/flannel/releases) v0.5.5
+[weave](http://weave.works/) v1.5.0
+[docker](https://www.docker.com/) v1.10.3
+
+
+Requirements
+--------------
+
+* The target servers must have **access to the Internet** in order to pull docker images.
+* The **firewalls are not managed**, you'll need to implement your own rules the way you used to.
+in order to avoid any issue during deployment you should disable your firewall
+* **Copy your ssh keys** to all the servers part of your inventory.
+* **Ansible v2.x and python-netaddr**
+
+
+## Network plugins
+You can choose between 3 network plugins. (default: `flannel` with vxlan backend)
+
+* [**flannel**](docs/flannel.md): gre/vxlan (layer 2) networking.
+
+* [**calico**](docs/calico.md): bgp (layer 3) networking.
+
+* **weave**: Weave is a lightweight container overlay network that doesn't require an external K/V database cluster.
+(Please refer to `weave` [troubleshooting documentation](http://docs.weave.works/weave/latest_release/troubleshooting.html))
+
+The choice is defined with the variable `kube_network_plugin`
+
+
+[![Build Status](https://travis-ci.org/kubespray/kargo.svg)](https://travis-ci.org/kubespray/kargo)
+CI tests sponsored by Google (GCE), and [teuto.net](https://teuto.net/) for OpenStack.
+
diff --git a/docs/flannel.md b/docs/flannel.md
new file mode 100644
index 000000000..307eab56c
--- /dev/null
+++ b/docs/flannel.md
@@ -0,0 +1,51 @@
+Flannel
+==============
+
+* Flannel configuration file should have been created there
+
+```
+cat /run/flannel/subnet.env
+FLANNEL_NETWORK=10.233.0.0/18
+FLANNEL_SUBNET=10.233.16.1/24
+FLANNEL_MTU=1450
+FLANNEL_IPMASQ=false
+```
+
+* Check if the network interface has been created
+
+```
+ip a show dev flannel.1
+4: flannel.1: mtu 1450 qdisc noqueue state UNKNOWN group default
+ link/ether e2:f3:a7:0f:bf:cb brd ff:ff:ff:ff:ff:ff
+ inet 10.233.16.0/18 scope global flannel.1
+ valid_lft forever preferred_lft forever
+ inet6 fe80::e0f3:a7ff:fe0f:bfcb/64 scope link
+ valid_lft forever preferred_lft forever
+```
+
+* Docker must be configured with a bridge ip in the flannel subnet.
+
+```
+ps aux | grep docker
+root 20196 1.7 2.7 1260616 56840 ? Ssl 10:18 0:07 /usr/bin/docker daemon --bip=10.233.16.1/24 --mtu=1450
+```
+
+* Try to run a container and check its ip address
+
+```
+kubectl run test --image=busybox --command -- tail -f /dev/null
+replicationcontroller "test" created
+
+kubectl describe po test-34ozs | grep ^IP
+IP: 10.233.16.2
+```
+
+```
+kubectl exec test-34ozs -- ip a show dev eth0
+8: eth0@if9: mtu 1450 qdisc noqueue
+ link/ether 02:42:0a:e9:2b:03 brd ff:ff:ff:ff:ff:ff
+ inet 10.233.16.2/24 scope global eth0
+ valid_lft forever preferred_lft forever
+ inet6 fe80::42:aff:fee9:2b03/64 scope link tentative flags 08
+ valid_lft forever preferred_lft forever
+```
diff --git a/docs/getting-started.md b/docs/getting-started.md
new file mode 100644
index 000000000..153c91a12
--- /dev/null
+++ b/docs/getting-started.md
@@ -0,0 +1,19 @@
+Getting started
+===============
+
+The easiest way to run the deployement is to use the **kargo-cli** tool.
+A complete documentation can be found in its [github repository](https://github.com/kubespray/kargo-cli).
+
+Here is a simple example on AWS:
+
+* Create instances and generate the inventory
+
+```
+kargo aws --instances 3
+```
+
+* Run the deployment
+
+```
+kargo deploy --aws -u centos -n calico
+```
diff --git a/docs/openstack.md b/docs/openstack.md
new file mode 100644
index 000000000..1a82133c0
--- /dev/null
+++ b/docs/openstack.md
@@ -0,0 +1,48 @@
+OpenStack
+===============
+
+To deploy kubespray on [OpenStack](https://www.openstack.org/) uncomment the `cloud_provider` option in `group_vars/all.yml` and set it to `'openstack'`.
+
+After that make sure to source in your OpenStack credentials like you would do when using `nova-client` by using `source path/to/your/openstack-rc`.
+
+The next step is to make sure the hostnames in your `inventory` file are identical to your instance names in OpenStack.
+Otherwise [cinder](https://wiki.openstack.org/wiki/Cinder) won't work as expected.
+
+Unless you are using calico you can now run the playbook.
+
+**Additional step needed when using calico:**
+
+Calico does not encapsulate all packages with the hosts ip addresses. Instead the packages will be routed with the PODs ip addresses directly.
+OpenStack will filter and drop all packages from ips it does not know to prevent spoofing.
+
+In order to make calico work on OpenStack you will need to tell OpenStack to allow calicos packages by allowing the network it uses.
+
+First you will need the ids of your OpenStack instances that will run kubernetes:
+
+ nova list --tenant Your-Tenant
+ +--------------------------------------+--------+----------------------------------+--------+-------------+
+ | ID | Name | Tenant ID | Status | Power State |
+ +--------------------------------------+--------+----------------------------------+--------+-------------+
+ | e1f48aad-df96-4bce-bf61-62ae12bf3f95 | k8s-1 | fba478440cb2444a9e5cf03717eb5d6f | ACTIVE | Running |
+ | 725cd548-6ea3-426b-baaa-e7306d3c8052 | k8s-2 | fba478440cb2444a9e5cf03717eb5d6f | ACTIVE | Running |
+
+Then you can use the instance ids to find the connected [neutron](https://wiki.openstack.org/wiki/Neutron) ports:
+
+ neutron port-list -c id -c device_id
+ +--------------------------------------+--------------------------------------+
+ | id | device_id |
+ +--------------------------------------+--------------------------------------+
+ | 5662a4e0-e646-47f0-bf88-d80fbd2d99ef | e1f48aad-df96-4bce-bf61-62ae12bf3f95 |
+ | e5ae2045-a1e1-4e99-9aac-4353889449a7 | 725cd548-6ea3-426b-baaa-e7306d3c8052 |
+
+Given the port ids on the left, you can set the `allowed_address_pairs` in neutron:
+
+ # allow kube_service_addresses network
+ neutron port-update 5662a4e0-e646-47f0-bf88-d80fbd2d99ef --allowed_address_pairs list=true type=dict ip_address=10.233.0.0/18
+ neutron port-update e5ae2045-a1e1-4e99-9aac-4353889449a7 --allowed_address_pairs list=true type=dict ip_address=10.233.0.0/18
+
+ # allow kube_pods_subnet network
+ neutron port-update 5662a4e0-e646-47f0-bf88-d80fbd2d99ef --allowed_address_pairs list=true type=dict ip_address=10.233.64.0/18
+ neutron port-update e5ae2045-a1e1-4e99-9aac-4353889449a7 --allowed_address_pairs list=true type=dict ip_address=10.233.64.0/18
+
+Now you can finally run the playbook.
diff --git a/docs/vagrant.md b/docs/vagrant.md
new file mode 100644
index 000000000..02132c140
--- /dev/null
+++ b/docs/vagrant.md
@@ -0,0 +1,41 @@
+Vagrant Install
+=================
+
+Assuming you have Vagrant (1.8+) installed with virtualbox (it may work
+with vmware, but is untested) you should be able to launch a 3 node
+Kubernetes cluster by simply running `$ vagrant up`.
+
+This will spin up 3 VMs and install kubernetes on them. Once they are
+completed you can connect to any of them by running
+`$ vagrant ssh k8s-0[1..3]`.
+
+```
+$ vagrant up
+Bringing machine 'k8s-01' up with 'virtualbox' provider...
+Bringing machine 'k8s-02' up with 'virtualbox' provider...
+Bringing machine 'k8s-03' up with 'virtualbox' provider...
+==> k8s-01: Box 'bento/ubuntu-14.04' could not be found. Attempting to find and install...
+...
+...
+ k8s-03: Running ansible-playbook...
+
+PLAY [k8s-cluster] *************************************************************
+
+TASK [setup] *******************************************************************
+ok: [k8s-03]
+ok: [k8s-01]
+ok: [k8s-02]
+...
+...
+PLAY RECAP *********************************************************************
+k8s-01 : ok=157 changed=66 unreachable=0 failed=0
+k8s-02 : ok=137 changed=59 unreachable=0 failed=0
+k8s-03 : ok=86 changed=51 unreachable=0 failed=0
+
+$ vagrant ssh k8s-01
+vagrant@k8s-01:~$ kubectl get nodes
+NAME STATUS AGE
+k8s-01 Ready 45s
+k8s-02 Ready 45s
+k8s-03 Ready 45s
+```