From 19e1b11d98c471e0c1841a327fc4cfce10182b29 Mon Sep 17 00:00:00 2001
From: Vladimir Vasilkin <bobahspb@gmail.com>
Date: Wed, 28 Mar 2018 21:23:30 +0300
Subject: [PATCH] prometheus operator, metrics for k8s cluster

install using Helm:
- Prometheus Operator
- metrics for k8s cluster including: grafana dashboard, alertmanager, node exporters

base project:
https://github.com/coreos/prometheus-operator

the issue:
https://github.com/kubernetes-incubator/kubespray/issues/2042

Previous PR, raw ansible without Helm:
https://github.com/kubernetes-incubator/kubespray/pull/2499
---
 inventory/sample/group_vars/k8s-cluster.yml     |  8 +++++++-
 roles/kubernetes-apps/meta/main.yml             |  6 ++++++
 roles/kubernetes-apps/metrics/defaults/main.yml |  9 +++++++++
 roles/kubernetes-apps/metrics/tasks/main.yml    | 17 +++++++++++++++++
 4 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100644 roles/kubernetes-apps/metrics/defaults/main.yml
 create mode 100644 roles/kubernetes-apps/metrics/tasks/main.yml

diff --git a/inventory/sample/group_vars/k8s-cluster.yml b/inventory/sample/group_vars/k8s-cluster.yml
index 5f4889e8b..3e208bdaf 100644
--- a/inventory/sample/group_vars/k8s-cluster.yml
+++ b/inventory/sample/group_vars/k8s-cluster.yml
@@ -163,9 +163,15 @@ dashboard_enabled: true
 # Monitoring apps for k8s
 efk_enabled: false
 
-# Helm deployment
+# Helm deployment. Needs for Prometheus Operator, k8s metrics.
 helm_enabled: false
 
+# Prometheus Operator. Needs for k8s metrics. Installed Helm is required.
+prometheus_operator_enabled: false
+
+# K8s cluster metrics. Installed Helm and Prometheus Operator are required.
+k8s_metrics_enabled: false
+
 # Istio deployment
 istio_enabled: false
 
diff --git a/roles/kubernetes-apps/meta/main.yml b/roles/kubernetes-apps/meta/main.yml
index fca51a3b6..bc05e6f8c 100644
--- a/roles/kubernetes-apps/meta/main.yml
+++ b/roles/kubernetes-apps/meta/main.yml
@@ -27,6 +27,12 @@ dependencies:
       - apps
       - registry
 
+  - role: kubernetes-apps/metrics
+    when: prometheus_operator_enabled
+    tags:
+      - apps
+      - metrics
+
   # istio role should be last because it takes a long time to initialize and
   # will cause timeouts trying to start other addons.
   - role: kubernetes-apps/istio
diff --git a/roles/kubernetes-apps/metrics/defaults/main.yml b/roles/kubernetes-apps/metrics/defaults/main.yml
new file mode 100644
index 000000000..72018e6f5
--- /dev/null
+++ b/roles/kubernetes-apps/metrics/defaults/main.yml
@@ -0,0 +1,9 @@
+---
+# Prometheus Operator. Needs for k8s metrics. Installed Helm is required.
+prometheus_operator_enabled: false
+
+# K8s cluster metrics. Installed Helm and Prometheus Operators are required.
+k8s_metrics_enabled: false
+
+# Separate namespace for monitoring/metrics
+monitoring_namespace: "monitoring"
diff --git a/roles/kubernetes-apps/metrics/tasks/main.yml b/roles/kubernetes-apps/metrics/tasks/main.yml
new file mode 100644
index 000000000..f64433c69
--- /dev/null
+++ b/roles/kubernetes-apps/metrics/tasks/main.yml
@@ -0,0 +1,17 @@
+---
+- name: Metrics | Make sure Helm is installed
+  command: "{{ bin_dir }}/helm version"
+
+- name: Metrics | Add coreos repo
+  command: "{{ bin_dir }}/helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/"
+  run_once: true
+
+- name: Metrics | Install Prometheus Operator
+  command: "{{ bin_dir }}/helm upgrade --install prometheus-operator coreos/prometheus-operator --namespace {{ monitoring_namespace }}"
+  when: prometheus_operator_enabled
+  run_once: true
+
+- name: Metrics | Install K8s cluster metrics
+  command: "{{ bin_dir }}/helm upgrade --install kube-prometheus     coreos/kube-prometheus     --namespace {{ monitoring_namespace }}"
+  when: k8s_metrics_enabled
+  run_once: true
-- 
GitLab