| <!-- |
| ~ 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. |
| ~ |
| --> |
| |
| # StreamPipes k8s - The Operator's Dream |
| |
| StreamPipes k8s is a helm chart to deploy StreamPipes on Kubernetes. |
| |
| <!-- BEGIN do not edit: set via ../upgrade_versions.sh --> |
| **Current version:** 0.98.0-SNAPSHOT |
| <!-- END do not edit --> |
| |
| We provide two helm chart templates to get you going: |
| |
| - **default**: a lightweight template with few pipeline elements, needs less memory |
| - **full**: contains more pipeline elements, requires **>16 GB RAM** (recommended) |
| |
| ## Prerequisite |
| |
| Requires Helm (https://helm.sh/) and an active connection to a kubernetes cluster with a running tiller server. |
| |
| Tested with: |
| |
| * K8s v1.19.3 |
| * Helm v3.1.2 |
| * Minikube v1.15.1 (recommended for local testing) |
| |
| > **NOTE**: We experienced some problems with using host path volumes in Docker Desktop environments for persistent |
| > storage. Therefore, we suggest to use minikube for local testing. |
| |
| ## Local testing |
| |
| We recommend using [minikube](https://minikube.sigs.k8s.io/docs/) for local testing. Follow instructions in their docs |
| to setup test environment |
| |
| Once installed, start local minikube node with a mapped host volume: |
| |
| ```bash |
| minikube start --mount-string ${HOME}/streampipes-k8s:/streampipes-k8s --mount --memory=4g --cpus=4 |
| ``` |
| |
| **Start** the a helm chart template by running the following command from the root of this folder: |
| > **NOTE**: Starting might take a while since we also initially pull all Docker images from Dockerhub. |
| |
| ```bash |
| helm install streampipes ./ |
| |
| # full template only recommend if you have sufficient resources |
| # helm install streampipes ./ --set deployment=full |
| ``` |
| |
| After a while, all containers should successfully started, indicated by the `Running` status. |
| |
| ```bash |
| kubectl get pods |
| NAME READY STATUS RESTARTS AGE |
| backend-76ddc486c8-nswpc 1/1 Running 0 3m27s |
| couchdb-77db98cf7b-xnnvb 1/1 Running 0 3m27s |
| influxdb-b95b6479-r8wh8 1/1 Running 0 3m27s |
| extensions-all-jvm-79c445dbd9-m8xcs 1/1 Running 0 3m27s |
| ui-b94bd9766-rm6zb 2/2 Running 0 3m27s |
| ``` |
| |
| For **minikube users**: |
| > **NOTE**: If you're running Docker Desktop or Minikube with a local k8s cluster, the above step to use your host IP |
| > might not work. Luckily, you can port-forward a service port to your localhost using the following command to be able to |
| > access the UI either via `http://localhost:8088` or `http://<HOST_IP>:8088` (If you want to use privileged ports such as 80, you need to run this command with sudo to bind to the privileged port). |
| |
| ```bash |
| kubectl port-forward svc/ui --address=0.0.0.0 8088:8088 |
| ``` |
| |
| **Deleting** the current helm chart deployment: |
| |
| ```bash |
| helm del streampipes |
| ``` |
| |
| We retain the created persistent volume. You need to manually delete it: |
| |
| ```bash |
| rm -rf ${HOME}/streampipes-k8s |
| ``` |
| |
| ## Parameters |
| |
| ### Common parameters |
| |
| | Parameter Name | Description | Value | |
| |-------------------------------|-----------------------------------------------------|-----------------| |
| | deployment | Deployment type (lite or full) | lite | |
| | preferredBroker | Preferred broker for deployment | "nats" | |
| | monitoringSystem | Enable monitoring system (true/false) | false | |
| | pullPolicy | Image pull policy | "Always" | |
| | restartPolicy | Restart policy for the container | Always | |
| | persistentVolumeReclaimPolicy | Reclaim policy for persistent volumes | "Delete" | |
| | persistentVolumeAccessModes | Access mode for persistent volumes | "ReadWriteOnce" | |
| | initialDelaySeconds | Initial delay for liveness and readiness probes | 60 | |
| | periodSeconds | Interval between liveness and readiness probes | 30 | |
| | failureThreshold | Number of consecutive failures for readiness probes | 30 | |
| | hostPath | Host path for the application | "" | |
| |
| ### StreamPipes common parameters |
| |
| | Parameter Name | Description | Value | |
| |-----------------------------------------------|---------------------------------------------------------|------------------------------------------| |
| | streampipes.version | StreamPipes version | "0.98.0-SNAPSHOT" | |
| | streampipes.registry | StreamPipes registry URL | "apachestreampipes" | |
| | streampipes.auth.secretName | The secret name for storing secrets | "sp-secrets" | |
| | streampipes.auth.users.admin.user | The initial admin user | "admin@streampipes.apache.org" | |
| | streampipes.auth.users.admin.password | The initial admin password (leave empty for autogen) | "admin" | |
| | streampipes.auth.users.service.user | The initial service account user | "sp-service-client" | |
| | streampipes.auth.users.service.secret | The initial service account secret | empty (auto-generated) | |
| | streampipes.auth.encryption.passcode | Passcode for value encryption | empty (auto-generated) | |
| | streampipes.core.appName | StreamPipes backend application name | "backend" | |
| | streampipes.core.port | StreamPipes backend port | 8030 | |
| | streampipes.core.persistence.storageClassName | Storage class name for backend PVs | "hostpath" | |
| | streampipes.core.persistence.storageSize | Size of the backend PV | "1Gi" | |
| | streampipes.core.persistence.claimName | Name of the backend PersistentVolumeClaim | "backend-pvc" | |
| | streampipes.core.persistence.pvName | Name of the backend PersistentVolume | "backend-pv" | |
| | streampipes.core.service.name | Name of the backend service | "backend" | |
| | streampipes.core.service.port | TargetPort of the StreamPipes backend service | 8030 | |
| | streampipes.ui.appName | StreamPipes UI application name | "ui" | |
| | streampipes.ui.resolverActive | Flag for enabling DNS resolver for Nginx proxy | true | |
| | streampipes.ui.port | StreamPipes UI port | 8088 | |
| | streampipes.ui.resolver | DNS resolver for Nginx proxy | "kube-dns.kube-system.svc.cluster.local" | |
| | streampipes.ui.service.name | Name of the UI service | "ui" | |
| | streampipes.ui.service.type | Type of the UI service | "ClusterIP" | |
| | streampipes.ui.service.nodePort | Node port for the UI service | 8088 | |
| | streampipes.ui.service.port | TargetPort of the StreamPipes UI service | 8088 | |
| | streampipes.ingress.active | Flag for enabling Ingress for StreamPipes | false | |
| | streampipes.ingress.annotations | Annotations for Ingress | {} | |
| | streampipes.ingress.host | Hostname for Ingress | "" | |
| | streampipes.ingressroute.active | Flag for enabling IngressRoute for StreamPipes | true | |
| | streampipes.ingressroute.annotations | Annotations for IngressRoute | {} | |
| | streampipes.ingressroute.entryPoints | Entry points for IngressRoute | ["web", "websecure"] | |
| | streampipes.ingressroute.host | Hostname for IngressRoute | "" | |
| | streampipes.ingressroute.certResolverActive | Flag for enabling certificate resolver for IngressRoute | true | |
| | streampipes.ingressroute.certResolver | Certificate resolver for IngressRoute | "" | |
| |
| ### Extensions common parameters |
| |
| | Parameter Name | Description | Value | |
| |------------------------------|-------------------------------------------|---------------------| |
| | extensions.iiot.appName | IIoT extensions application name | extensions-all-iiot | |
| | extensions.iiot.imageName | IIoT extensions image name | extensions-all-jvm | |
| | extensions.iiot.port | Port for the IIoT extensions application | 8090 | |
| | extensions.iiot.service.name | Name of the IIoT extensions service | extensions-all-iiot | |
| | extensions.iiot.service.port | TargetPort of the IIoT extensions service | 8090 | |
| |
| ### External common parameters |
| |
| #### Couchdb common parameters |
| |
| | Parameter Name | Description | Value | |
| |-----------------------------------------------|-------------------------------------------|------------------------| |
| | external.couchdb.appName | CouchDB application name | "couchdb" | |
| | external.couchdb.version | CouchDB version | 3.3.1 | |
| | external.couchdb.user | CouchDB admin username | "admin" | |
| | external.couchdb.password | CouchDB admin password | empty (auto-generated) | |
| | external.couchdb.port | Port for the CouchDB service | 5984 | |
| | external.couchdb.service.name | Name of the CouchDB service | "couchdb" | |
| | external.couchdb.service.port | TargetPort of the CouchDB service | 5984 | |
| | external.couchdb.persistence.storageClassName | Storage class name for CouchDB PVs | "hostpath" | |
| | external.couchdb.persistence.storageSize | Size of the CouchDB PV | "1Gi" | |
| | external.couchdb.persistence.claimName | Name of the CouchDB PersistentVolumeClaim | "couchdb-pvc" | |
| | external.couchdb.persistence.pvName | Name of the CouchDB PersistentVolume | "couchdb-pv" | |
| |
| |
| #### Influxdb common parameters |
| |
| | Parameter Name | Description | Value | |
| |------------------------------------------------|----------------------------------------------|------------------------| |
| | external.influxdb.appName | InfluxDB application name | "influxdb" | |
| | external.influxdb.version | InfluxDB version | 2.6 | |
| | external.influxdb.username | InfluxDB admin username | "admin" | |
| | external.influxdb.password | InfluxDB admin password | empty (auto-generated) | |
| | external.influxdb.adminToken | InfluxDB admin token | empty (auto-generated) | |
| | external.influxdb.initOrg | InfluxDB initial organization | "sp" | |
| | external.influxdb.initBucket | InfluxDB initial bucket | "sp" | |
| | external.influxdb.initMode | InfluxDB initialization mode | "setup" | |
| | external.influxdb.apiPort | Port number for the InfluxDB service (API) | 8083 | |
| | external.influxdb.httpPort | Port number for the InfluxDB service (HTTP) | 8086 | |
| | external.influxdb.grpcPort | Port number for the InfluxDB service (gRPC) | 8090 | |
| | external.influxdb.service.name | Name of the InfluxDB service | "influxdb" | |
| | external.influxdb.service.apiPort | TargetPort of the InfluxDB service for API | 8083 | |
| | external.influxdb.service.httpPort | TargetPort of the InfluxDB service for HTTP | 8086 | |
| | external.influxdb.service.grpcPort | TargetPort of the InfluxDB service for gRPC | 8090 | |
| | external.influxdb.persistence.storageClassName | Storage class name for InfluxDB PVs | "hostpath" | |
| | external.influxdb.persistence.storageSize | Size of the InfluxDB PV | "1Gi" | |
| | external.influxdb.persistence.storageSizeV1 | Size of the InfluxDB PV for v1 databases | "1Gi" | |
| | external.influxdb.persistence.claimName | Name of the InfluxDBv2 PersistentVolumeClaim | "influxdb2-pvc" | |
| | external.influxdb.persistence.claimNameV1 | Name of the InfluxDBv1 PersistentVolumeClaim | "influxdb-pvc" | |
| | external.influxdb.persistence.pvName | Name of the InfluxDBv2 PersistentVolume | "influxdb2-pv" | |
| | external.influxdb.persistence.pvNameV1 | Name of the InfluxDBv1 PersistentVolume | "influxdb-pv" | |
| |
| #### Nats common parameters |
| |
| | Parameter Name | Description | Value | |
| |---------------------------------------------|----------------------------------------------|------------| |
| | external.nats.appName | NATS application name | "nats" | |
| | external.nats.port | Port for the NATS service | 4222 | |
| | external.nats.version | NATS version | | |
| | external.nats.service.type | Type of the NATS service | "NodePort" | |
| | external.nats.service.externalTrafficPolicy | External traffic policy for the NATS service | "Local" | |
| | external.nats.service.name | Name of the NATS service | "nats" | |
| | external.nats.service.port | TargetPort of the NATS service | 4222 | |
| |
| #### Kafka common parameters |
| |
| | Parameter Name | Description | Value | |
| |---------------------------------------------|------------------------------------------------------------------------------------------|-------------| |
| | external.kafka.appName | Kafka application name | "kafka" | |
| | external.kafka.version | Kafka version | 3.9.0 | |
| | external.kafka.port | Port for the Kafka service | 9092 | |
| | external.kafka.external.hostname | Name which will be advertised to external clients. Clients which use (default) port 9094 | "localhost" | |
| | external.kafka.service.name | Name of the Kafka service | "kafka" | |
| | external.kafka.service.port | TargetPort of the Kafka service | 9092 | |
| | external.kafka.service.portOutside | Port for Kafka client outside of the cluster | 9094 | |
| | external.kafka.persistence.storageClassName | Storage class name for Kafka PVs | "hostpath" | |
| | external.kafka.persistence.storageSize | Size of the Kafka PV | "1Gi" | |
| | external.kafka.persistence.claimName | Name of the Kafka PersistentVolumeClaim | "kafka-pvc" | |
| | external.kafka.persistence.pvName | Name of the Kafka PersistentVolume | "kafka-pv" | |
| | |
| |
| #### Pulsar common parameters |
| |
| | Parameter Name | Description | Value | |
| |----------------------------------------------|------------------------------------------|--------------| |
| | external.pulsar.appName | pulsar application name | "pulsar" | |
| | external.pulsar.version | pulsar version | 3.0.0 | |
| | external.pulsar.port | Port for the pulsar service | 6650 | |
| | external.pulsar.service.name | Name of the pulsar service | "pulsar" | |
| | external.pulsar.service.port | TargetPort of the pulsar service | 6650 | |
| | external.pulsar.persistence.storageClassName | Storage class name for pulsar PVs | "hostpath" | |
| | external.pulsar.persistence.storageSize | Size of the pulsar PV | "1Gi" | |
| | external.pulsar.persistence.claimName | Name of the pulsar PersistentVolumeClaim | "pulsar-pvc" | |
| | external.pulsar.persistence.pvName | Name of the pulsar PersistentVolume | "pulsar-pv" | |
| |
| ### Monitoring common parameters |
| |
| #### Monitoring - Prometheus |
| |
| | Parameter Name | Description | Value | |
| |-----------------------------------------|---------------------------------|-----------------------| |
| | prometheus.appName | Prometheus application name | "prometheus" | |
| | prometheus.version | Prometheus version | 2.45.0 | |
| | prometheus.port | Prometheus port | 9090 | |
| | prometheus.service.name | Prometheus service name | "prometheus" | |
| | prometheus.service.port | Prometheus service port | 9090 | |
| | prometheus.persistence.storageClassName | Prometheus storage class name | "hostpath" | |
| | prometheus.persistence.storageSize | Prometheus storage size | "2Gi" | |
| | prometheus.persistence.claimName | Prometheus PVC claim name | "prometheus-pvc" | |
| | prometheus.persistence.pvName | Prometheus PV name | "prometheus-pv" | |
| | prometheus.persistence.tokenStorageSize | Prometheus token storage size | "16Ki" | |
| | prometheus.config.scrapeInterval | Prometheus scrape interval | 10s | |
| | prometheus.config.evaluationInterval | Prometheus evaluation interval | 15s | |
| | prometheus.config.backendJobName | Prometheus backend job name | "backend" | |
| | prometheus.config.extensionsName | Prometheus extensions job name | "extensions-all-iiot" | |
| | prometheus.config.tokenFileName | Prometheus token file name | "token" | |
| | prometheus.config.tokenFileDir | Prometheus token file directory | "/opt/data" | |
| |
| #### Monitoring - Grafana |
| |
| | Parameter Name | Description | Value | |
| |--------------------------------------|----------------------------|---------------| |
| | grafana.appName | Grafana application name | "grafana" | |
| | grafana.version | Grafana version | 10.1.2 | |
| | grafana.port | Grafana port | 3000 | |
| | grafana.service.name | Grafana service name | "grafana" | |
| | grafana.service.port | Grafana service port | 3000 | |
| | grafana.persistence.storageClassName | Grafana storage class name | "hostpath" | |
| | grafana.persistence.storageSize | Grafana storage size | "1Gi" | |
| | grafana.persistence.claimName | Grafana PVC claim name | "grafana-pvc" | |
| | grafana.persistence.pvName | Grafana PV name | "grafana-pv" | |
| |
| ## Bugs and Feature Requests |
| |
| If you've found a bug or have a feature that you'd love to see in StreamPipes, feel free to create an issue |
| on [GitHub](https://github.com/apache/streampipes/issues). |
| |
| ## Get help |
| |
| If you have any problems during the installation or questions around StreamPipes, you'll get help through one of our |
| community channels: |
| |
| - [Slack](https://slack.streampipes.org) |
| - [Mailing Lists](https://streampipes.apache.org/community/mailing-lists/) |
| |
| And don't forget to follow us on [Twitter](https://twitter.com/streampipes)! |
| |
| ## Contribute |
| |
| We welcome contributions to StreamPipes. If you are interested in contributing to StreamPipes, let us know! You'll |
| get to know an open-minded and motivated team working together to build the next IIoT analytics toolbox. |
| |
| Here are some first steps in case you want to contribute: |
| |
| * Subscribe to our dev mailing list [dev-subscribe@streampipes.apache.org](dev-subscribe@streampipes.apache.org) |
| * Send an email, tell us about your interests and which parts of StreamPipes you'd like to contribute (e.g., core or |
| UI)! |
| * Ask for a mentor who helps you to understand the code base and guides you through the first setup steps |
| * Find an issue on [GitHub](https://github.com/apache/streampipes/issues) which is tagged with a _good first issue_ tag |
| * Have a look at our developer wiki |
| at [https://cwiki.apache.org/confluence/display/STREAMPIPES](https://cwiki.apache.org/confluence/display/STREAMPIPES) |
| to learn more about StreamPipes development. |
| |
| Have fun! |
| |
| ## Feedback |
| |
| We'd love to hear your feedback! Subscribe to [users@streampipes.apache.org](mailto:users@streampipes.apache.org) |
| |
| ## License |
| |
| [Apache License 2.0](../LICENSE) |