Added telegraf as a k8s daemonSet
Change-Id: I8813d3f1e8d02037011895021336ac98fdbe0956
Closes-Bug: PROD-21822
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-conf.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-conf.yaml
new file mode 100644
index 0000000..4e33a7e
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-conf.yaml
@@ -0,0 +1,82 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: telegraf-cfg
+ namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+ labels:
+ addonmanager.kubernetes.io/mode: Reconcile
+data:
+ telegraf.conf: |+
+ [global_tags]
+
+ {%- if common.addons.telegraf.global_tags is defined %}
+ {%- for tag_name, tag_value in common.addons.telegraf.global_tags.iteritems() %}
+ {{ tag_name }} = "{{ tag_value }}"
+ {%- endfor %}
+ {%- endif %}
+
+ [agent]
+ {%- if common.addons.telegraf.agent.interval is defined %}
+ interval = "{{ common.addons.telegraf.agent.interval }}s"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.round_interval is defined %}
+ round_interval = {{ common.addons.telegraf.agent.round_interval | lower }}
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.metric_batch_size is defined %}
+ metric_batch_size = {{ common.addons.telegraf.agent.metric_batch_size }}
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.metric_buffer_limit is defined %}
+ metric_buffer_limit = {{ common.addons.telegraf.agent.metric_buffer_limit }}
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.collection_jitter is defined %}
+ collection_jitter = "{{ common.addons.telegraf.agent.collection_jitter }}s"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.flush_interval is defined %}
+ flush_interval = "{{ common.addons.telegraf.agent.flush_interval }}s"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.flush_jitter is defined %}
+ flush_jitter = "{{ common.addons.telegraf.agent.flush_jitter }}s"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.precision is defined %}
+ precision = "{{ common.addons.telegraf.agent.precision }}"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.logfile is defined %}
+ logfile = "{{ common.addons.telegraf.agent.logfile }}"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.debug is defined %}
+ debug = {{ common.addons.telegraf.agent.debug | lower }}
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.quiet is defined %}
+ quiet = {{ common.addons.telegraf.agent.quiet | lower }}
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.hostname is defined %}
+ hostname = "{{ common.addons.telegraf.agent.hostname }}"
+ {%- endif %}
+
+ {%- if common.addons.telegraf.agent.omit_hostname is defined %}
+ omit_hostname = {{ common.addons.telegraf.agent.omit_hostname | lower }}
+ {%- endif %}
+
+ [[inputs.disk]]
+ ignore_fs = ["tmpfs", "devtmpfs"]
+ [[inputs.diskio]]
+ [[inputs.kernel]]
+ [[inputs.mem]]
+ [[inputs.processes]]
+ [[inputs.swap]]
+ [[inputs.system]]
+ [[outputs.prometheus_client]]
+ listen = "0.0.0.0:9126"
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-ds.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-ds.yaml
new file mode 100644
index 0000000..3614124
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-ds.yaml
@@ -0,0 +1,76 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+ name: telegraf
+ namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+ labels:
+ k8s-app: telegraf
+ version: v1
+ kubernetes.io/cluster-service: "true"
+ beta.kubernetes.io/telegraf-ds-ready: "true"
+spec:
+ template:
+ metadata:
+ labels:
+ k8s-app: telegraf
+ version: v1
+ kubernetes.io/cluster-service: "true"
+ annotations:
+ scheduler.alpha.kubernetes.io/critical-pod: ''
+ seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
+ spec:
+ priorityClassName: system-node-critical
+ serviceAccountName: telegraf
+ tolerations:
+ - key: node-role.kubernetes.io/master
+ containers:
+ - name: telegraf
+ image: {{ common.addons.telegraf.image }}
+ env:
+ - name: HOSTNAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: "HOST_PROC"
+ value: "/rootfs/proc"
+ - name: "HOST_SYS"
+ value: "/rootfs/sys"
+ resources:
+ limits:
+ memory: {{ common.addons.telegraf.resources.limits.memory }}
+ requests:
+ memory: {{ common.addons.telegraf.resources.requests.memory }}
+ volumeMounts:
+ - name: sys
+ mountPath: /rootfs/sys
+ readOnly: true
+ - name: docker-socket
+ mountPath: /var/run/docker.sock
+ readOnly: true
+ - name: proc
+ mountPath: /rootfs/proc
+ readOnly: true
+ - name: utmp
+ mountPath: /var/run/utmp
+ readOnly: true
+ - name: telegraf-cfg
+ mountPath: /etc/telegraf
+ terminationGracePeriodSeconds: 30
+ volumes:
+ - name: sys
+ hostPath:
+ path: /sys
+ - name: docker-socket
+ hostPath:
+ path: /var/run/docker.sock
+ - name: proc
+ hostPath:
+ path: /proc
+ - name: utmp
+ hostPath:
+ path: /var/run/utmp
+ - name: telegraf-cfg
+ configMap:
+ name: telegraf-cfg
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-ns.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-ns.yaml
new file mode 100644
index 0000000..473feab
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-ns.yaml
@@ -0,0 +1,9 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+ labels:
+ k8s-app: telegraf
+ addonmanager.kubernetes.io/mode: Reconcile
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-sa.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-sa.yaml
new file mode 100644
index 0000000..e342827
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-sa.yaml
@@ -0,0 +1,43 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ addonmanager.kubernetes.io/mode: Reconcile
+ name: telegraf
+ namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+---
+apiVersion: rbac.authorization.k8s.io/v1beta1
+kind: ClusterRole
+metadata:
+ name: telegraf
+ labels:
+ addonmanager.kubernetes.io/mode: Reconcile
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - namespaces
+ verbs:
+ - "get"
+ - "watch"
+ - "list"
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+ name: telegraf
+ labels:
+ k8s-app: telegraf
+ kubernetes.io/cluster-service: "true"
+ addonmanager.kubernetes.io/mode: Reconcile
+roleRef:
+ kind: ClusterRole
+ name: telegraf
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: telegraf
+ namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index 86a6c4f..936d89c 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -367,6 +367,21 @@
{% endif %}
+{%- if common.addons.get('telegraf', {}).get('enabled') %}
+{%- set telegraf_resources = ['conf', 'ns', 'sa', 'ds'] %}
+
+{%- for resource in telegraf_resources %}
+/etc/kubernetes/addons/telegraf/telegraf-{{ resource }}.yaml:
+ file.managed:
+ - source: salt://kubernetes/files/kube-addons/telegraf/telegraf-{{ resource }}.yaml
+ - template: jinja
+ - group: root
+ - dir_mode: 755
+ - makedirs: True
+{%- endfor %}
+
+{% endif %}
+
{%- if common.addons.get('dashboard', {'enabled': False}).enabled %}
{%- set dashboard_resources = ['deployment', 'secret', 'service', 'serviceaccount'] %}