You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by dg...@apache.org on 2018/08/02 14:14:22 UTC

[incubator-openwhisk-deploy-kube] branch master updated: add alarm provider (#265)

This is an automated email from the ASF dual-hosted git repository.

dgrove pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-deploy-kube.git


The following commit(s) were added to refs/heads/master by this push:
     new cd588b1  add alarm provider (#265)
cd588b1 is described below

commit cd588b13273855ce0300a69f39a8b113ca149d88
Author: Ying Chun Guo <gu...@cn.ibm.com>
AuthorDate: Thu Aug 2 22:14:21 2018 +0800

    add alarm provider (#265)
---
 helm/openwhisk/templates/clusterConfigMaps.yaml    |  1 +
 helm/openwhisk/templates/invoker.yaml              |  6 ++
 helm/openwhisk/values.yaml                         |  2 +-
 helm/providers/charts/alarm/Chart.yaml             | 12 ++++
 helm/providers/charts/alarm/README.md              | 49 ++++++++++++++
 .../charts/alarm/configMapFiles/myTask.sh          | 19 ++++++
 helm/providers/charts/alarm/templates/NOTES.txt    | 14 ++++
 .../charts/alarm/templates/installPkgAlarmJob.yaml | 69 +++++++++++++++++++
 .../charts/alarm/templates/pkgAlarmProvider.yaml   | 79 ++++++++++++++++++++++
 helm/providers/charts/alarm/values.yaml            | 18 +++++
 10 files changed, 268 insertions(+), 1 deletion(-)

diff --git a/helm/openwhisk/templates/clusterConfigMaps.yaml b/helm/openwhisk/templates/clusterConfigMaps.yaml
index 4167ce9..1957479 100644
--- a/helm/openwhisk/templates/clusterConfigMaps.yaml
+++ b/helm/openwhisk/templates/clusterConfigMaps.yaml
@@ -38,6 +38,7 @@ data:
   db_host: {{ include "db_host" . | quote }}
   db_port: {{ .Values.db.port | quote }}
   db_url: "{{ .Values.db.protocol }}://{{ include "db_host" . }}:{{ .Values.db.port }}"
+  db_host_port: "{{ include "db_host" . }}:{{ .Values.db.port }}"
   db_whisk_actions: {{ .Values.db.actionsTable | quote }}
   db_whisk_activations: {{ .Values.db.activationsTable | quote }}
   db_whisk_auths: {{ .Values.db.authsTable | quote }}
diff --git a/helm/openwhisk/templates/invoker.yaml b/helm/openwhisk/templates/invoker.yaml
index 9eddb2b..0b3481d 100644
--- a/helm/openwhisk/templates/invoker.yaml
+++ b/helm/openwhisk/templates/invoker.yaml
@@ -94,6 +94,12 @@ spec:
           - name: "CONFIG_whisk_containerPool_coreShare"
             value: {{ .Values.invoker.containerPool.coreShare | quote }}
 
+          # DNS Server passed to action containers
+{{- if not (eq .Values.invoker.kube_dns "nil") }}
+          - name: "CONFIG_whisk_containerFactory_containerArgs_dnsServers_0"
+            value: {{ .Values.invoker.kube_dns }}
+{{ end }}
+
           # Invoker name is the name of the node (DaemonSet) or pod (StatefulSet)
           - name: "INVOKER_NAME"
             valueFrom:
diff --git a/helm/openwhisk/values.yaml b/helm/openwhisk/values.yaml
index 04783e2..05420ef 100644
--- a/helm/openwhisk/values.yaml
+++ b/helm/openwhisk/values.yaml
@@ -174,6 +174,7 @@ invoker:
     numcore: 2
     coreshare: 4
   busyThreshold: 8
+  kube_dns: nil
 
 # API Gateway configurations
 apigw:
@@ -212,4 +213,3 @@ affinity:
   edgeNodeLabel: edge
   invokerNodeLabel: invoker
   providerNodeLabel: provider
-
diff --git a/helm/providers/charts/alarm/Chart.yaml b/helm/providers/charts/alarm/Chart.yaml
new file mode 100644
index 0000000..7fe83b1
--- /dev/null
+++ b/helm/providers/charts/alarm/Chart.yaml
@@ -0,0 +1,12 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+apiVersion: v1
+description: A Helm chart to deploy the Apache OpenWhisk Alarm Provider on Kubernetes
+name: Apache OpenWhisk Alarm Provider
+version: 0.1.0
+keywords:
+  - Apache OpenWhisk
+maintainers:
+  - name: Apache OpenWhisk committers
+    email: dev@openwhisk.apache.org
diff --git a/helm/providers/charts/alarm/README.md b/helm/providers/charts/alarm/README.md
new file mode 100644
index 0000000..f5415ae
--- /dev/null
+++ b/helm/providers/charts/alarm/README.md
@@ -0,0 +1,49 @@
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+-->
+
+# Use Helm to deploy alarm provider and package
+
+This chart is to deploy alarm provider and package to OpenWhisk on a Kubernetes using Helm.
+
+## Preconditions
+
+Alarm package can only be successfully installed under these two preconditions:
++ persistentvolumes (aka 'pv') is defined in the Kubernetes cluster. You can verify by `kubectl get pv`.
++ Kubernetes DNS is used as the DNS server in action containers. In order to achieve it, you can set `KubernetesContainerFactory` as the [Invoker Container Factory](https://github.com/apache/incubator-openwhisk-deploy-kube/blob/master/docs/configurationChoices.md#invoker-container-factory) in the Kubernetes cluster by adding below configuration in the `mycluster.yaml` when you deploy OpenWhisk with Helm:
+```
+# Invoker configurations
+invoker:
+  containerFactory:
+    impl: "kubernetes"
+```
+or you can pass Kubernetes DNS to invoker. First you can get the IP address of Kubernetes DNS server by `echo $(kubectl get svc kube-dns -n kube-system -o 'jsonpath={.spec.clusterIP}')` and then add below configuration in the `mycluster.yaml`:
+```
+# Invoker configurations
+invoker:
+  kube_dns: "<IP_Address_Of_Kube_DNS>"
+```
+
+## Install
+
+You may install this chart with command like
+```
+helm install ./helm/providers/charts/alarm --namespace=openwhisk --name owdev-alarm-provider
+```
+
+You can use `helm status owdev-alarm-provider` to check the status. When you see pod is running and job is completed, you can check alarm package by `wsk package get /whisk.system/alarms -i --summary`
diff --git a/helm/providers/charts/alarm/configMapFiles/myTask.sh b/helm/providers/charts/alarm/configMapFiles/myTask.sh
new file mode 100644
index 0000000..c887021
--- /dev/null
+++ b/helm/providers/charts/alarm/configMapFiles/myTask.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+# installCatalog.sh expects the wsk cli to be $OPENWHISK_HOME/bin/wsk
+
+export OPENWHISK_HOME=/usr/local
+
+# install npm
+apk add --update nodejs-npm
+
+git clone https://github.com/apache/incubator-openwhisk-package-alarms.git
+
+export DB_URL=http://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT
+pushd /incubator-openwhisk-package-alarms
+  ./installCatalog.sh $AUTH $APIHOST $DB_URL $DB_PREFIX $APIHOST
+popd
+
+echo "successfully setup alarm package"
diff --git a/helm/providers/charts/alarm/templates/NOTES.txt b/helm/providers/charts/alarm/templates/NOTES.txt
new file mode 100644
index 0000000..b01e731
--- /dev/null
+++ b/helm/providers/charts/alarm/templates/NOTES.txt
@@ -0,0 +1,14 @@
+{{/* Licensed to the Apache Software Foundation (ASF) under one or more contributor */}}
+{{/* license agreements; and to You under the Apache License, Version 2.0. */}}
+Apache OpenWhisk Kafka Provider
+Copyright 2016-2018 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Your release is named {{ .Release.Name }}.
+
+To learn more about the release, try:
+
+  $ helm status {{ .Release.Name }}
+  $ helm get {{ .Release.Name }}
diff --git a/helm/providers/charts/alarm/templates/installPkgAlarmJob.yaml b/helm/providers/charts/alarm/templates/installPkgAlarmJob.yaml
new file mode 100644
index 0000000..24dcf28
--- /dev/null
+++ b/helm/providers/charts/alarm/templates/installPkgAlarmJob.yaml
@@ -0,0 +1,69 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: install-package-alarm
+  namespace: {{ .Release.Namespace | quote }}
+spec:
+  activeDeadlineSeconds: 600
+  template:
+    metadata:
+      name: install-package-alarm
+    spec:
+      restartPolicy: Never
+      volumes:
+      - name: task-dir
+        configMap:
+          name: install-package-alarms
+      containers:
+      - name: alarmpkginstaller
+        image: openwhisk/kube-whisk-script-runner
+        volumeMounts:
+        - name: task-dir
+          mountPath: "/task/myTask.sh"
+          subPath: "myTask.sh"
+        env:
+          - name: "AUTH"
+            valueFrom:
+              secretKeyRef:
+                name: whisk.auth
+                key: system
+          # poorly named envvar; actually expects full apihost (host:port)
+          - name: "APIHOST"
+            valueFrom:
+              configMapKeyRef:
+                name: whisk.config
+                key: whisk_api_host_nameAndPort
+          # for the database used by kafka package
+          - name: "DB_HOST"
+            valueFrom:
+              configMapKeyRef:
+                name: db.config
+                key: db_host
+          - name: "DB_PORT"
+            valueFrom:
+              configMapKeyRef:
+                name: db.config
+                key: db_port
+          - name: "DB_USERNAME"
+            valueFrom:
+              secretKeyRef:
+                name: db.auth
+                key: db_username
+          - name: "DB_PASSWORD"
+            valueFrom:
+              secretKeyRef:
+                name: db.auth
+                key: db_password
+          - name: "DB_PREFIX"
+            value: "{{- .Values.alarmprovider.dbPrefix -}}"
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: install-package-alarms
+  namespace: {{ .Release.Namespace | quote }}
+data:
+{{ (.Files.Glob "configMapFiles/myTask.sh").AsConfig | indent 2 }}
diff --git a/helm/providers/charts/alarm/templates/pkgAlarmProvider.yaml b/helm/providers/charts/alarm/templates/pkgAlarmProvider.yaml
new file mode 100644
index 0000000..c543bd8
--- /dev/null
+++ b/helm/providers/charts/alarm/templates/pkgAlarmProvider.yaml
@@ -0,0 +1,79 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  name: {{ .Values.alarmprovider.name | quote }}
+  namespace: {{ .Release.Namespace | quote }}
+  labels:
+    name: alarmprovider
+spec:
+  replicas: {{ .Values.alarmprovider.replicaCount }}
+  template:
+    metadata:
+      labels:
+        name: {{ .Values.alarmprovider.name | quote }}
+    spec:
+      restartPolicy: {{ .Values.alarmprovider.restartPolicy }}
+      volumes:
+        - name: alarm-logs
+          persistentVolumeClaim:
+            claimName: {{ .Values.alarmprovider.persistence.pvcName | quote }}
+      containers:
+      - name: {{ .Values.alarmprovider.name | quote }}
+        imagePullPolicy: {{ .Values.alarmprovider.imagePullPolicy | quote }}
+        image: {{ .Values.alarmprovider.image | quote }}
+        ports:
+        - name: kafkaprovider
+          containerPort: {{ .Values.alarmprovider.apiPort }}
+        env:
+        - name: "DB_PROTOCOL"
+          valueFrom:
+            configMapKeyRef:
+              name: db.config
+              key: db_protocol
+        - name: "DB_HOST"
+          valueFrom:
+            configMapKeyRef:
+              name: db.config
+              key: db_host_port
+        - name: "DB_USERNAME"
+          valueFrom:
+            secretKeyRef:
+              name: db.auth
+              key: db_username
+        - name: "DB_PASSWORD"
+          valueFrom:
+            secretKeyRef:
+              name: db.auth
+              key: db_password
+        - name: "DB_PREFIX"
+          value: "{{- .Values.alarmprovider.dbPrefix -}}"
+        - name: "ROUTER_HOST"
+          valueFrom:
+            configMapKeyRef:
+              name: whisk.config
+              key: whisk_api_host_nameAndPort
+        - name: "ENDPOINT_AUTH"
+          valueFrom:
+            configMapKeyRef:
+              name: whisk.config
+              key: whisk_api_host_nameAndPort
+        volumeMounts:
+          - name: alarm-logs
+            mountPath: /logs
+
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: {{ .Values.alarmprovider.persistence.pvcName | quote }}
+  namespace: {{ .Release.Namespace | quote }}
+spec:
+  storageClassName: {{ .Values.alarmprovider.persistence.storageClass }}
+  accessModes:
+    - {{ .Values.alarmprovider.persistence.accessMode }}
+  resources:
+    requests:
+      storage: {{ .Values.alarmprovider.persistence.size }}
diff --git a/helm/providers/charts/alarm/values.yaml b/helm/providers/charts/alarm/values.yaml
new file mode 100644
index 0000000..530c3de
--- /dev/null
+++ b/helm/providers/charts/alarm/values.yaml
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+# Alarm provider configurations
+alarmprovider:
+  name: "alarmprovider"
+  image: "openwhisk/alarmprovider:latest"
+  # NOTE: replicaCount > 1 doesn't work because of the PVC
+  replicaCount: 1
+  imagePullPolicy: "IfNotPresent"
+  restartPolicy: "Always"
+  apiPort: 8080
+  dbPrefix: "alm"
+  persistence:
+    pvcName: alarmprovider-pvc
+    size: 1Gi
+    storageClass: default
+    accessMode: ReadWriteOnce