From a737fec50bd093e847bbf6adc208221fb25b21da Mon Sep 17 00:00:00 2001 From: Aleksandra Malinowska Date: Mon, 20 Mar 2017 14:34:43 +0100 Subject: [PATCH] Add stackdriver monitoring option --- .../stackdriver/heapster-controller.yaml | 96 +++++++++++++++++++ .../stackdriver/heapster-service.yaml | 15 +++ cluster/gce/config-default.sh | 1 + cluster/gce/config-test.sh | 1 + .../gce/container-linux/configure-helper.sh | 1 + cluster/gce/gci/configure-helper.sh | 1 + cluster/saltbase/salt/kube-addons/init.sls | 12 +++ 7 files changed, 127 insertions(+) create mode 100644 cluster/addons/cluster-monitoring/stackdriver/heapster-controller.yaml create mode 100644 cluster/addons/cluster-monitoring/stackdriver/heapster-service.yaml diff --git a/cluster/addons/cluster-monitoring/stackdriver/heapster-controller.yaml b/cluster/addons/cluster-monitoring/stackdriver/heapster-controller.yaml new file mode 100644 index 0000000000..a1e8d32c14 --- /dev/null +++ b/cluster/addons/cluster-monitoring/stackdriver/heapster-controller.yaml @@ -0,0 +1,96 @@ +{% set base_metrics_memory = "140Mi" -%} +{% set base_metrics_cpu = "80m" -%} +{% set metrics_memory_per_node = 4 -%} +{% set metrics_cpu_per_node = 0.5 -%} +{% set num_nodes = pillar.get('num_nodes', -1) -%} +{% set nanny_memory = "90Mi" -%} +{% set nanny_memory_per_node = 200 -%} +{% if num_nodes >= 0 -%} + {% set nanny_memory = (90 * 1024 + num_nodes * nanny_memory_per_node)|string + "Ki" -%} +{% endif -%} + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: heapster-v1.3.0 + namespace: kube-system + labels: + k8s-app: heapster + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + version: v1.3.0 +spec: + replicas: 1 + selector: + matchLabels: + k8s-app: heapster + version: v1.3.0 + template: + metadata: + labels: + k8s-app: heapster + version: v1.3.0 + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + containers: + - image: gcr.io/google_containers/heapster-amd64:v1.3.0 + name: heapster + livenessProbe: + httpGet: + path: /healthz + port: 8082 + scheme: HTTP + initialDelaySeconds: 180 + timeoutSeconds: 5 + command: + - /heapster + - --source=kubernetes.summary_api:'' + - --sink=stackdriver + # TODO: add --disable_export when it's merged into Heapster release + volumeMounts: + - name: ssl-certs + mountPath: /etc/ssl/certs + readOnly: true + - name: usr-ca-certs + mountPath: /usr/share/ca-certificates + readOnly: true + - image: gcr.io/google_containers/addon-resizer:1.7 + name: heapster-nanny + resources: + limits: + cpu: 50m + memory: {{ nanny_memory }} + requests: + cpu: 50m + memory: {{ nanny_memory }} + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu={{ base_metrics_cpu }} + - --extra-cpu={{ metrics_cpu_per_node }}m + - --memory={{ base_metrics_memory }} + - --extra-memory={{metrics_memory_per_node}}Mi + - --threshold=5 + - --deployment=heapster-v1.3.0 + - --container=heapster + - --poll-period=300000 + - --estimator=exponential + volumes: + - name: ssl-certs + hostPath: + path: "/etc/ssl/certs" + - name: usr-ca-certs + hostPath: + path: "/usr/share/ca-certificates" + tolerations: + - key: "CriticalAddonsOnly" + operator: "Exists" diff --git a/cluster/addons/cluster-monitoring/stackdriver/heapster-service.yaml b/cluster/addons/cluster-monitoring/stackdriver/heapster-service.yaml new file mode 100644 index 0000000000..aab19cbb06 --- /dev/null +++ b/cluster/addons/cluster-monitoring/stackdriver/heapster-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: heapster + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + kubernetes.io/name: "Heapster" +spec: + ports: + - port: 80 + targetPort: 8082 + selector: + k8s-app: heapster diff --git a/cluster/gce/config-default.sh b/cluster/gce/config-default.sh index 0386c80b22..f18d85db46 100755 --- a/cluster/gce/config-default.sh +++ b/cluster/gce/config-default.sh @@ -102,6 +102,7 @@ ENABLE_L7_LOADBALANCING="${KUBE_ENABLE_L7_LOADBALANCING:-glbc}" # none - No cluster monitoring setup # influxdb - Heapster, InfluxDB, and Grafana # google - Heapster, Google Cloud Monitoring, and Google Cloud Logging +# stackdriver - Heapster, Google Cloud Monitoring (schema container), and Google Cloud Logging # googleinfluxdb - Enable influxdb and google (except GCM) # standalone - Heapster only. Metrics available via Heapster REST API. ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}" diff --git a/cluster/gce/config-test.sh b/cluster/gce/config-test.sh index d1106daf94..bcfdccb9c8 100755 --- a/cluster/gce/config-test.sh +++ b/cluster/gce/config-test.sh @@ -106,6 +106,7 @@ ENABLE_L7_LOADBALANCING="${KUBE_ENABLE_L7_LOADBALANCING:-glbc}" # none - No cluster monitoring setup # influxdb - Heapster, InfluxDB, and Grafana # google - Heapster, Google Cloud Monitoring, and Google Cloud Logging +# stackdriver - Heapster, Google Cloud Monitoring (schema container), and Google Cloud Logging # googleinfluxdb - Enable influxdb and google (except GCM) # standalone - Heapster only. Metrics available via Heapster REST API. ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}" diff --git a/cluster/gce/container-linux/configure-helper.sh b/cluster/gce/container-linux/configure-helper.sh index 8d9015d20f..88e597cfca 100755 --- a/cluster/gce/container-linux/configure-helper.sh +++ b/cluster/gce/container-linux/configure-helper.sh @@ -1113,6 +1113,7 @@ function start-kube-addons { # Set up manifests of other addons. if [[ "${ENABLE_CLUSTER_MONITORING:-}" == "influxdb" ]] || \ [[ "${ENABLE_CLUSTER_MONITORING:-}" == "google" ]] || \ + [[ "${ENABLE_CLUSTER_MONITORING:-}" == "stackdriver" ]] || \ [[ "${ENABLE_CLUSTER_MONITORING:-}" == "standalone" ]] || \ [[ "${ENABLE_CLUSTER_MONITORING:-}" == "googleinfluxdb" ]]; then local -r file_dir="cluster-monitoring/${ENABLE_CLUSTER_MONITORING}" diff --git a/cluster/gce/gci/configure-helper.sh b/cluster/gce/gci/configure-helper.sh index bdd9fac92d..5b74a3e18b 100644 --- a/cluster/gce/gci/configure-helper.sh +++ b/cluster/gce/gci/configure-helper.sh @@ -1322,6 +1322,7 @@ function start-kube-addons { # Set up manifests of other addons. if [[ "${ENABLE_CLUSTER_MONITORING:-}" == "influxdb" ]] || \ [[ "${ENABLE_CLUSTER_MONITORING:-}" == "google" ]] || \ + [[ "${ENABLE_CLUSTER_MONITORING:-}" == "stackdriver" ]] || \ [[ "${ENABLE_CLUSTER_MONITORING:-}" == "standalone" ]] || \ [[ "${ENABLE_CLUSTER_MONITORING:-}" == "googleinfluxdb" ]]; then local -r file_dir="cluster-monitoring/${ENABLE_CLUSTER_MONITORING}" diff --git a/cluster/saltbase/salt/kube-addons/init.sls b/cluster/saltbase/salt/kube-addons/init.sls index 818b987f25..6dd5b1c07e 100644 --- a/cluster/saltbase/salt/kube-addons/init.sls +++ b/cluster/saltbase/salt/kube-addons/init.sls @@ -47,6 +47,18 @@ addon-dir-create: - file_mode: 644 {% endif %} +{% if pillar.get('enable_cluster_monitoring', '').lower() == 'stackdriver' %} +/etc/kubernetes/addons/cluster-monitoring/stackdriver: + file.recurse: + - source: salt://kube-addons/cluster-monitoring/stackdriver + - include_pat: E@(^.+\.yaml$|^.+\.json$) + - template: jinja + - user: root + - group: root + - dir_mode: 755 + - file_mode: 644 +{% endif %} + {% if pillar.get('enable_cluster_monitoring', '').lower() == 'standalone' %} /etc/kubernetes/addons/cluster-monitoring/standalone: file.recurse: