diff --git a/stable/g2/.helmignore b/stable/g2/.helmignore new file mode 100644 index 000000000000..c13e3c8fbb2f --- /dev/null +++ b/stable/g2/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj \ No newline at end of file diff --git a/stable/g2/Chart.yaml b/stable/g2/Chart.yaml new file mode 100755 index 000000000000..91d5650f634a --- /dev/null +++ b/stable/g2/Chart.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +description: G2 by AppsCode - Gearman in Golang +name: g2 +version: 0.1.0 +appVersion: 0.5.0 +home: https://github.com/appscode/g2 +icon: https://cdn.appscode.com/images/icon/g2.png +sources: + - https://github.com/appscode/g2 +maintainers: + - name: appscode + email: support@appscode.com diff --git a/stable/g2/README.md b/stable/g2/README.md new file mode 100644 index 000000000000..d92069607e6a --- /dev/null +++ b/stable/g2/README.md @@ -0,0 +1,97 @@ +# G2 +[G2 by AppsCode](https://github.com/appscode/g2) is a modern implementation of Gearman server in GO. +## TL;DR; + +```bash +$ helm install stable/g2 +``` + +## Introduction + +This chart bootstraps a [Gearman server](https://github.com/appscode/g2) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Prerequisites + +- Kubernetes 1.3+ + +## Installing the Chart +To install the chart with the release name `my-release`: +```bash +$ helm install --name my-release stable/g2 +``` +The command deploys G2 Gearman server on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: List all releases using `helm list` + +## Uninstalling the Chart + +To uninstall/delete the `my-release`: + +```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 Stash chart and their default values. + + +| Parameter | Description | Default | +| ------------------------ | ----------------------------------------------------------------- | ------------------- | +| `replicaCount` | Number of stash operator replicas to create | `1` | +| `g2.image` | G2 container image | `appscode/gearmand` | +| `g2.tag` | G2 container image tag | `0.5.0` | +| `g2.pullPolicy` | G2 container image pull policy | `IfNotPresent` | +| `g2.serviceType` | G2 service type | `ClusterIP` | +| `rbac.install` | install required rbac service account, roles and rolebindings | `false` | +| `rbac.apiVersion` | rbac api version `v1alpha1|v1beta1` | `v1beta1` | + + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example: + +```bash +$ helm install --name my-release --set image.tag=v0.2.1 stable/g2 +``` + +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 --values values.yaml stable/g2 +``` + +## RBAC +By default the chart will not install the recommended RBAC roles and rolebindings. + +You need to have the following parameter on the api server. See the following document for how to enable [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/) + +``` +--authorization-mode=RBAC +``` + +To determine if your cluster supports RBAC, run the the following command: + +```console +$ kubectl api-versions | grep rbac +``` + +If the output contains "alpha" and/or "beta", you can may install the chart with RBAC enabled (see below). + +### Enable RBAC role/rolebinding creation + +To enable the creation of RBAC resources (On clusters with RBAC). Do the following: + +```console +$ helm install --name my-release stable/g2 --set rbac.install=true +``` + +### Changing RBAC manifest apiVersion + +By default the RBAC resources are generated with the "v1beta1" apiVersion. To use "v1alpha1" do the following: + +```console +$ helm install --name my-release stable/g2 --set rbac.install=true,rbac.apiVersion=v1alpha1 +``` diff --git a/stable/g2/templates/NOTES.txt b/stable/g2/templates/NOTES.txt new file mode 100644 index 000000000000..14ba91612be4 --- /dev/null +++ b/stable/g2/templates/NOTES.txt @@ -0,0 +1,3 @@ +To verify that G2 has started, run: + + kubectl --namespace={{ .Release.Namespace }} get deployments -l "release={{ .Release.Name }}, app={{ template "name" . }}" diff --git a/stable/g2/templates/_helpers.tpl b/stable/g2/templates/_helpers.tpl new file mode 100644 index 000000000000..f0d83d2edba6 --- /dev/null +++ b/stable/g2/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 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 -}} diff --git a/stable/g2/templates/cluster-role-binding.yaml b/stable/g2/templates/cluster-role-binding.yaml new file mode 100644 index 000000000000..0ef44d37c418 --- /dev/null +++ b/stable/g2/templates/cluster-role-binding.yaml @@ -0,0 +1,20 @@ +{{ if .Values.rbac.install }} +{{- $serviceName := include "fullname" . -}} +apiVersion: rbac.authorization.k8s.io/{{ required "A valid .Values.rbac.apiVersion entry required!" .Values.rbac.apiVersion }} +kind: ClusterRoleBinding +metadata: + name: {{ $serviceName }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: "{{ template "fullname" . }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +subjects: +- kind: ServiceAccount + name: {{ $serviceName }} + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ $serviceName }} +{{ end }} diff --git a/stable/g2/templates/cluster-role.yaml b/stable/g2/templates/cluster-role.yaml new file mode 100644 index 000000000000..cd16b1f459a0 --- /dev/null +++ b/stable/g2/templates/cluster-role.yaml @@ -0,0 +1,26 @@ +{{ if .Values.rbac.install }} +{{- $serviceName := include "fullname" . -}} +apiVersion: rbac.authorization.k8s.io/{{ required "A valid .Values.rbac.apiVersion entry required!" .Values.rbac.apiVersion }} +kind: ClusterRole +metadata: + name: {{ $serviceName }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: "{{ template "fullname" . }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +rules: +- apiGroups: + - extensions + resources: + - deployments + verbs: ["get", "create", "update"] +- apiGroups: [""] + resources: + - services + verbs: ["create", "update"] +- apiGroups: [""] + resources: + - pods + verbs: ["list", "create", "update", "delete"] +{{ end }} diff --git a/stable/g2/templates/deployment.yaml b/stable/g2/templates/deployment.yaml new file mode 100644 index 000000000000..794244523bb5 --- /dev/null +++ b/stable/g2/templates/deployment.yaml @@ -0,0 +1,41 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: "{{ template "name" . }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +spec: + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app: "{{ template "name" . }}" + release: "{{ .Release.Name }}" + spec: +{{- if .Values.rbac.install }} + serviceAccountName: {{ template "fullname" . }} +{{- end }} + containers: + - args: + - run + - --storage-dir=/var/db + - --v=5 + image: '{{ .Values.g2.image }}:{{ .Values.g2.tag }}' + imagePullPolicy: '{{ .Values.g2.pullPolicy }}' + name: gearman-server + ports: + - containerPort: 4730 + name: http + protocol: TCP + - containerPort: 3000 + name: restapi + protocol: TCP + volumeMounts: + - mountPath: /var/db + name: data-volume + volumes: + - emptyDir: {} + name: data-volume diff --git a/stable/g2/templates/service-account.yaml b/stable/g2/templates/service-account.yaml new file mode 100644 index 000000000000..8ff9087648f2 --- /dev/null +++ b/stable/g2/templates/service-account.yaml @@ -0,0 +1,11 @@ +{{ if .Values.rbac.install }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: "{{ template "fullname" . }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +{{ end }} diff --git a/stable/g2/templates/service.yaml b/stable/g2/templates/service.yaml new file mode 100644 index 000000000000..30792873949d --- /dev/null +++ b/stable/g2/templates/service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "fullname" . }} + labels: + app: "{{ template "name" . }}" + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + ports: + - name: http + port: 4730 + protocol: TCP + targetPort: http + - name: restapi + port: 3000 + protocol: TCP + targetPort: restapi + selector: + app: "{{ template "name" . }}" + release: "{{ .Release.Name }}" + type: '{{ .Values.g2.serviceType }}' diff --git a/stable/g2/values.yaml b/stable/g2/values.yaml new file mode 100644 index 000000000000..8bb2adf8cb47 --- /dev/null +++ b/stable/g2/values.yaml @@ -0,0 +1,9 @@ +replicaCount: 1 +g2: + image: appscode/gearmand + pullPolicy: IfNotPresent + tag: 0.5.0 + serviceType: ClusterIP +rbac: + install: false + apiVersion: v1beta1