diff --git a/Documentation/README.md b/Documentation/README.md
new file mode 100644
index 00000000..6115dadf
--- /dev/null
+++ b/Documentation/README.md
@@ -0,0 +1,16 @@
+# Documentation
+
+This documentation is intended to be a complete reflection of the current state of the exposed metrics of kube-state-metrics.
+
+Pull requests completeing the metrics documentation as well as sample usages are very welcome.
+
+Per group of metrics there is one file for all metrics. See each file for specific documentation about the exposed metrics:
+
+* [DaemonSet Metrics](daemonset-metrics.md)
+* [Deployment Metrics](deployment-metrics.md)
+* [LimitRange Metrics](limitrange-metrics.md)
+* [Node Metrics](node-metrics.md)
+* [Pod Metrics](pod-metrics.md)
+* [ReplicaSet Metrics](replicaset-metrics.md)
+* [ReplicationController Metrics](replicationcontroller-metrics.md)
+* [ResourceQuota Metrics](resourcequota-metrics.md)
diff --git a/Documentation/daemonset-metrics.md b/Documentation/daemonset-metrics.md
new file mode 100644
index 00000000..da916eea
--- /dev/null
+++ b/Documentation/daemonset-metrics.md
@@ -0,0 +1,9 @@
+# DaemonSet Metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_daemonset_status_current_number_scheduled | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
+| kube_daemonset_status_number_misscheduled | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
+| kube_daemonset_status_desired_number_scheduled | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
+| kube_daemonset_status_number_ready | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
+| kube_daemonset_metadata_generation | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
diff --git a/Documentation/deployment-metrics.md b/Documentation/deployment-metrics.md
new file mode 100644
index 00000000..4a1a560f
--- /dev/null
+++ b/Documentation/deployment-metrics.md
@@ -0,0 +1,13 @@
+# Deployment Metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_deployment_status_replicas | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_status_replicas_available | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_status_replicas_unavailable | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_status_replicas_updated | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_status_observed_generation | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_spec_replicas | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_spec_paused | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_spec_strategy_rollingupdate_max_unavailable | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
+| kube_deployment_metadata_generation | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
diff --git a/Documentation/limitrange-metrics.md b/Documentation/limitrange-metrics.md
new file mode 100644
index 00000000..395f6162
--- /dev/null
+++ b/Documentation/limitrange-metrics.md
@@ -0,0 +1,5 @@
+# LimitRange Metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_limitrange | Gauge | `limitrange`=<limitrange-name>
`namespace`=<namespace>
`resource`=<ResourceName>
`type`=<Pod\|Container\|PersistentVolumeClaim>
`constraint`=<constraint>|
diff --git a/Documentation/node-metrics.md b/Documentation/node-metrics.md
new file mode 100644
index 00000000..1c69ab6d
--- /dev/null
+++ b/Documentation/node-metrics.md
@@ -0,0 +1,18 @@
+# Node Metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_node_info | Gauge | `node`=<node-address>
`kernel_version`=<kernel-version>
`os_image`=<os-image-name>
`container_runtime_version`=<container-runtime-and-version-combination>
`kubelet_version`=<kubelet-version>
`kubeproxy_version`=<kubeproxy-version> |
+| kube_node_spec_unschedulable | Gauge | `node`=<node-address>|
+| kube_node_status_ready| Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
+| kube_node_status_out_of_disk | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
+| kube_node_status_phase| Gauge | `node`=<node-address>
`phase`=<Pending\|Running\|Terminated> |
+| kube_node_status_capacity_cpu_cores | Gauge | `node`=<node-address>|
+| kube_node_status_capacity_memory_bytes | Gauge | `node`=<node-address>|
+| kube_node_status_capacity_pods | Gauge | `node`=<node-address>|
+| kube_node_status_allocatable_cpu_cores | Gauge | `node`=<node-address>|
+| kube_node_status_allocatable_memory_bytes | Gauge | `node`=<node-address>|
+| kube_node_status_allocatable_pods | Gauge | `node`=<node-address>|
+| kube_node_status_memory_pressure | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
+| kube_node_status_disk_pressure | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
+| kube_node_status_network_unavailable | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
diff --git a/Documentation/pod-metrics.md b/Documentation/pod-metrics.md
new file mode 100644
index 00000000..3142c761
--- /dev/null
+++ b/Documentation/pod-metrics.md
@@ -0,0 +1,18 @@
+# Pod Metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_pod_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`host_ip`=<host-ip>
`pod_ip`=<pod-ip>
`start_time`=<date-time since kubelet acknowledged pod>
`node`=<node-name>
`created_by`=<created_by> |
+| kube_pod_status_phase | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`phase`=<Pending\|Running\|Succeeded\|Failed\|Unknown> |
+| kube_pod_status_ready | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown> |
+| kube_pod_status_scheduled | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown> |
+| kube_pod_container_info | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`image`=<image-name>
`image_id`=<image-id>
`container_id`=<containerid> |
+| kube_pod_container_status_waiting | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
+| kube_pod_container_status_running | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
+| kube_pod_container_status_terminated | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
+| kube_pod_container_status_ready | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
+| kube_pod_container_status_restarts | Counter | `container`=<container-name>
`namespace`=<pod-namespace>
`pod`=<pod-name> |
+| kube_pod_container_resource_requests_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
+| kube_pod_container_resource_requests_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
+| kube_pod_container_resource_limits_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
+| kube_pod_container_resource_limits_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
diff --git a/Documentation/replicaset-metrics.md b/Documentation/replicaset-metrics.md
new file mode 100644
index 00000000..08b222e4
--- /dev/null
+++ b/Documentation/replicaset-metrics.md
@@ -0,0 +1,10 @@
+# ReplicaSet metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_replicaset_status_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
+| kube_replicaset_status_fully_labeled_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
+| kube_replicaset_status_ready_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
+| kube_replicaset_status_observed_generation | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
+| kube_replicaset_spec_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
+| kube_replicaset_metadata_generation | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
diff --git a/Documentation/replicationcontroller-metrics.md b/Documentation/replicationcontroller-metrics.md
new file mode 100644
index 00000000..f64df779
--- /dev/null
+++ b/Documentation/replicationcontroller-metrics.md
@@ -0,0 +1,11 @@
+# ReplicationController metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_replicationcontroller_status_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+| kube_replicationcontroller_status_fully_labeled_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+| kube_replicationcontroller_status_ready_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+| kube_replicationcontroller_status_available_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+| kube_replicationcontroller_status_observed_generation | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+| kube_replicationcontroller_spec_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+| kube_replicationcontroller_metadata_generation | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
diff --git a/Documentation/resourcequota-metrics.md b/Documentation/resourcequota-metrics.md
new file mode 100644
index 00000000..03737c2e
--- /dev/null
+++ b/Documentation/resourcequota-metrics.md
@@ -0,0 +1,5 @@
+# ResourceQuota Metrics
+
+| Metric name| Metric type | Labels/tags |
+| ---------- | ----------- | ----------- |
+| kube_resourcequota | Gauge | `resourcequota`=<quota-name>
`namespace`=<namespace>
`resource`=<ResourceName>
`type`=<quota-type> |
diff --git a/README.md b/README.md
index 054510cb..52deec50 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ the raw metrics.
The latest container image can be found at `gcr.io/google_containers/kube-state-metrics:v0.5.0`.
-## Metrics
+## Metrics Documentation
There are many more metrics we could report, but this first pass is focused on
those that could be used for actionable alerts. Please contribute PR's for
@@ -28,102 +28,7 @@ additional metrics!
> WARNING: THESE METRIC/TAG NAMES ARE UNSTABLE AND MAY CHANGE IN A FUTURE RELEASE.
-### Node Metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_node_info | Gauge | `node`=<node-address>
`kernel_version`=<kernel-version>
`os_image`=<os-image-name>
`container_runtime_version`=<container-runtime-and-version-combination>
`kubelet_version`=<kubelet-version>
`kubeproxy_version`=<kubeproxy-version> |
-| kube_node_spec_unschedulable | Gauge | `node`=<node-address>|
-| kube_node_status_ready| Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
-| kube_node_status_out_of_disk | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
-| kube_node_status_phase| Gauge | `node`=<node-address>
`phase`=<Pending\|Running\|Terminated> |
-| kube_node_status_capacity_cpu_cores | Gauge | `node`=<node-address>|
-| kube_node_status_capacity_memory_bytes | Gauge | `node`=<node-address>|
-| kube_node_status_capacity_pods | Gauge | `node`=<node-address>|
-| kube_node_status_allocatable_cpu_cores | Gauge | `node`=<node-address>|
-| kube_node_status_allocatable_memory_bytes | Gauge | `node`=<node-address>|
-| kube_node_status_allocatable_pods | Gauge | `node`=<node-address>|
-| kube_node_status_memory_pressure | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
-| kube_node_status_disk_pressure | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
-| kube_node_status_network_unavailable | Gauge | `node`=<node-address>
`condition`=<true\|false\|unknown> |
-
-### DaemonSet Metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_daemonset_status_current_number_scheduled | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
-| kube_daemonset_status_number_misscheduled | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
-| kube_daemonset_status_desired_number_scheduled | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
-| kube_daemonset_status_number_ready | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
-| kube_daemonset_metadata_generation | Gauge | `daemonset`=<daemonset-name>
`namespace`=<daemonset-namespace> |
-
-### Deployment Metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_deployment_status_replicas | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_status_replicas_available | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_status_replicas_unavailable | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_status_replicas_updated | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_status_observed_generation | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_spec_replicas | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_spec_paused | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_spec_strategy_rollingupdate_max_unavailable | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-| kube_deployment_metadata_generation | Gauge | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> |
-
-### Pod Metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_pod_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`host_ip`=<host-ip>
`pod_ip`=<pod-ip>
`start_time`=<date-time since kubelet acknowledged pod>
`node`=<node-name>
`created_by`=<created_by> |
-| kube_pod_status_phase | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`phase`=<Pending\|Running\|Succeeded\|Failed\|Unknown> |
-| kube_pod_status_ready | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown> |
-| kube_pod_status_scheduled | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown> |
-| kube_pod_container_info | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`image`=<image-name>
`image_id`=<image-id>
`container_id`=<containerid> |
-| kube_pod_container_status_waiting | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
-| kube_pod_container_status_running | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
-| kube_pod_container_status_terminated | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
-| kube_pod_container_status_ready | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> |
-| kube_pod_container_status_restarts | Counter | `container`=<container-name>
`namespace`=<pod-namespace>
`pod`=<pod-name> |
-| kube_pod_container_resource_requests_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
-| kube_pod_container_resource_requests_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
-| kube_pod_container_resource_limits_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
-| kube_pod_container_resource_limits_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> |
-
-### ResourceQuota Metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_resourcequota | Gauge | `resourcequota`=<quota-name>
`namespace`=<namespace>
`resource`=<ResourceName>
`type`=<quota-type> |
-
-### LimitRange Metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_limitrange | Gauge | `limitrange`=<limitrange-name>
`namespace`=<namespace>
`resource`=<ResourceName>
`type`=<Pod\|Container\|PersistentVolumeClaim>
`constraint`=<constraint>|
-
-### ReplicaSet metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_replicaset_status_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
-| kube_replicaset_status_fully_labeled_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
-| kube_replicaset_status_ready_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
-| kube_replicaset_status_observed_generation | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
-| kube_replicaset_spec_replicas | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
-| kube_replicaset_metadata_generation | Gauge | `replicaset`=<replicaset-name>
`namespace`=<replicaset-namespace> |
-
-### ReplicationController metrics
-
-| Metric name| Metric type | Labels/tags |
-| ---------- | ----------- | ----------- |
-| kube_replicationcontroller_status_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
-| kube_replicationcontroller_status_fully_labeled_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
-| kube_replicationcontroller_status_ready_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
-| kube_replicationcontroller_status_available_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
-| kube_replicationcontroller_status_observed_generation | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
-| kube_replicationcontroller_spec_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
-| kube_replicationcontroller_metadata_generation | Gauge | `replicationcontroller`=<replicationcontroller-name>
`namespace`=<replicationcontroller-namespace> |
+See the [`Documentation`](Documentation) directory for documentation of the exposed metrics.
## kube-state-metrics vs. Heapster