Merge "Add alertmanager as a k8s service"
diff --git a/kubernetes/files/kube-addons/alertmanager/alertmanager-deploy.yml b/kubernetes/files/kube-addons/alertmanager/alertmanager-deploy.yml
new file mode 100644
index 0000000..e1403ee
--- /dev/null
+++ b/kubernetes/files/kube-addons/alertmanager/alertmanager-deploy.yml
@@ -0,0 +1,71 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: alertmanager
+ namespace: {{ common.addons.get('alertmanager',{}).get('namespace', 'stacklight') }}
+ labels:
+ k8s-app: alertmanager
+ kubernetes.io/cluster-service: "true"
+ addonmanager.kubernetes.io/mode: Reconcile
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ k8s-app: alertmanager
+ template:
+ metadata:
+ name: alertmanager
+ labels:
+ k8s-app: alertmanager
+ annotations:
+ scheduler.alpha.kubernetes.io/critical-pod: ''
+ scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
+ spec:
+ serviceAccountName: alertmanager
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values: ["true"]
+ tolerations:
+ - key: "node-role.kubernetes.io/master"
+ operator: "Exists"
+ effect: "NoSchedule"
+ containers:
+ - name: alertmanager
+ image: "{{ common.addons.get('alertmanager',{}).get('image', 'docker-prod-local.artifactory.mirantis.com/openstack-docker/alertmanager:2018.8.0') }}"
+ ports:
+ - name: alertmanager
+ containerPort: {{ common.addons.get('alertmanager',{}).get('bind', {}).get('port', '9093') }}
+ env:
+ - name: ALERTMANAGER_CONFIG_DIR
+ value: "{{ common.addons.get('alertmanager',{}).get('dir', {}).get('config', '/etc/alertmanager') }}"
+ - name: ALERTMANAGER_DATA_DIR
+ value: "{{ common.addons.get('alertmanager',{}).get('dir', {}).get('data', '/data') }}"
+ - name: ALERTMANAGER_BIND_PORT
+ value: "{{ common.addons.get('alertmanager',{}).get('bind', {}).get('port', '9093') }}"
+ - name: ALERTMANAGER_BIND_ADDRESS
+ value: "{{ common.addons.get('alertmanager',{}).get('bind', {}).get('address', '0.0.0.0') }}"
+ - name: ALERTMANAGER_DISCOVERY_DOMAIN
+ value: "*.alertmanager.stacklight"
+ - name: ALERTMANAGER_USE_STATIC_DATADIR
+ value: "True"
+ - name: ALERTMANAGER_KUBERNETES_DNS
+ value: "True"
+ volumeMounts:
+ - name: config-volume
+ mountPath: "{{ common.addons.get('alertmanager',{}).get('dir', {}).get('config', '/etc/alertmanager') }}"
+ - name: data-volume
+ mountPath: "{{ common.addons.get('alertmanager',{}).get('dir', {}).get('data', '/data') }}"
+ volumes:
+ - name: config-volume
+ hostPath:
+ path: "{{ common.addons.get('alertmanager',{}).get('dir', {}).get('host_config', '/srv/volumes/local/alertmanager/config') }}"
+ - name: data-volume
+ hostPath:
+ path: "{{ common.addons.get('alertmanager',{}).get('dir', {}).get('host_data', '/srv/volumes/local/alertmanager/data') }}"
diff --git a/kubernetes/files/kube-addons/alertmanager/alertmanager-ns.yml b/kubernetes/files/kube-addons/alertmanager/alertmanager-ns.yml
new file mode 100644
index 0000000..b8c7dce
--- /dev/null
+++ b/kubernetes/files/kube-addons/alertmanager/alertmanager-ns.yml
@@ -0,0 +1,8 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: {{ common.addons.get('alertmanager',{}).get('namespace', 'stacklight') }}
+ labels:
+ addonmanager.kubernetes.io/mode: Reconcile
diff --git a/kubernetes/files/kube-addons/alertmanager/alertmanager-sa.yml b/kubernetes/files/kube-addons/alertmanager/alertmanager-sa.yml
new file mode 100644
index 0000000..49c4bb4
--- /dev/null
+++ b/kubernetes/files/kube-addons/alertmanager/alertmanager-sa.yml
@@ -0,0 +1,45 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ addonmanager.kubernetes.io/mode: Reconcile
+ name: alertmanager
+ namespace: {{ common.addons.get('alertmanager',{}).get('namespace', 'stacklight') }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: alertmanager
+ labels:
+ addonmanager.kubernetes.io/mode: Reconcile
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/proxy
+ - services
+ - endpoints
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: alertmanager
+ labels:
+ kubernetes.io/cluster-service: "true"
+ addonmanager.kubernetes.io/mode: Reconcile
+roleRef:
+ kind: ClusterRole
+ name: alertmanager
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: alertmanager
+ namespace: {{ common.addons.get('alertmanager',{}).get('namespace', 'stacklight') }}
diff --git a/kubernetes/files/kube-addons/alertmanager/alertmanager-svc.yml b/kubernetes/files/kube-addons/alertmanager/alertmanager-svc.yml
new file mode 100644
index 0000000..e4bb185
--- /dev/null
+++ b/kubernetes/files/kube-addons/alertmanager/alertmanager-svc.yml
@@ -0,0 +1,21 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: alertmanager
+ namespace: {{ common.addons.get('alertmanager',{}).get('namespace', 'stacklight') }}
+ labels:
+ kubernetes.io/cluster-service: "true"
+ addonmanager.kubernetes.io/mode: Reconcile
+ kubernetes.io/name: "Alertmanager"
+spec:
+ type: NodePort
+ ports:
+ - name: http
+ port: {{ common.addons.get('alertmanager',{}).get('bind', {}).get('port', '9093') }}
+ protocol: TCP
+ targetPort: {{ common.addons.get('alertmanager',{}).get('bind', {}).get('port', '9093') }}
+ nodePort: {{ common.addons.get('alertmanager',{}).get('bind', {}).get('node_port', '31993') }}
+ selector:
+ k8s-app: alertmanager
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index 42e1b76..6fcedb1 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -205,6 +205,23 @@
{%- endif %}
+{%- if common.addons.get('alertmanager', {'enabled': False}).enabled %}
+
+{%- set am_resources = ['deploy', 'ns', 'sa', 'svc'] %}
+{%- for resource in am_resources %}
+
+/etc/kubernetes/addons/alertmanager/alertmanager-{{ resource }}.yml:
+ file.managed:
+ - source: salt://kubernetes/files/kube-addons/alertmanager/alertmanager-{{ resource }}.yml
+ - 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: