From 24ca1140f63a88027c8d71fdcb0e0ecc7d403b22 Mon Sep 17 00:00:00 2001 From: Michael James Hoppal Date: Tue, 2 May 2017 13:32:03 -0600 Subject: [PATCH 1/2] Add Kubernetes Page --- assets/images/kubernetes_agent.png | Bin 0 -> 32279 bytes docs/kubernetes.md | 117 +++++++++++++++++++++++++++++ index.html | 2 +- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 assets/images/kubernetes_agent.png create mode 100644 docs/kubernetes.md diff --git a/assets/images/kubernetes_agent.png b/assets/images/kubernetes_agent.png new file mode 100644 index 0000000000000000000000000000000000000000..1783762338fe355f023caf836154d4f246348cd9 GIT binary patch literal 32279 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 literal 0 HcmV?d00001 diff --git a/docs/kubernetes.md b/docs/kubernetes.md new file mode 100644 index 0000000..956e913 --- /dev/null +++ b/docs/kubernetes.md @@ -0,0 +1,117 @@ +# Kubernetes + +Monasca can be deployed into Kubernetes to monitor containers, services and Kubernetes itself. + +## Monitoring Kubernetes + +A deamonset/deployment of the [monasca-agent][4] will be brought up when deploying Monasca into Kubernetes. The +daemonset will monitor pod/node workloads and the deployment will monitor Kubernetes status/health. They both do +autodetection on Prometheus endpoints to scrape metrics from and send into the Monasca pipeline. + + + +### Daemonset Monasca Agent + +The Daemonset monasca-agent runs on every node in the cluster and collects metrics on pod/node workloads and autodetects +prometheus endpoints on pods. + +#### Pod Usage Monitoring + +Pod monitoring is accomplished by first querying Kubelet on each node to grab all running pods and their associated +metadata and then querying cAdvisor for container usage (memory, cpu, network, etc.). The agent then correlates the +container data from cAdvisor to the running pods to report usage metrics on each pod (container data is aggregated up +to the pod level). + +The agent can be configured to report container metrics on top of the pod metrics if desired. + +More information on the metrics we are collecting for pods can be seen in the plugin's [documentation][5] + +#### Node Usage Monitoring + +Node monitoring is accomplish by querying cAdvisor for the nodes usage metrics. The complete metric list can be found in +the plugin's [documentation][6] + +#### Prometheus Endpoint Monitoring on Pods + +The monasca agent on each node will autodetect Prometheus endpoints to scrape metrics from by querying the Kubelet for +each running pod and looking at their annotations. + +These annotations being: + +* prometheus.io/scrape: Only scrape pods that have a value of 'true' +* prometheus.io/path: If the metrics path is not '/metrics' override this. +* prometheus.io/port: Scrape the pod on the indicated port instead of the default of '9102'. + +If the pod contains the scrape annotation the agent will attempt to scrape metrics from it and send through Monasca. + +### Deployment Monasca Agent + +The Deployment monasca-agent collects metrics on the Kubernetes cluster and autodetects prometheus endpoints on +services. + +#### Kubernetes Cluster Monitoring + +The monasca agent queries the Kubernetes API for metrics such as component health, replica counts +(on deployments/replicaton controllers), host status flags. + +The full list of the metrics being collected can be seen in the plugin's [documentation][7] + +#### Prometheus Endpoint Monitoring on Services + +The monasca agent queries the Kubernetes API for services and then looks at the annotations correlated with each +service to determine to scrape or not. + +These annotations being: + +* prometheus.io/scrape: Only scrape services that have a value of 'true' +* prometheus.io/path: If the metrics path is not '/metrics' override this. +* prometheus.io/port: Scrape the service on the indicated port instead of the default of '9102'. + +If the service contains the scrape annotation the agent will attempt to scrape metrics from it to send through Monasca. + +## Installing Monasca via Helm + +We have a Helm chart for Monasca and all of its microservices. This can be found at [Monasca Helm][1]. The charts are +hosted via github pages on [monasca.io][2] + +To install monasca on a running Kubernetes cluster follow the following steps: +{% highlight bash %} +helm repo add monasca http://monasca.io/monasca-helm-repo +helm install monasca/monasca --name monasca --namespace monitoring +{% endhighlight %} + +More detailed configuration for installing Monasca can be found in the charts' [README][3] + +### Default Grafana graphs + +Grafana is deployed when bringing up Monasca and by default is configured with the Monasca datasource. Default +dashboards are also created for Deployments, Namespaces, Pod, Daemonset and Nodes (based on default aggregations) + +Grafana can be accessed by port-forwarding the grafana service to localhost. + +Setting up grafana port-forward: +```bash +$ kubectl get pods -n monitoring -l component=grafana +$ kubectl port-forward {{ grafana_pod_name_from_output_above }} -n monitoring 3000 +``` + +After the above is set up you can visit [grafana][8] with the default credentials mini-mon/password + +## Future Work +* Expand on Default graphs that are being created +* Include default Kubernetes alarms on deploy +* Iterate on the Prometheus autodetection to match what Prometheus Server does for autodetection +* Intergrate Monasca in Kubernetes Custom Metric API +* Intergrate Helm work into official charts +* Look into integrating Kubernetes RBAC into Monasca. + +[1]: https://github.com/monasca/monasca-helm +[2]: http://monasca.io/monasca-helm-repo/ +[3]: https://github.com/monasca/monasca-helm/blob/master/monasca/README.md +[4]: https://github.com/openstack/monasca-agent +[5]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#kubernetes +[6]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#cadvisor_host +[7]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#kubernetes_api +[8]: http://localhost:3000 \ No newline at end of file diff --git a/index.html b/index.html index d78e468..ae11bc6 100644 --- a/index.html +++ b/index.html @@ -68,7 +68,7 @@

