diff --git a/cluster/addons/prometheus/alertmanager-configmap.yaml b/cluster/addons/prometheus/alertmanager-configmap.yaml new file mode 100644 index 00000000000..0890a8b14db --- /dev/null +++ b/cluster/addons/prometheus/alertmanager-configmap.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: alertmanager-config + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: EnsureExists +data: + alertmanager.yml: | + global: null + receivers: + - name: default-receiver + route: + group_interval: 5m + group_wait: 10s + receiver: default-receiver + repeat_interval: 3h diff --git a/cluster/addons/prometheus/alertmanager-deployment.yaml b/cluster/addons/prometheus/alertmanager-deployment.yaml new file mode 100644 index 00000000000..440f3d8d3ae --- /dev/null +++ b/cluster/addons/prometheus/alertmanager-deployment.yaml @@ -0,0 +1,78 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: alertmanager + namespace: kube-system + labels: + k8s-app: alertmanager + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + version: v0.14.0 +spec: + replicas: 1 + selector: + matchLabels: + k8s-app: alertmanager + version: v0.14.0 + template: + metadata: + labels: + k8s-app: alertmanager + version: v0.14.0 + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + priorityClassName: system-cluster-critical + containers: + - name: prometheus-alertmanager + image: "prom/alertmanager:v0.14.0" + imagePullPolicy: "IfNotPresent" + args: + - --config.file=/etc/config/alertmanager.yml + - --storage.path=/data + - --web.external-url=/ + ports: + - containerPort: 9093 + readinessProbe: + httpGet: + path: /#/status + port: 9093 + initialDelaySeconds: 30 + timeoutSeconds: 30 + volumeMounts: + - name: config-volume + mountPath: /etc/config + - name: storage-volume + mountPath: "/data" + subPath: "" + resources: + limits: + cpu: 10m + memory: 50Mi + requests: + cpu: 10m + memory: 50Mi + - name: prometheus-alertmanager-configmap-reload + image: "jimmidyson/configmap-reload:v0.1" + imagePullPolicy: "IfNotPresent" + args: + - --volume-dir=/etc/config + - --webhook-url=http://localhost:9093/-/reload + volumeMounts: + - name: config-volume + mountPath: /etc/config + readOnly: true + resources: + limits: + cpu: 10m + memory: 10Mi + requests: + cpu: 10m + memory: 10Mi + volumes: + - name: config-volume + configMap: + name: alertmanager-config + - name: storage-volume + persistentVolumeClaim: + claimName: alertmanager diff --git a/cluster/addons/prometheus/alertmanager-pvc.yaml b/cluster/addons/prometheus/alertmanager-pvc.yaml new file mode 100644 index 00000000000..fecbe390586 --- /dev/null +++ b/cluster/addons/prometheus/alertmanager-pvc.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: alertmanager + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: EnsureExists +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "2Gi" diff --git a/cluster/addons/prometheus/alertmanager-service.yaml b/cluster/addons/prometheus/alertmanager-service.yaml new file mode 100644 index 00000000000..62c7b5936b6 --- /dev/null +++ b/cluster/addons/prometheus/alertmanager-service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: alertmanager + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + kubernetes.io/name: "Alertmanager" +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 9093 + selector: + k8s-app: alertmanager + type: "ClusterIP" diff --git a/cluster/addons/prometheus/kube-state-metrics-deployment.yaml b/cluster/addons/prometheus/kube-state-metrics-deployment.yaml new file mode 100644 index 00000000000..6b98774145c --- /dev/null +++ b/cluster/addons/prometheus/kube-state-metrics-deployment.yaml @@ -0,0 +1,67 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: kube-state-metrics + namespace: kube-system + labels: + k8s-app: kube-state-metrics + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + version: v1.3.0 +spec: + selector: + matchLabels: + k8s-app: kube-state-metrics + version: v1.3.0 + replicas: 1 + template: + metadata: + labels: + k8s-app: kube-state-metrics + version: v1.3.0 + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + priorityClassName: system-cluster-critical + serviceAccountName: kube-state-metrics + containers: + - name: kube-state-metrics + image: quay.io/coreos/kube-state-metrics:v1.3.0 + ports: + - name: http-metrics + containerPort: 8080 + - name: telemetry + containerPort: 8081 + readinessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 5 + - name: addon-resizer + image: k8s.gcr.io/addon-resizer:1.7 + resources: + limits: + cpu: 100m + memory: 30Mi + requests: + cpu: 100m + memory: 30Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --container=kube-state-metrics + - --cpu=100m + - --extra-cpu=1m + - --memory=100Mi + - --extra-memory=2Mi + - --threshold=5 + - --deployment=kube-state-metrics diff --git a/cluster/addons/prometheus/kube-state-metrics-rbac.yaml b/cluster/addons/prometheus/kube-state-metrics-rbac.yaml new file mode 100644 index 00000000000..2a27ce46e81 --- /dev/null +++ b/cluster/addons/prometheus/kube-state-metrics-rbac.yaml @@ -0,0 +1,103 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kube-state-metrics + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kube-state-metrics + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +rules: +- apiGroups: [""] + resources: + - configmaps + - secrets + - nodes + - pods + - services + - resourcequotas + - replicationcontrollers + - limitranges + - persistentvolumeclaims + - persistentvolumes + - namespaces + - endpoints + verbs: ["list", "watch"] +- apiGroups: ["extensions"] + resources: + - daemonsets + - deployments + - replicasets + verbs: ["list", "watch"] +- apiGroups: ["apps"] + resources: + - statefulsets + verbs: ["list", "watch"] +- apiGroups: ["batch"] + resources: + - cronjobs + - jobs + verbs: ["list", "watch"] +- apiGroups: ["autoscaling"] + resources: + - horizontalpodautoscalers + verbs: ["list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kube-state-metrics-resizer + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +rules: +- apiGroups: [""] + resources: + - pods + verbs: ["get"] +- apiGroups: ["extensions"] + resources: + - deployments + resourceNames: ["kube-state-metrics"] + verbs: ["get", "update"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kube-state-metrics + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kube-state-metrics +subjects: +- kind: ServiceAccount + name: kube-state-metrics + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kube-state-metrics + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kube-state-metrics-resizer +subjects: +- kind: ServiceAccount + name: kube-state-metrics + namespace: kube-system diff --git a/cluster/addons/prometheus/kube-state-metrics-service.yaml b/cluster/addons/prometheus/kube-state-metrics-service.yaml new file mode 100644 index 00000000000..bad3ffd4600 --- /dev/null +++ b/cluster/addons/prometheus/kube-state-metrics-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: kube-state-metrics + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + kubernetes.io/name: "kube-state-metrics" + annotations: + prometheus.io/scrape: 'true' +spec: + ports: + - name: http-metrics + port: 8080 + targetPort: http-metrics + protocol: TCP + - name: telemetry + port: 8081 + targetPort: telemetry + protocol: TCP + selector: + k8s-app: kube-state-metrics diff --git a/cluster/addons/prometheus/node-exporter-ds.yml b/cluster/addons/prometheus/node-exporter-ds.yml new file mode 100644 index 00000000000..0c5881c21d8 --- /dev/null +++ b/cluster/addons/prometheus/node-exporter-ds.yml @@ -0,0 +1,56 @@ +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: node-exporter + namespace: kube-system + labels: + k8s-app: node-exporter + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + version: v0.15.2 +spec: + updateStrategy: + type: OnDelete + template: + metadata: + labels: + k8s-app: node-exporter + version: v0.15.2 + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + priorityClassName: system-node-critical + containers: + - name: prometheus-node-exporter + image: "prom/node-exporter:v0.15.2" + imagePullPolicy: "IfNotPresent" + args: + - --path.procfs=/host/proc + - --path.sysfs=/host/sys + ports: + - name: metrics + containerPort: 9100 + hostPort: 9100 + volumeMounts: + - name: proc + mountPath: /host/proc + readOnly: true + - name: sys + mountPath: /host/sys + readOnly: true + resources: + limits: + cpu: 10m + memory: 50Mi + requests: + cpu: 10m + memory: 50Mi + hostNetwork: true + hostPID: true + volumes: + - name: proc + hostPath: + path: /proc + - name: sys + hostPath: + path: /sys diff --git a/cluster/addons/prometheus/node-exporter-service.yaml b/cluster/addons/prometheus/node-exporter-service.yaml new file mode 100644 index 00000000000..80a374ae2ac --- /dev/null +++ b/cluster/addons/prometheus/node-exporter-service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: node-exporter + namespace: kube-system + annotations: + prometheus.io/scrape: "true" + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + kubernetes.io/name: "NodeExporter" +spec: + clusterIP: None + ports: + - name: metrics + port: 9100 + protocol: TCP + targetPort: 9100 + selector: + k8s-app: node-exporter