diff --git a/stable/sumokube/Chart.yaml b/stable/sumokube/Chart.yaml new file mode 100755 index 0000000000..8a61b0f2dd --- /dev/null +++ b/stable/sumokube/Chart.yaml @@ -0,0 +1,13 @@ +name: sumokube +version: 0.1.0 +description: Sumologic Log Collector +keywords: +- monitoring +- logging +sources: +- https://github.com/SumoLogic/sumologic-collector-docker +maintainers: +- name: Jason DuMars + email: jdumars+github@gmail.com +- name: Sean Knox + email: knoxville+github@gmail.com diff --git a/stable/sumokube/README.md b/stable/sumokube/README.md new file mode 100644 index 0000000000..66cf0b7f51 --- /dev/null +++ b/stable/sumokube/README.md @@ -0,0 +1,73 @@ +#SumoKube ![sumokube](/stable/sumokube/sumokube.jpg) + +[Sumo Logic](https://www.sumologic.com/) is a hosted logging platform. + +## Introduction + +This chart adds the Sumo Logic Collector to all nodes in your cluster via a DaemonSet. + +## Prerequisites + +- Kubernetes 1.2+ with Beta APIs enabled + +## Installing the Chart + +To install the chart with the release name `my-release`, retrieve your Sumo Logic Access ID and key from using the instructions found at [Sumo Logic Access Keys](https://help.sumologic.com/Manage/Security/Access_Keys) and run: + +```bash +$ helm install --name my-release \ + --set sumologic.accessId=YOUR-ID-HERE,sumologic.accessKey=YOUR-KEY-HERE stable/sumokube +``` + +After a few minutes, you should see logs available in Sumo Logic. + +> **Tip**: List all releases using `helm list` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Configuration + +The following tables lists the configurable parameters of the Sumokube chart and their default values. + +| Parameter | Description | Default | +|-----------------------------|------------------------------------|-------------------------------------------| +| `sumologic.accessId` | Your Sumo Logic access ID key | `Nil` You must provide your own id | +| `sumologic.accessKey` | Your Sumo Logic access key | `Nil` You must provide your own key | +| `sumologic.collectorName` | Sumo Logic collector name | `kubernetes-collector` | +| `sumologic.categoryName` | Source category name | `kubernetes` | +| `sumologic.multilineProcessingEnabled` | Enable if working with multi-line messages | `false` | +| `sumologic.automaticDateParsing` | Determines if timestamp information is parsed or not | `true` | +| `sumologic.forceTimeZone` | Force the Source to use a specific time zone | `false` | +| `sumologic.pathExpression` | Path to your container logs | `/var/log/containers/*.log` | +| `image.name` | The image repository and name to pull from | `sumologic/collector` | +| `image.tag` | The image tag to pull | `latest` | +| `imagePullPolicy` | Image pull policy | `IfNotPresent` | +| `resources.requests.cpu` | CPU resource requests | 100m | +| `resources.limits.cpu` | CPU resource limits | 256m | +| `resources.requests.memory` | Memory resource requests | 128Mi | +| `resources.limits.memory` | Memory resource limits | 256Mi | + + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, + +```bash +$ helm install --name my-release \ + --set sumologic.accessId=YOUR-ID-HERE,sumologic.accessKey=YOUR-KEY-HERE,sumologic.categoryName=my-source-category-name \ + stable/sumokube +``` + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/sumokube +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) diff --git a/stable/sumokube/sumokube.jpg b/stable/sumokube/sumokube.jpg new file mode 100644 index 0000000000..f9c495bf72 Binary files /dev/null and b/stable/sumokube/sumokube.jpg differ diff --git a/stable/sumokube/templates/NOTES.txt b/stable/sumokube/templates/NOTES.txt new file mode 100644 index 0000000000..997bdcfe17 --- /dev/null +++ b/stable/sumokube/templates/NOTES.txt @@ -0,0 +1,23 @@ +{{- if and .Values.sumologic.accessId .Values.sumologic.accessKey -}} +Sumo Logic agents are spinning up on each node in your cluster. After a few +minutes, you should see logs available in Sumo Logic. + +No further action should be required. + +{{- else -}} +############################################################################## +#### ERROR: You did not set a sumologic.accessId or sumologic.accessKey #### +############################################################################## + +This deployment will be incomplete until you provide your API access ID and key +from Sumo Logic. + +Retrieve your Sumo Logic Access ID and key from using the instructions found at +[Sumo Logic Access Keys](https://help.sumologic.com/Manage/Security/Access_Keys) + +Then run: + + helm upgrade {{ .Release.Name }} \ + --set sumologic.accessId=YOUR-ID-HERE,sumologic.accessKey=YOUR-KEY-HERE stable/sumokube + +{{- end }} diff --git a/stable/sumokube/templates/_helpers.tpl b/stable/sumokube/templates/_helpers.tpl new file mode 100644 index 0000000000..234480de71 --- /dev/null +++ b/stable/sumokube/templates/_helpers.tpl @@ -0,0 +1,16 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 24 -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 24 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 24 -}} +{{- end -}} diff --git a/stable/sumokube/templates/config.yaml b/stable/sumokube/templates/config.yaml new file mode 100644 index 0000000000..b10ffa21ed --- /dev/null +++ b/stable/sumokube/templates/config.yaml @@ -0,0 +1,29 @@ +apiVersion: v1 +kind: ConfigMap +metadata: +metadata: + name: "{{ template "fullname" . }}-config-{{.Release.Time.Seconds }}" + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: + "helm.sh/created": {{.Release.Time.Seconds | quote }} + "helm.sh/hook": pre-install,pre-upgrade +data: + sumo-sources.json: |- + { + "api.version": "v1", + "sources": [ + { + "sourceType" : "LocalFile", + "name": "kubernetes-localfile", + "pathExpression": {{ default "/var/log/containers/*.log" .Values.sumologic.pathExpression | quote }}, + "multilineProcessingEnabled": {{ default false .Values.sumologic.multilineProcessingEnabled }}, + "automaticDateParsing": {{ default true .Values.sumologic.automaticDateParsing }}, + "category": {{ default "kubernetes" .Values.sumologic.categoryName | quote }}, + "forceTimeZone": {{ default false .Values.sumologic.forceTimeZone }} + } + ] + } diff --git a/stable/sumokube/templates/daemonset.yaml b/stable/sumokube/templates/daemonset.yaml new file mode 100644 index 0000000000..8b64fc4a9d --- /dev/null +++ b/stable/sumokube/templates/daemonset.yaml @@ -0,0 +1,64 @@ +{{- if and .Values.sumologic.accessId .Values.sumologic.accessKey -}} +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: {{ template "fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" +spec: + template: + metadata: + name: {{ template "fullname" . }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + spec: + serviceAccount: {{ template "fullname" . }} + containers: + - name: {{ template "fullname" . }} + image: "{{.Values.image.name}}:{{.Values.image.tag}}" + imagePullPolicy: {{.Values.image.pullPolicy}} + resources: +{{ toYaml .Values.resources | indent 12 }} + securityContext: + privileged: true + volumeMounts: + - name: varlog + mountPath: /var/log + - name: varlibdockercontainers + mountPath: /var/lib/docker/containers + readOnly: true + - name: sumo-sources + mountPath: /etc/sumologic + readOnly: true + env: + - name: SUMO_ACCESS_ID + valueFrom: + secretKeyRef: + name: "{{ template "fullname" . }}-secrets-{{.Release.Time.Seconds }}" + key: access-id + - name: SUMO_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "{{ template "fullname" . }}-secrets-{{.Release.Time.Seconds }}" + key: access-key + - name: SUMO_COLLECTOR_NAME + valueFrom: + secretKeyRef: + name: "{{ template "fullname" . }}-secrets-{{.Release.Time.Seconds }}" + key: collector-name + - name: SUMO_SOURCES_JSON + value: "/etc/sumologic/sumo-sources.json" + volumes: + - name: varlog + hostPath: + path: /var/log + - name: varlibdockercontainers + hostPath: + path: /var/lib/docker/containers + - name: sumo-sources + configMap: + name: "{{ template "fullname" . }}-config-{{.Release.Time.Seconds }}" +{{ end }} diff --git a/stable/sumokube/templates/secrets.yaml b/stable/sumokube/templates/secrets.yaml new file mode 100644 index 0000000000..96af51c05b --- /dev/null +++ b/stable/sumokube/templates/secrets.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Secret +metadata: + name: "{{ template "fullname" . }}-secrets-{{.Release.Time.Seconds }}" + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: + "helm.sh/created": {{.Release.Time.Seconds | quote }} + "helm.sh/hook": pre-install,pre-upgrade +type: Opaque +data: + access-id: {{ default "MISSING" .Values.sumologic.accessId | b64enc | quote }} + access-key: {{ default "MISSING" .Values.sumologic.accessKey | b64enc | quote }} + collector-name: {{ default "kubernetes" .Values.sumologic.collectorName | b64enc | quote }} diff --git a/stable/sumokube/templates/serviceaccount.yaml b/stable/sumokube/templates/serviceaccount.yaml new file mode 100644 index 0000000000..f6261f3c7d --- /dev/null +++ b/stable/sumokube/templates/serviceaccount.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "fullname" . }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" diff --git a/stable/sumokube/values.yaml b/stable/sumokube/values.yaml new file mode 100644 index 0000000000..d48c3540d0 --- /dev/null +++ b/stable/sumokube/values.yaml @@ -0,0 +1,31 @@ +# Default values for sumokube. +image: + name: sumologic/collector + tag: latest + pullPolicy: IfNotPresent + +sumologic: + ## You'll need to set this to your Sumologic API access key and access ID + ## before the agent will run. + ## ref: https://help.sumologic.com/Manage/Security/Access_Keys + ## + # accessId: + # accessKey: + + collectorName: "kubernetes-collector" + + ## A full list of configurable JSON source options can be found at: + ## https://help.sumologic.com/Send_Data/Sources/03Use_JSON_to_Configure_Sources + # categoryName: "kubernetes" + # multilineProcessingEnabled: + # automaticDateParsing: + # forceTimeZone: + # pathExpression: + +resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 256m + memory: 256Mi