Added the Prometheus as a k8s service

Change-Id: I86e0c4eb05cc70e72d08085dd1c890b57387a99a
Closes-Bug: PROD-21820
diff --git a/kubernetes/files/kube-addons/prometheus/prometheus-ns.yaml b/kubernetes/files/kube-addons/prometheus/prometheus-ns.yaml
new file mode 100644
index 0000000..78833ab
--- /dev/null
+++ b/kubernetes/files/kube-addons/prometheus/prometheus-ns.yaml
@@ -0,0 +1,9 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+kind: Namespace
+apiVersion: v1
+metadata:
+  name: {{ common.addons.prometheus.get('namespace', 'stacklight') }}
+  labels:
+    k8s-app: prometheus
+    addonmanager.kubernetes.io/mode: Reconcile
diff --git a/kubernetes/files/kube-addons/prometheus/prometheus-sa.yaml b/kubernetes/files/kube-addons/prometheus/prometheus-sa.yaml
new file mode 100644
index 0000000..a32fc7c
--- /dev/null
+++ b/kubernetes/files/kube-addons/prometheus/prometheus-sa.yaml
@@ -0,0 +1,52 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  labels:
+    addonmanager.kubernetes.io/mode: Reconcile
+  name: prometheus-server
+  namespace: {{ common.addons.prometheus.get('namespace', 'stacklight') }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: prometheus
+  labels:
+    addonmanager.kubernetes.io/mode: Reconcile
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - nodes
+  - nodes/proxy
+  - services
+  - endpoints
+  - pods
+  verbs:
+  - get
+  - list
+  - watch
+- apiGroups:
+  - ""
+  resources:
+  - configmaps
+  verbs: ["get"]
+- nonResourceURLs: ["/metrics"]
+  verbs: ["get"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: prometheus
+  labels:
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+roleRef:
+  kind: ClusterRole
+  name: prometheus
+  apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+  name: prometheus-server
+  namespace: {{ common.addons.prometheus.get('namespace', 'stacklight') }}
diff --git a/kubernetes/files/kube-addons/prometheus/prometheus-server-deploy.yaml b/kubernetes/files/kube-addons/prometheus/prometheus-server-deploy.yaml
new file mode 100644
index 0000000..5d9aba2
--- /dev/null
+++ b/kubernetes/files/kube-addons/prometheus/prometheus-server-deploy.yaml
@@ -0,0 +1,77 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  name: prometheus-server
+  namespace: {{ common.addons.prometheus.get('namespace', 'stacklight') }}
+  labels:
+    k8s-app: prometheus-server
+    version: v1
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+spec:
+  replicas: 3
+  selector:
+    matchLabels:
+      k8s-app: prometheus-server
+  template:
+    metadata:
+      labels:
+        k8s-app: prometheus-server
+        version: v1
+      annotations:
+        scheduler.alpha.kubernetes.io/critical-pod: ''
+        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
+    spec:
+      serviceAccountName: prometheus-server
+      tolerations:
+        - key: "node-role.kubernetes.io/master"
+          effect: "NoSchedule"
+          operator: "Exists"
+      affinity:
+        nodeAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+            nodeSelectorTerms:
+              - matchExpressions:
+                - key: node-role.kubernetes.io/master
+                  operator: In
+                  values: ["true"]
+      containers:
+      - name: prometheus
+        image:  {{ common.addons.prometheus.get('image', 'docker-prod-local.artifactory.mirantis.com/openstack-docker/prometheus:stable') }}
+        env:
+        - name: PROMETHEUS_BIND_ADDRESS
+          value: "{{ common.addons.prometheus.server.bind.get('host', '0.0.0.0') }}"
+        - name: PROMETHEUS_BIND_PORT
+          value: "{{ common.addons.prometheus.server.bind.get('port', '9090') }}"
+        - name: PROMETHEUS_CONFIG_DIR
+          value: "{{ common.addons.prometheus.server.config.get('config_dir', '/etc/prometheus') }}"
+        - name: PROMETHEUS_DATA_DIR
+          value: "{{ common.addons.prometheus.server.config.get('data_dir', '/data') }}"
+        - name: PROMETHEUS_STORAGE_LOCAL_ENGINE
+          value: "{{ common.addons.prometheus.server.config.get('storage_local_engine', 'persisted') }}"
+        - name: PROMETHEUS_STORAGE_LOCAL_RETENTION
+          value: "{{ common.addons.prometheus.server.config.get('storage_local_retention', '360h') }}"
+        - name: PROMETHEUS_USE_STATIC_DATADIR
+          value: "{{ common.addons.prometheus.server.config.get('use_static_datadir', 'true') | lower }}"
+        ports:
+        - name: webui
+          containerPort: {{ common.addons.prometheus.server.bind.get('port', '9090') }}
+        resources:
+          requests:
+            memory: {{ common.addons.prometheus.server.resources.requests.get('memory', '500M') }}
+          limits:
+            memory: {{ common.addons.prometheus.server.resources.limits.get('memory', '500M') }}
+        volumeMounts:
+        - name: prometheus-server-cfg
+          mountPath: "{{ common.addons.prometheus.server.config.get('config_dir', '/etc/prometheus') }}"
+        - name: prometheus-server-data
+          mountPath: "{{ common.addons.prometheus.server.config.get('data_dir', '/data') }}"
+      volumes:
+      - name: prometheus-server-cfg
+        hostPath:
+          path: "{{ common.addons.prometheus.server.config.get('host_config_dir', '/srv/volumes/local/prometheus/config') }}"
+      - name: prometheus-server-data
+        hostPath:
+          path: "{{ common.addons.prometheus.server.config.get('host_data_dir', '/srv/volumes/local/prometheus/data') }}"
diff --git a/kubernetes/files/kube-addons/prometheus/prometheus-server-svc.yaml b/kubernetes/files/kube-addons/prometheus/prometheus-server-svc.yaml
new file mode 100644
index 0000000..f2966f5
--- /dev/null
+++ b/kubernetes/files/kube-addons/prometheus/prometheus-server-svc.yaml
@@ -0,0 +1,23 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: prometheus-server-svc
+  namespace: {{ common.addons.prometheus.get('namespace', 'stacklight') }}
+  labels:
+    k8s-app: prometheus-server
+    version: v1
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+spec:
+  selector:
+    k8s-app: prometheus-server
+  type: NodePort
+  ports:
+  - name: webui
+    port: {{ common.addons.prometheus.server.bind.get('port', '9090') }}
+    targetPort: {{ common.addons.prometheus.server.bind.get('port', '9090') }}
+    protocol: TCP
+    # must be between 30000-32767
+    nodePort: {{ common.addons.prometheus.server.bind.get('host_port', '31990') }}
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index 5bc5acc..42e1b76 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -188,6 +188,23 @@
 
 {%- endif %}
 
+{%- if common.addons.get('prometheus', {'enabled': False}).enabled %}
+
+{%- set prometheus_resources = ['ns', 'sa', 'server-deploy','server-svc'] %}
+{%- for resource in prometheus_resources %}
+
+/etc/kubernetes/addons/prometheus/prometheus-{{ resource }}.yaml:
+  file.managed:
+    - source: salt://kubernetes/files/kube-addons/prometheus/prometheus-{{ resource }}.yaml
+    - template: jinja
+    - group: root
+    - dir_mode: 755
+    - makedirs: True
+
+{%- endfor %}
+
+{%- endif %}
+
 {%- if common.addons.get('dns', {'enabled': False}).enabled %}
 
 /etc/kubernetes/addons/dns/kubedns-svc.yaml: