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: