From d735564a6f7d8d1b50864e9ed20a2f2210ab089b Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 09:30:32 +0200 Subject: [PATCH 1/7] curl -sL -o kubeless.yml https://github.com/kubeless/kubeless/releases/download/0.0.18/kubeless-0.0.18.yaml --- addon-kubeless/kubeless.yml | 158 ++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 addon-kubeless/kubeless.yml diff --git a/addon-kubeless/kubeless.yml b/addon-kubeless/kubeless.yml new file mode 100644 index 00000000..d7633d0b --- /dev/null +++ b/addon-kubeless/kubeless.yml @@ -0,0 +1,158 @@ +--- +apiVersion: extensions/v1beta1 +description: Kubernetes Native Serverless Framework +kind: ThirdPartyResource +metadata: + name: function.k8s.io +versions: +- name: v1 +--- +apiVersion: v1 +kind: Service +metadata: + name: zookeeper + namespace: kubeless +spec: + ports: + - name: client + port: 2181 + selector: + kubeless: zookeeper +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-acct + namespace: kubeless +--- +apiVersion: v1 +kind: Service +metadata: + name: broker + namespace: kubeless +spec: + clusterIP: None + ports: + - port: 9092 + selector: + kubeless: kafka +--- +apiVersion: v1 +kind: Service +metadata: + name: kafka + namespace: kubeless +spec: + ports: + - port: 9092 + selector: + kubeless: kafka +--- +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: zoo + namespace: kubeless +spec: + serviceName: zoo + template: + metadata: + labels: + kubeless: zookeeper + spec: + containers: + - env: + - name: ZOO_SERVERS + value: server.1=zoo-0.zoo:2888:3888:participant + image: bitnami/zookeeper@sha256:2244fba9d7c35df85f078ffdbf77ec9f9b44dad40752f15dd619a85d70aec22d + imagePullPolicy: IfNotPresent + name: zookeeper + ports: + - containerPort: 2181 + name: client + - containerPort: 2888 + name: peer + - containerPort: 3888 + name: leader-election + volumeMounts: + - mountPath: /bitnami/zookeeper + name: zookeeper + volumes: + - name: zookeeper +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + labels: + kubeless: controller + name: kubeless-controller + namespace: kubeless +spec: + selector: + matchLabels: + kubeless: controller + template: + metadata: + labels: + kubeless: controller + spec: + containers: + - image: bitnami/kubeless-controller@sha256:719e032c351d1db448b941060db0d5a2a77da62c6e9f38d509d372c22f3021e8 + imagePullPolicy: IfNotPresent + name: kubeless-controller + serviceAccountName: controller-acct +--- +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: kafka + namespace: kubeless +spec: + serviceName: broker + template: + metadata: + labels: + kubeless: kafka + spec: + containers: + - env: + - name: KAFKA_ADVERTISED_HOST_NAME + value: broker.kubeless + - name: KAFKA_ADVERTISED_PORT + value: "9092" + - name: KAFKA_PORT + value: "9092" + - name: KAFKA_ZOOKEEPER_CONNECT + value: zookeeper.kubeless:2181 + image: bitnami/kafka@sha256:0b7c8b790546ddb9dcd7e8ff4d50f030fc496176238f36789537620bb13fb54c + imagePullPolicy: IfNotPresent + name: broker + ports: + - containerPort: 9092 + volumeMounts: + - mountPath: /opt/bitnami/kafka/data + name: datadir + volumeClaimTemplates: + - metadata: + name: datadir + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: Service +metadata: + name: zoo + namespace: kubeless +spec: + clusterIP: None + ports: + - name: peer + port: 9092 + - name: leader-election + port: 3888 + selector: + kubeless: zookeeper From c30479b0da54b77b31e8e7d23654b7b356541236 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 09:55:17 +0200 Subject: [PATCH 2/7] Removes kafka cluster from kubeless release manifest --- addon-kubeless/kubeless.yml | 122 ------------------------------------ 1 file changed, 122 deletions(-) diff --git a/addon-kubeless/kubeless.yml b/addon-kubeless/kubeless.yml index d7633d0b..b05d405f 100644 --- a/addon-kubeless/kubeless.yml +++ b/addon-kubeless/kubeless.yml @@ -8,78 +8,11 @@ versions: - name: v1 --- apiVersion: v1 -kind: Service -metadata: - name: zookeeper - namespace: kubeless -spec: - ports: - - name: client - port: 2181 - selector: - kubeless: zookeeper ---- -apiVersion: v1 kind: ServiceAccount metadata: name: controller-acct namespace: kubeless --- -apiVersion: v1 -kind: Service -metadata: - name: broker - namespace: kubeless -spec: - clusterIP: None - ports: - - port: 9092 - selector: - kubeless: kafka ---- -apiVersion: v1 -kind: Service -metadata: - name: kafka - namespace: kubeless -spec: - ports: - - port: 9092 - selector: - kubeless: kafka ---- -apiVersion: apps/v1beta1 -kind: StatefulSet -metadata: - name: zoo - namespace: kubeless -spec: - serviceName: zoo - template: - metadata: - labels: - kubeless: zookeeper - spec: - containers: - - env: - - name: ZOO_SERVERS - value: server.1=zoo-0.zoo:2888:3888:participant - image: bitnami/zookeeper@sha256:2244fba9d7c35df85f078ffdbf77ec9f9b44dad40752f15dd619a85d70aec22d - imagePullPolicy: IfNotPresent - name: zookeeper - ports: - - containerPort: 2181 - name: client - - containerPort: 2888 - name: peer - - containerPort: 3888 - name: leader-election - volumeMounts: - - mountPath: /bitnami/zookeeper - name: zookeeper - volumes: - - name: zookeeper ---- apiVersion: apps/v1beta1 kind: Deployment metadata: @@ -101,58 +34,3 @@ spec: imagePullPolicy: IfNotPresent name: kubeless-controller serviceAccountName: controller-acct ---- -apiVersion: apps/v1beta1 -kind: StatefulSet -metadata: - name: kafka - namespace: kubeless -spec: - serviceName: broker - template: - metadata: - labels: - kubeless: kafka - spec: - containers: - - env: - - name: KAFKA_ADVERTISED_HOST_NAME - value: broker.kubeless - - name: KAFKA_ADVERTISED_PORT - value: "9092" - - name: KAFKA_PORT - value: "9092" - - name: KAFKA_ZOOKEEPER_CONNECT - value: zookeeper.kubeless:2181 - image: bitnami/kafka@sha256:0b7c8b790546ddb9dcd7e8ff4d50f030fc496176238f36789537620bb13fb54c - imagePullPolicy: IfNotPresent - name: broker - ports: - - containerPort: 9092 - volumeMounts: - - mountPath: /opt/bitnami/kafka/data - name: datadir - volumeClaimTemplates: - - metadata: - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: zoo - namespace: kubeless -spec: - clusterIP: None - ports: - - name: peer - port: 9092 - - name: leader-election - port: 3888 - selector: - kubeless: zookeeper From c1f5575ccd2c34f332f354a9b7aea65853f426b5 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 09:57:58 +0200 Subject: [PATCH 3/7] Forwards from the service name used in the python runtime to a service that produces fully qualified broker names. Based on https://github.com/kubeless/kubeless/issues/196#issuecomment-313843995.a --- addon-kubeless/bootstrap-service.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 addon-kubeless/bootstrap-service.yml diff --git a/addon-kubeless/bootstrap-service.yml b/addon-kubeless/bootstrap-service.yml new file mode 100644 index 00000000..1d9a9b1d --- /dev/null +++ b/addon-kubeless/bootstrap-service.yml @@ -0,0 +1,11 @@ +# Allows bootstrap_servers = kafka.kubeless:9092 while kafka is in a different namespace +kind: Service +apiVersion: v1 +metadata: + name: kafka + namespace: kubeless +spec: + type: ExternalName + externalName: bootstrap.kafka.svc.cluster.local + ports: + - port: 9092 From 13d1c0bd2689881aeb02dd2344f680ee9b0e9359 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 10:00:14 +0200 Subject: [PATCH 4/7] Creates namespace using the convention in this repo --- addon-kubeless/00namespace.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 addon-kubeless/00namespace.yml diff --git a/addon-kubeless/00namespace.yml b/addon-kubeless/00namespace.yml new file mode 100644 index 00000000..ceb8374e --- /dev/null +++ b/addon-kubeless/00namespace.yml @@ -0,0 +1,5 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: kubeless From f7a924a562cdcfd286ee92fbed6896c798a29977 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 9 Aug 2017 20:26:31 +0200 Subject: [PATCH 5/7] Upgrades to the controller image from 0.0.19 --- addon-kubeless/kubeless.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon-kubeless/kubeless.yml b/addon-kubeless/kubeless.yml index b05d405f..4a231b21 100644 --- a/addon-kubeless/kubeless.yml +++ b/addon-kubeless/kubeless.yml @@ -30,7 +30,7 @@ spec: kubeless: controller spec: containers: - - image: bitnami/kubeless-controller@sha256:719e032c351d1db448b941060db0d5a2a77da62c6e9f38d509d372c22f3021e8 + - image: bitnami/kubeless-controller@sha256:0bc030762e8694d268be75bed0d52ea6ecb84b03da85ffcbd55da4817c047052 imagePullPolicy: IfNotPresent name: kubeless-controller serviceAccountName: controller-acct From 8f73c825ad1c5e62d2c74e5c0a2279f4742588c5 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 9 Aug 2017 21:09:30 +0200 Subject: [PATCH 6/7] Adds a test function that can be created using kubectl based on https://github.com/kubeless/kubeless/pull/232 --- addon-kubeless/test-function-hello-pubsub.yml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 addon-kubeless/test-function-hello-pubsub.yml diff --git a/addon-kubeless/test-function-hello-pubsub.yml b/addon-kubeless/test-function-hello-pubsub.yml new file mode 100644 index 00000000..a8afbd49 --- /dev/null +++ b/addon-kubeless/test-function-hello-pubsub.yml @@ -0,0 +1,29 @@ +# This is basically https://github.com/kubeless/kubeless/blob/master/examples/nodejs/helloevent.js +# created through: +# ./kubeless function deploy helloevent --from-file helloevent.js --handler hello.handler --runtime nodejs8 --trigger-topic test-basic-with-kafkacat + +# Uses the topic from ../test/basic-with-kafkacat.yml, +# which means it gets triggered every 10 seconds by the publisher there + +# See output: +# kubectl -n default logs -lfunction=kubeless-test-function +# Check for validation errors after create: +# kubectl -n kubeless logs -lkubeless=controller --since=60s + +--- +apiVersion: k8s.io/v1 +kind: Function +metadata: + name: kubeless-test-function + namespace: default +spec: + handler: hello.handler + runtime: nodejs8 + type: PubSub + topic: test-basic-with-kafkacat + function: |- + module.exports = { + handler: (context) => { + console.log('Serverless at', new Date().toUTCString(), 'with message:', context); + } + }; From fe3a6b3a0943366168deda25abce21cdf5234385 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 16 Aug 2017 13:22:30 +0200 Subject: [PATCH 7/7] Testing kubeless/issues/196 sebgoa's advice, but note that this is a different namespace --- 50kafka.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/50kafka.yml b/50kafka.yml index c564ffe3..9b2ca113 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -10,6 +10,7 @@ spec: metadata: labels: app: kafka + kubeless: kafka annotations: spec: terminationGracePeriodSeconds: 30