blob: 7693cd266780c580fd905b47d4d9bd2b0b69f923 [file] [log] [blame] [view]
<!--
~ 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)