From d01e14bf1351f969596c9cee3f3218ced4d2682c Mon Sep 17 00:00:00 2001 From: Alex Alvarez Date: Thu, 7 Jun 2018 11:38:24 -0400 Subject: [PATCH] [incubator/kubeless] Adding Kafka Trigger (#5961) * Initial helm configuration with kafka trigger * Fixing formatting * Incrementing version * Moving kafka controller to it's own cluster role * Updating README for clarity * Adding role binding --- incubator/kubeless/Chart.yaml | 2 +- incubator/kubeless/README.md | 65 +++++++++++-------- ...kafka-controller-cluster-role-binding.yaml | 12 ++++ .../kafka-controller-cluster-role.yaml | 26 ++++++++ .../kafka-controller-deployment.yaml | 26 ++++++++ .../templates/kafka-trigger-type-crd.yaml | 15 +++++ incubator/kubeless/values.yaml | 10 +++ 7 files changed, 128 insertions(+), 28 deletions(-) create mode 100644 incubator/kubeless/templates/kafka-controller-cluster-role-binding.yaml create mode 100644 incubator/kubeless/templates/kafka-controller-cluster-role.yaml create mode 100644 incubator/kubeless/templates/kafka-controller-deployment.yaml create mode 100644 incubator/kubeless/templates/kafka-trigger-type-crd.yaml diff --git a/incubator/kubeless/Chart.yaml b/incubator/kubeless/Chart.yaml index 69dd880117..cf24fde669 100644 --- a/incubator/kubeless/Chart.yaml +++ b/incubator/kubeless/Chart.yaml @@ -1,5 +1,5 @@ name: kubeless -version: 1.0.3 +version: 1.0.4 appVersion: v1.0.0-alpha.3 description: Kubeless is a Kubernetes-native serverless framework. It runs on top of your Kubernetes cluster and allows you to deploy small unit of code without having to build container images. icon: https://cloud.githubusercontent.com/assets/4056725/25480209/1d5bf83c-2b48-11e7-8db8-bcd650f31297.png diff --git a/incubator/kubeless/README.md b/incubator/kubeless/README.md index d0cc60a877..2319fc70bb 100644 --- a/incubator/kubeless/README.md +++ b/incubator/kubeless/README.md @@ -43,37 +43,48 @@ $ helm delete my-release The command removes all the Kubernetes components associated with the chart and deletes the release. +## Kafka Trigger + +Kubeless supports triggering functions via Kafka events. More info here: https://kubeless.io/docs/use-existing-kafka/. +An existing Kafka cluster needs to be accessible to kubeless -- if you like, you may look into setting Kafka up via the [Kafka chart](https://github.com/kubernetes/charts/tree/master/incubator/kafka). Once Kafka is running, +to enable the Kafka trigger you must congifure the following values: `rbac.create: true`, `kafkaTrigger.enabled: true`, `kafkaTrigger.env.kafkaBrokers: `. + ## Configuration The following table lists the configurable parameters of the Kubeless chart and their default values. -| Parameter | Description | Default | -|------------------------------------------|--------------------------------------------|---------------------------------------| -| `config.builderImage` | Function builder image | `kubeless/function-image-builder` | -| `config.builderImagePullSecret` | Secret to pull builder image | "" | -| `config.builderImage` | Provision image | `kubeless/unzip` | -| `config.builderImagePullSecret` | Secret to pull provision image | "" | -| `config.deploymentTemplate` | Deployment template for functions | `{}` | -| `config.enableBuildStep` | Enable builder functionality | `false` | -| `config.functionRegistryTLSVerify` | Enable TLS verification for image registry | `{}` | -| `config.runtimeImages` | Runtimes available | python, nodejs, ruby, php and go | -| `controller.deployment.image.repository` | Controller image | `bitnami/kubeless-controller-manager` | -| `controller.deployment.image.pullPolicy` | Controller image pull policy | `IfNotPresent` | -| `controller.deployment.replicaCount` | Number of replicas | `1` | -| `ui.enabled` | Kubeless UI component | `false` | -| `ui.deployment.ui.image.repository` | Kubeless UI image | `bitnami/kubeless-ui` | -| `ui.deployment.ui.image.pullPolicy` | Kubeless UI image pull policy | `IfNotPresent` | -| `ui.deployment.proxy.image.repository` | Proxy image | `kelseyhightower/kubectl` | -| `ui.deployment.proxy.image.pullPolicy` | Proxy image pull policy | `IfNotPresent` | -| `ui.deployment.replicaCount` | Number of replicas | `1` | -| `ui.service.name` | Service name | `ui-port` | -| `ui.service.type` | Kubernetes service name | `NodePort` | -| `ui.service.externalPort` | Service external port | `3000` | -| `ui.ingress.enabled` | Kubeless UI ingress switch | `false` | -| `ui.ingress.annotations` | Kubeless UI ingress annotations | `{}` | -| `ui.ingress.path` | Kubeless UI ingress path | `{}` | -| `ui.ingress.hosts` | Kubeless UI ingress hosts | `[chart-example.local]` | -| `ui.ingress.tls` | Kubeless UI ingress TLS | `[]` | +| Parameter | Description | Default | +|------------------------------------------------|--------------------------------------------|---------------------------------------| +| `config.builderImage` | Function builder image | `kubeless/function-image-builder` | +| `config.builderImagePullSecret` | Secret to pull builder image | "" | +| `config.builderImage` | Provision image | `kubeless/unzip` | +| `config.builderImagePullSecret` | Secret to pull provision image | "" | +| `config.deploymentTemplate` | Deployment template for functions | `{}` | +| `config.enableBuildStep` | Enable builder functionality | `false` | +| `config.functionRegistryTLSVerify` | Enable TLS verification for image registry | `{}` | +| `config.runtimeImages` | Runtimes available | python, nodejs, ruby, php and go | +| `controller.deployment.image.repository` | Controller image | `bitnami/kubeless-controller-manager` | +| `controller.deployment.image.pullPolicy` | Controller image pull policy | `IfNotPresent` | +| `controller.deployment.replicaCount` | Number of replicas | `1` | +| `ui.enabled` | Kubeless UI component | `false` | +| `ui.deployment.ui.image.repository` | Kubeless UI image | `bitnami/kubeless-ui` | +| `ui.deployment.ui.image.pullPolicy` | Kubeless UI image pull policy | `IfNotPresent` | +| `ui.deployment.proxy.image.repository` | Proxy image | `kelseyhightower/kubectl` | +| `ui.deployment.proxy.image.pullPolicy` | Proxy image pull policy | `IfNotPresent` | +| `ui.deployment.replicaCount` | Number of replicas | `1` | +| `ui.service.name` | Service name | `ui-port` | +| `ui.service.type` | Kubernetes service name | `NodePort` | +| `ui.service.externalPort` | Service external port | `3000` | +| `ui.ingress.enabled` | Kubeless UI ingress switch | `false` | +| `ui.ingress.annotations` | Kubeless UI ingress annotations | `{}` | +| `ui.ingress.path` | Kubeless UI ingress path | `{}` | +| `ui.ingress.hosts` | Kubeless UI ingress hosts | `[chart-example.local]` | +| `ui.ingress.tls` | Kubeless UI ingress TLS | `[]` | +| `kafkaTrigger.enabled` | Kubeless Kafka Trigger | `false` | +| `kafkaTrigger.env.kafkaBrokers` | Kafka Brokers Environment Variable | `localhost:9092` | +| `kafkaTrigger.deployment.ui.image.repository` | Kubeless Kafka Trigger image | `bitnami/kubeless-ui` | +| `kafkaTrigger.deployment.ui.image.pullPolicy` | Kubeless Kafka Trigger image pull policy | `IfNotPresent` | +| `kafkaTrigger.deployment.ui.image.tag` | Kubeless Kafka Trigger image tag | `v1.0.0-alpha.3` | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, diff --git a/incubator/kubeless/templates/kafka-controller-cluster-role-binding.yaml b/incubator/kubeless/templates/kafka-controller-cluster-role-binding.yaml new file mode 100644 index 0000000000..f0608be845 --- /dev/null +++ b/incubator/kubeless/templates/kafka-controller-cluster-role-binding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: kafka-controller-deployer +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kafka-controller-deployer +subjects: +- kind: ServiceAccount + name: controller-acct + namespace: {{ .Release.Namespace }} \ No newline at end of file diff --git a/incubator/kubeless/templates/kafka-controller-cluster-role.yaml b/incubator/kubeless/templates/kafka-controller-cluster-role.yaml new file mode 100644 index 0000000000..130ce74462 --- /dev/null +++ b/incubator/kubeless/templates/kafka-controller-cluster-role.yaml @@ -0,0 +1,26 @@ +{{- if .Values.kafkaTrigger.enabled }} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + name: kafka-controller-deployer +rules: +- apiGroups: + - "" + resources: + - services + - configmaps + verbs: + - get + - list +- apiGroups: + - kubeless.io + resources: + - functions + - kafkatriggers + verbs: + - get + - list + - watch + - update + - delete +{{- end }} \ No newline at end of file diff --git a/incubator/kubeless/templates/kafka-controller-deployment.yaml b/incubator/kubeless/templates/kafka-controller-deployment.yaml new file mode 100644 index 0000000000..873a5676d5 --- /dev/null +++ b/incubator/kubeless/templates/kafka-controller-deployment.yaml @@ -0,0 +1,26 @@ +{{- if .Values.kafkaTrigger.enabled }} +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + labels: + kubeless: kafka-trigger-controller + name: kafka-trigger-controller + namespace: {{ .Release.Namespace }} +spec: + selector: + matchLabels: + kubeless: kafka-trigger-controller + template: + metadata: + labels: + kubeless: kafka-trigger-controller + spec: + containers: + - image: "{{ .Values.kafkaTrigger.deployment.image.repository }}:{{ .Values.kafkaTrigger.deployment.image.tag }}" + imagePullPolicy: {{ .Values.kafkaTrigger.deployment.image.pullPolicy }} + name: kafka-trigger-controller + env: + - name: KAFKA_BROKERS + value: {{ .Values.kafkaTrigger.env.kafkaBrokers }} + serviceAccountName: controller-acct +{{- end }} \ No newline at end of file diff --git a/incubator/kubeless/templates/kafka-trigger-type-crd.yaml b/incubator/kubeless/templates/kafka-trigger-type-crd.yaml new file mode 100644 index 0000000000..1bb147e339 --- /dev/null +++ b/incubator/kubeless/templates/kafka-trigger-type-crd.yaml @@ -0,0 +1,15 @@ +{{- if .Values.kafkaTrigger.enabled }} +apiVersion: apiextensions.k8s.io/v1beta1 +description: CRD object for Kafka trigger type +kind: CustomResourceDefinition +metadata: + name: kafkatriggers.kubeless.io +spec: + group: kubeless.io + names: + kind: KafkaTrigger + plural: kafkatriggers + singular: kafkatrigger + scope: Namespaced + version: v1beta1 +{{- end }} \ No newline at end of file diff --git a/incubator/kubeless/values.yaml b/incubator/kubeless/values.yaml index df30e1dbaf..06eaadb5ba 100644 --- a/incubator/kubeless/values.yaml +++ b/incubator/kubeless/values.yaml @@ -185,3 +185,13 @@ ui: # - secretName: chart-example-tls # hosts: # - chart-example.local + +## Kafka Trigger configuration Configuration +kafkaTrigger: + enabled: false + deployment: + image: + repository: bitnami/kafka-trigger-controller + tag: v1.0.0-alpha.3 + pullPolicy: IfNotPresent + kafkaBrokers: localhost:9092