diff --git a/stable/heapster/Chart.yaml b/stable/heapster/Chart.yaml new file mode 100644 index 0000000000..ee0657bb7b --- /dev/null +++ b/stable/heapster/Chart.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +description: Heapster enables Container Cluster Monitoring and Performance Analysis. +name: heapster +version: 0.1.0 +sources: + - https://github.com/kubernetes/heapster + - https://github.com/kubernetes/contrib/tree/master/addon-resizer +keywords: + - metrics + - cadvisor + - monitoring +maintainers: +- name: Jose Aguirre + email: jose.g.aguirre@intel.com +engine: gotpl diff --git a/stable/heapster/README.md b/stable/heapster/README.md new file mode 100644 index 0000000000..d5534c2cbe --- /dev/null +++ b/stable/heapster/README.md @@ -0,0 +1,56 @@ +# Heapster + +[Heapster](https://github.com/kubernetes/heapster) enables Container Cluster Monitoring and Performance Analysis. It collects and interprets various signals like compute resource usage, lifecycle events, etc, and exports cluster metrics via REST endpoints. + +## QuickStart + +```bash +$ helm install stable/heapster +``` + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```bash +$ helm install --name my-release stable/heapster +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +$ helm delete my-release --purge +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Configuration + +The default configuration values for this chart are listed in `values.yaml`. + +| Parameter | Description | Default | +|---------------------------------------|-------------------------------------|---------------------------------------------------| +| `image.repository` | Repository for container image | gcr.io/google_containers/heapster | +| `image.tag` | Container image tag | v1.3.0 | +| `image.pullPolicy` | Image pull policy | IfNotPresent | +| `service.name` | Service port name | api | +| `service.type` | Type for the service | ClusterIP | +| `service.externalPort` | Service external port | 8082 | +| `service.internalPort` | Service internal port | 8082 | +| `resources.limits` | Server resource limits | requests: {cpu: 100m, memory: 128Mi} | +| `resources.requests` | Server resource requests | requests: {cpu: 100m, memory: 128Mi} | +| `command` | Commands for heapster pod | "/heapster --source=kubernetes.summary_api:'' | +| `resizer.enabled` | If enabled, scale resources | true | + +The table below is only applicable if `resizer.enabled` is `true`. More information on resizer can be found [here](https://github.com/kubernetes/contrib/blob/master/addon-resizer/README.md). + +| Parameter | Description | Default | +|---------------------------------------|-------------------------------------|---------------------------------------------------| +| `resizer.image.repository` | Repository for container image | gcr.io/google_containers/addon-resizer | +| `resizer.image.tag` | Container image tag | 1.7 | +| `resizer.image.pullPolicy` | Image pull policy | IfNotPresent | +| `resizer.resources.limits` | Server resource limits | requests: {cpu: 50m, memory: 90Mi} | +| `resizer.resources.requests` | Server resource requests | requests: {cpu: 50m, memory: 90Mi} | +| `resizer.flags` | Flags for pod nanny command | Defaults set in values.yaml | diff --git a/stable/heapster/templates/NOTES.txt b/stable/heapster/templates/NOTES.txt new file mode 100644 index 0000000000..cbb09e581b --- /dev/null +++ b/stable/heapster/templates/NOTES.txt @@ -0,0 +1,14 @@ +1. Get the application URL by running these commands: +{{- if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "service.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT/ +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "service.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "service.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.externalPort }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "service.fullname" . }}" -o jsonpath="{.items[0].metadata.name}") + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME {{ .Values.service.externalPort }} +{{- end }} diff --git a/stable/heapster/templates/_helpers.tpl b/stable/heapster/templates/_helpers.tpl new file mode 100644 index 0000000000..afb73b4075 --- /dev/null +++ b/stable/heapster/templates/_helpers.tpl @@ -0,0 +1,25 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a service name that defaults to app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "service.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- .Values.service.nameOverride | default (printf "%s-%s" .Release.Name $name) | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/heapster/templates/deployment.yaml b/stable/heapster/templates/deployment.yaml new file mode 100644 index 0000000000..3544550dec --- /dev/null +++ b/stable/heapster/templates/deployment.yaml @@ -0,0 +1,56 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" +spec: + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app: {{ template "fullname" . }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: {{ .Values.service.internalPort }} + livenessProbe: + httpGet: + path: /healthz + port: {{ .Values.service.internalPort }} + initialDelaySeconds: 180 + timeoutSeconds: 5 + resources: +{{ toYaml .Values.resources | indent 12 }} + command: + {{- range .Values.command }} + - {{ . | quote }} + {{- end }} +{{ if .Values.resizer.enabled }} + - name: {{ .Chart.Name }}-nanny + {{ with .Values.resizer }} + image: "{{ .image.repository }}:{{ .image.tag }}" + imagePullPolicy: {{ .image.pullPolicy }} + resources: +{{ toYaml .resources | indent 12 }} + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + {{- end }} + command: + - "/pod_nanny" + - "--deployment={{ template "fullname" . }}" + - "--container={{ .Chart.Name }}" + {{- range .Values.resizer.flags }} + - {{ . | quote }} + {{- end }} +{{- end -}} diff --git a/stable/heapster/templates/service.yaml b/stable/heapster/templates/service.yaml new file mode 100644 index 0000000000..6dcf313125 --- /dev/null +++ b/stable/heapster/templates/service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "service.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "fullname" . }} + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + selector: + app: {{ template "fullname" . }} diff --git a/stable/heapster/values.yaml b/stable/heapster/values.yaml new file mode 100644 index 0000000000..2cef479eeb --- /dev/null +++ b/stable/heapster/values.yaml @@ -0,0 +1,61 @@ +## Default values for heapster. +## +replicaCount: 1 +image: + repository: gcr.io/google_containers/heapster + tag: v1.3.0 + pullPolicy: IfNotPresent +service: + type: ClusterIP + externalPort: 8082 + internalPort: 8082 + ## This allows an overide of the heapster service name + ## Default: {{ template "fullname" . }} + # nameOverride: +resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + +## Heapster command and arguments +## Default source=kubernetes.summary_api:'' +## ref: https://github.com/kubernetes/heapster/blob/master/docs/source-configuration.md +## +## By default sink not set +## ref: https://github.com/kubernetes/heapster/blob/master/docs/sink-configuration.md +## +command: +- "/heapster" +- "--source=kubernetes.summary_api:''" + +## Resizer scales resources linearly with the number of nodes in the cluster +## Resizer is enabled by default +## +resizer: + enabled: true + image: + repository: gcr.io/google_containers/addon-resizer + tag: 1.7 + pullPolicy: IfNotPresent + resources: + limits: + cpu: 50m + memory: 90Mi + requests: + cpu: 50m + memory: 90Mi + + ## Flags used for /pod_nanny command + ## container and deployment flags already determined chart name + ## ref: https://github.com/kubernetes/contrib/blob/master/addon-resizer/README.md + ## + flags: + - "--cpu=150m" + - "--extra-cpu=10m" + - "--memory=200Mi" + - "--extra-memory=6Mi" + - "--threshold=5" + - "--poll-period=300000"