Mauris vulputate dolor

Deploying in Kubernetes

- Deploy Monasca to your Kubernetes cluster in minutes using Helm. + Deploy Monasca to your Kubernetes cluster within minutes using Helm. More...

From 19b048d88095517e7c4e274851ca962e776a954b Mon Sep 17 00:00:00 2001 From: Michael James Hoppal Date: Tue, 2 May 2017 14:56:09 -0600 Subject: [PATCH 2/2] Split out kubernetes documentations --- docs/deploy-kubernetes.md | 39 +++++++++++++++++++++++++++ docs/kubernetes.md | 57 ++++++++------------------------------- index.html | 4 +-- 3 files changed, 52 insertions(+), 48 deletions(-) create mode 100644 docs/deploy-kubernetes.md diff --git a/docs/deploy-kubernetes.md b/docs/deploy-kubernetes.md new file mode 100644 index 0000000..8ebfa18 --- /dev/null +++ b/docs/deploy-kubernetes.md @@ -0,0 +1,39 @@ +# Installing Monasca via Helm + +We have a Helm chart for Monasca and all of its microservices. This can be found at [Monasca Helm][1]. The charts are +hosted via github pages on [monasca.io][2] + +# Quick Start + +To install Monasca on a running Kubernetes cluster follow the following steps: +{% highlight bash %} +helm repo add monasca http://monasca.io/monasca-helm-repo +helm install monasca/monasca --name monasca --namespace monitoring +{% endhighlight %} + +More detailed configuration for installing Monasca can be found in the charts' [README][3] + +## Default Grafana graphs + +Grafana is deployed when bringing up Monasca and by default is configured with the Monasca datasource. Default +dashboards are also created for Deployments, Namespaces, Pod, Daemonset and Nodes. + +Grafana can be accessed by port-forwarding the grafana service to localhost. + +Setting up grafana port-forward: +```bash +$ kubectl get pods -n monitoring -l component=grafana +$ kubectl port-forward {{ grafana_pod_name_from_output_above }} -n monitoring 3000 +``` + +After the above is set up you can visit [grafana][4] with the default credentials mini-mon/password. + +## Future Work +* Expand on Default graphs that are being created +* Include default Kubernetes alarms on deploy +* Intergrate Helm work into official charts + +[1]: https://github.com/monasca/monasca-helm +[2]: http://monasca.io/monasca-helm-repo/ +[3]: https://github.com/monasca/monasca-helm/blob/master/monasca/README.md +[4]: http://localhost:3000 diff --git a/docs/kubernetes.md b/docs/kubernetes.md index 956e913..57653e0 100644 --- a/docs/kubernetes.md +++ b/docs/kubernetes.md @@ -4,13 +4,13 @@ Monasca can be deployed into Kubernetes to monitor containers, services and Kube ## Monitoring Kubernetes -A deamonset/deployment of the [monasca-agent][4] will be brought up when deploying Monasca into Kubernetes. The +A deamonset/deployment of the [monasca-agent][1] will be brought up when deploying Monasca into Kubernetes. The daemonset will monitor pod/node workloads and the deployment will monitor Kubernetes status/health. They both do autodetection on Prometheus endpoints to scrape metrics from and send into the Monasca pipeline. - +Monasca architecture diagram ### Daemonset Monasca Agent @@ -26,12 +26,12 @@ to the pod level). The agent can be configured to report container metrics on top of the pod metrics if desired. -More information on the metrics we are collecting for pods can be seen in the plugin's [documentation][5] +More information on the metrics we are collecting for pods can be seen in the plugin's [documentation][2] #### Node Usage Monitoring Node monitoring is accomplish by querying cAdvisor for the nodes usage metrics. The complete metric list can be found in -the plugin's [documentation][6] +the plugin's [documentation][3] #### Prometheus Endpoint Monitoring on Pods @@ -56,7 +56,7 @@ services. The monasca agent queries the Kubernetes API for metrics such as component health, replica counts (on deployments/replicaton controllers), host status flags. -The full list of the metrics being collected can be seen in the plugin's [documentation][7] +The full list of the metrics being collected can be seen in the plugin's [documentation][4] #### Prometheus Endpoint Monitoring on Services @@ -71,47 +71,12 @@ These annotations being: If the service contains the scrape annotation the agent will attempt to scrape metrics from it to send through Monasca. -## Installing Monasca via Helm - -We have a Helm chart for Monasca and all of its microservices. This can be found at [Monasca Helm][1]. The charts are -hosted via github pages on [monasca.io][2] - -To install monasca on a running Kubernetes cluster follow the following steps: -{% highlight bash %} -helm repo add monasca http://monasca.io/monasca-helm-repo -helm install monasca/monasca --name monasca --namespace monitoring -{% endhighlight %} - -More detailed configuration for installing Monasca can be found in the charts' [README][3] - -### Default Grafana graphs - -Grafana is deployed when bringing up Monasca and by default is configured with the Monasca datasource. Default -dashboards are also created for Deployments, Namespaces, Pod, Daemonset and Nodes (based on default aggregations) - -Grafana can be accessed by port-forwarding the grafana service to localhost. - -Setting up grafana port-forward: -```bash -$ kubectl get pods -n monitoring -l component=grafana -$ kubectl port-forward {{ grafana_pod_name_from_output_above }} -n monitoring 3000 -``` - -After the above is set up you can visit [grafana][8] with the default credentials mini-mon/password - ## Future Work -* Expand on Default graphs that are being created -* Include default Kubernetes alarms on deploy * Iterate on the Prometheus autodetection to match what Prometheus Server does for autodetection * Intergrate Monasca in Kubernetes Custom Metric API -* Intergrate Helm work into official charts * Look into integrating Kubernetes RBAC into Monasca. -[1]: https://github.com/monasca/monasca-helm -[2]: http://monasca.io/monasca-helm-repo/ -[3]: https://github.com/monasca/monasca-helm/blob/master/monasca/README.md -[4]: https://github.com/openstack/monasca-agent -[5]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#kubernetes -[6]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#cadvisor_host -[7]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#kubernetes_api -[8]: http://localhost:3000 \ No newline at end of file +[1]: https://github.com/openstack/monasca-agent +[2]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#kubernetes +[3]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#cadvisor_host +[4]: https://github.com/openstack/monasca-agent/blob/master/docs/Plugins.md#kubernetes_api diff --git a/index.html b/index.html index ae11bc6..07f1567 100644 --- a/index.html +++ b/index.html @@ -63,13 +63,13 @@

Mauris vulputate dolor

In posuere eleifend odio. Quisque semper augue mattis wisi. Maecenas ligula. Pellentesque viverra vulputate enim. Aliquam erat volutpat. Donec leo, vivamus fermentum nibh in augue praesent a lacus at urna congue rutrum.

- + ship

Deploying in Kubernetes

Deploy Monasca to your Kubernetes cluster within minutes using Helm. - More... + More...