diff --git a/cluster/addons/cluster-monitoring/google/heapster-controller.yaml b/cluster/addons/cluster-monitoring/google/heapster-controller.yaml index a04e9d846e45d..575895cb3064f 100644 --- a/cluster/addons/cluster-monitoring/google/heapster-controller.yaml +++ b/cluster/addons/cluster-monitoring/google/heapster-controller.yaml @@ -1,28 +1,33 @@ {% set metrics_memory = "200Mi" -%} {% set eventer_memory = "200Mi" -%} +{% set metrics_memory_per_node = 4 -%} +{% set eventer_memory_per_node = 500 -%} {% set num_nodes = pillar.get('num_nodes', -1) -%} {% if num_nodes >= 0 -%} - {% set metrics_memory = (200 + num_nodes * 4)|string + "Mi" -%} - {% set eventer_memory = (200 * 1024 + num_nodes * 500)|string + "Ki" -%} + {% set metrics_memory = (200 + num_nodes * metrics_memory_per_node)|string + "Mi" -%} + {% set eventer_memory = (200 * 1024 + num_nodes * eventer_memory_per_node)|string + "Ki" -%} {% endif -%} -apiVersion: v1 -kind: ReplicationController +apiVersion: extensions/v1beta1 +kind: Deployment metadata: name: heapster-v1.0.2 namespace: kube-system labels: k8s-app: heapster kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: replicas: 1 selector: - k8s-app: heapster + matchLabels: + k8s-app: heapster + version: v1.0.2 template: metadata: labels: k8s-app: heapster - kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: containers: - image: gcr.io/google_containers/heapster:v1.0.2 @@ -62,6 +67,62 @@ spec: - name: ssl-certs mountPath: /etc/ssl/certs readOnly: true + - image: gcr.io/google_containers/addon-resizer:1.0 + name: heapster-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{ metrics_memory }} + - --extra-memory={{metrics_memory_per_node}}Mi + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=heapster + - --poll-period=300000 + - image: gcr.io/google_containers/addon-resizer:1.0 + name: eventer-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{eventer_memory}} + - --extra-memory={{eventer_memory_per_node}}Ki + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=eventer + - --poll-period=300000 volumes: - name: ssl-certs hostPath: diff --git a/cluster/addons/cluster-monitoring/googleinfluxdb/heapster-controller-combined.yaml b/cluster/addons/cluster-monitoring/googleinfluxdb/heapster-controller-combined.yaml index 2217f40119cbd..a4d7bcf19f0ad 100644 --- a/cluster/addons/cluster-monitoring/googleinfluxdb/heapster-controller-combined.yaml +++ b/cluster/addons/cluster-monitoring/googleinfluxdb/heapster-controller-combined.yaml @@ -1,28 +1,33 @@ {% set metrics_memory = "200Mi" -%} {% set eventer_memory = "200Mi" -%} +{% set metrics_memory_per_node = 4 -%} +{% set eventer_memory_per_node = 500 -%} {% set num_nodes = pillar.get('num_nodes', -1) -%} {% if num_nodes >= 0 -%} - {% set metrics_memory = (200 + num_nodes * 4)|string + "Mi" -%} - {% set eventer_memory = (200 * 1024 + num_nodes * 500)|string + "Ki" -%} + {% set metrics_memory = (200 + num_nodes * metrics_memory_per_node)|string + "Mi" -%} + {% set eventer_memory = (200 * 1024 + num_nodes * eventer_memory_per_node)|string + "Ki" -%} {% endif -%} -apiVersion: v1 -kind: ReplicationController +apiVersion: extensions/v1beta1 +kind: Deployment metadata: name: heapster-v1.0.2 namespace: kube-system labels: k8s-app: heapster kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: replicas: 1 selector: - k8s-app: heapster + matchLabels: + k8s-app: heapster + version: v1.0.2 template: metadata: labels: k8s-app: heapster - kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: containers: - image: gcr.io/google_containers/heapster:v1.0.2 @@ -63,6 +68,62 @@ spec: - name: ssl-certs mountPath: /etc/ssl/certs readOnly: true + - image: gcr.io/google_containers/addon-resizer:1.0 + name: heapster-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{ metrics_memory }} + - --extra-memory={{ metrics_memory_per_node }}Mi + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=heapster + - --poll-period=300000 + - image: gcr.io/google_containers/addon-resizer:1.0 + name: eventer-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{ eventer_memory }} + - --extra-memory={{ eventer_memory_per_node }}Ki + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=eventer + - --poll-period=300000 volumes: - name: ssl-certs hostPath: diff --git a/cluster/addons/cluster-monitoring/influxdb/heapster-controller.yaml b/cluster/addons/cluster-monitoring/influxdb/heapster-controller.yaml index 3705d367adfb1..ae617d0c0763f 100644 --- a/cluster/addons/cluster-monitoring/influxdb/heapster-controller.yaml +++ b/cluster/addons/cluster-monitoring/influxdb/heapster-controller.yaml @@ -1,28 +1,33 @@ {% set metrics_memory = "200Mi" -%} {% set eventer_memory = "200Mi" -%} +{% set metrics_memory_per_node = 4 -%} +{% set eventer_memory_per_node = 500 -%} {% set num_nodes = pillar.get('num_nodes', -1) -%} {% if num_nodes >= 0 -%} - {% set metrics_memory = (200 + num_nodes * 4)|string + "Mi" -%} - {% set eventer_memory = (200 * 1024 + num_nodes * 500)|string + "Ki" -%} + {% set metrics_memory = (200 + num_nodes * metrics_memory_per_node)|string + "Mi" -%} + {% set eventer_memory = (200 * 1024 + num_nodes * eventer_memory_per_node)|string + "Ki" -%} {% endif -%} -apiVersion: v1 -kind: ReplicationController +apiVersion: extensions/v1beta1 +kind: Deployment metadata: name: heapster-v1.0.2 namespace: kube-system labels: k8s-app: heapster kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: replicas: 1 selector: - k8s-app: heapster + matchLabels: + k8s-app: heapster + version: v1.0.2 template: metadata: labels: k8s-app: heapster - kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: containers: - image: gcr.io/google_containers/heapster:v1.0.2 @@ -54,3 +59,60 @@ spec: - /eventer - --source=kubernetes:'' - --sink=influxdb:http://monitoring-influxdb:8086 + - image: gcr.io/google_containers/addon-resizer:1.0 + name: heapster-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{ metrics_memory }} + - --extra-memory={{ metrics_memory_per_node }}Mi + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=heapster + - --poll-period=300000 + - image: gcr.io/google_containers/addon-resizer:1.0 + name: eventer-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{ eventer_memory }} + - --extra-memory={{ eventer_memory_per_node }}Ki + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=eventer + - --poll-period=300000 + diff --git a/cluster/addons/cluster-monitoring/standalone/heapster-controller.yaml b/cluster/addons/cluster-monitoring/standalone/heapster-controller.yaml index 6279d87e6e317..4aebf1f4ac8f9 100644 --- a/cluster/addons/cluster-monitoring/standalone/heapster-controller.yaml +++ b/cluster/addons/cluster-monitoring/standalone/heapster-controller.yaml @@ -1,26 +1,30 @@ {% set metrics_memory = "200Mi" -%} +{% set metrics_memory_per_node = 4 -%} {% set num_nodes = pillar.get('num_nodes', -1) -%} {% if num_nodes >= 0 -%} - {% set metrics_memory = (200 + num_nodes * 4)|string + "Mi" -%} + {% set metrics_memory = (200 + num_nodes * metrics_memory_per_node)|string + "Mi" -%} {% endif -%} -apiVersion: v1 -kind: ReplicationController +apiVersion: extensions/v1beta1 +kind: Deployment metadata: name: heapster-v1.0.2 namespace: kube-system labels: k8s-app: heapster kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: replicas: 1 selector: - k8s-app: heapster + matchLabels: + k8s-app: heapster + version: v1.0.2 template: metadata: labels: k8s-app: heapster - kubernetes.io/cluster-service: "true" + version: v1.0.2 spec: containers: - image: gcr.io/google_containers/heapster:v1.0.2 @@ -37,3 +41,31 @@ spec: - /heapster - --source=kubernetes.summary_api:'' - --metric_resolution=60s + - image: gcr.io/google_containers/addon-resizer:1.0 + name: heapster-nanny + resources: + limits: + cpu: 50m + memory: 100Mi + requests: + cpu: 50m + memory: 100Mi + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /pod_nanny + - --cpu=100m + - --extra-cpu=0m + - --memory={{ metrics_memory }} + - --extra-memory={{ metrics_memory_per_node }}Mi + - --threshold=5 + - --deployment=heapster-v1.0.2 + - --container=heapster + - --poll-period=300000 diff --git a/cluster/saltbase/salt/kube-addons/kube-addon-update.sh b/cluster/saltbase/salt/kube-addons/kube-addon-update.sh index 6ba07b15f7157..239d163737176 100755 --- a/cluster/saltbase/salt/kube-addons/kube-addon-update.sh +++ b/cluster/saltbase/salt/kube-addons/kube-addon-update.sh @@ -475,6 +475,7 @@ function update-addons() { local -r addon_path=$1 # be careful, reconcile-objects uses global variables reconcile-objects ${addon_path} ReplicationController "-" & + reconcile-objects ${addon_path} Deployment "-" & # We don't expect names to be versioned for the following kinds, so # we match the entire name, ignoring version suffix. diff --git a/test/e2e/monitoring.go b/test/e2e/monitoring.go index c690979a16202..c6b2a1a946fa8 100644 --- a/test/e2e/monitoring.go +++ b/test/e2e/monitoring.go @@ -102,14 +102,19 @@ func verifyExpectedRcsExistAndGetExpectedPods(c *client.Client) ([]string, error for _, rcLabel := range rcLabels { selector := labels.Set{"k8s-app": rcLabel}.AsSelector() options := api.ListOptions{LabelSelector: selector} + deploymentList, err := c.Deployments(api.NamespaceSystem).List(options) + if err != nil { + return nil, err + } rcList, err := c.ReplicationControllers(api.NamespaceSystem).List(options) if err != nil { return nil, err } - if len(rcList.Items) != 1 { - return nil, fmt.Errorf("expected to find one replica for RC with label %s but got %d", + if (len(rcList.Items) + len(deploymentList.Items)) != 1 { + return nil, fmt.Errorf("expected to find one replica for RC or deployment with label %s but got %d", rcLabel, len(rcList.Items)) } + // Check all the replication controllers. for _, rc := range rcList.Items { selector := labels.Set(rc.Spec.Selector).AsSelector() options := api.ListOptions{LabelSelector: selector} @@ -124,6 +129,21 @@ func verifyExpectedRcsExistAndGetExpectedPods(c *client.Client) ([]string, error expectedPods = append(expectedPods, string(pod.UID)) } } + // Do the same for all deployments. + for _, rc := range deploymentList.Items { + selector := labels.Set(rc.Spec.Selector.MatchLabels).AsSelector() + options := api.ListOptions{LabelSelector: selector} + podList, err := c.Pods(api.NamespaceSystem).List(options) + if err != nil { + return nil, err + } + for _, pod := range podList.Items { + if pod.DeletionTimestamp != nil { + continue + } + expectedPods = append(expectedPods, string(pod.UID)) + } + } } return expectedPods, nil }