Helm
Our Helm charts repository is the quickest way to get started using Kpow with Kubernetes.
Installation
Helm must be installed to use the charts. Please refer to Helm's documentation to get started.
Once Helm has been setup you need to add this repository to your Helm repositories:
helm repo add factorhouse https://charts.factorhouse.io
helm repo update
You can then run helm search repo factorhouse
to see the available charts.
Start a Kpow instance
The minimum information required by Kpow to operate is:
- License Details
- Kafka Bootstrap URL
See the environment variables reference for a full list of configuration options.
- Community
- Enterprise
Using configuration provided via --set env.XYZ
Quoting Values
When using --set env.XXX
to pass configuration, some values may require quoting—especially if they contain commas, numbers, or quotation marks. Refer to the examples below for guidance.
Escaping Characters
Special characters may need to be escaped with \
when using --set
. For more information, see the Helm documentation.
Use the following to install from command line:
helm install --namespace factorhouse --create-namespace kpow factorhouse/kpow-ce \
--set env.LICENSE_ID="00000000-0000-0000-0000-000000000001" \
--set env.LICENSE_CODE="KPOW_COMMUNITY" \
--set env.LICENSEE="Factor House\, Inc." \ <-- note the quoted comma
--set env.LICENSE_EXPIRY="2022-01-01" \
--set env.LICENSE_SIGNATURE="638......A51" \
--set env.BOOTSTRAP="127.0.0.1:9092\,127.0.0.1:9093\,127.0.0.1:9094" <-- note the quoted commas
NAME: kpow-ce
LAST DEPLOYED: Mon May 31 17:22:21 2021
NAMESPACE: factorhouse
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace factorhouse -l "app.kubernetes.io/name=kpow,app.kubernetes.io/instance=kpow" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:3000 to use your application"
kubectl --namespace factorhouse port-forward $POD_NAME 3000:3000
Using environment variables defined in a ConfigMap
You can configure Kpow with a ConfigMap of environment variables as follows:
helm install --namespace factorhouse --create-namespace kpow factorhouse/kpow-ce --set envFromConfigMap=kpow-config
This approach expects a ConfigMap to be available within the factorhouse namespace in kube, to understand how to configure Kpow with a local ConfigMap template see Start Kpow with local changes.
See kpow-ce-config.yaml.example for an example ConfigMapfile.
See the Kubernetes documentation on configuring all key value pairs in a config map as environment variables for more information.
Using configuration provided via --set env.XYZ
Quoting Values
When using --set env.XXX
to pass configuration, some values may require quoting—especially if they contain commas, numbers, or quotation marks. Refer to the examples below for guidance.
Escaping Characters
Special characters may need to be escaped with \
when using --set
. For more information, see the Helm documentation.
Use the following to install from command line:
helm install --namespace factorhouse --create-namespace kpow factorhouse/kpow \
--set env.LICENSE_ID="00000000-0000-0000-0000-000000000001" \
--set env.LICENSE_CODE="TRIAL_30D" \
--set env.LICENSEE="Factor House\, Inc." \ <-- note the quoted comma
--set env.LICENSE_EXPIRY="2022-01-01" \
--set env.LICENSE_SIGNATURE="638......A51" \
--set env.BOOTSTRAP="127.0.0.1:9092\,127.0.0.1:9093\,127.0.0.1:9094" \ <-- note the quoted commas
--set env.SECURITY_PROTOCOL="SASL_PLAINTEXT" \
--set env.SASL_MECHANISM="PLAIN" \
--set env.SASL_JAAS_CONFIG="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"user\" password=\"secret\";" \ <-- note the quoted quotes
--set env.LICENSE_CREDITS="7"
NAME: kpow
LAST DEPLOYED: Mon May 31 17:22:21 2021
NAMESPACE: factorhouse
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace factorhouse -l "app.kubernetes.io/name=kpow,app.kubernetes.io/instance=kpow" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:3000 to use your application"
kubectl --namespace factorhouse port-forward $POD_NAME 3000:3000
Using environment variables defined in a ConfigMap
You can configure Kpow with a ConfigMap of environment variables as follows:
helm install --namespace factorhouse --create-namespace kpow factorhouse/kpow --set envFromConfigMap=kpow-config
This approach expects a ConfigMap to be available within the factorhouse namespace in kube, to understand how to configure Kpow with a local ConfigMap template see Start Kpow with local changes.
See kpow-config.yaml.example for an example ConfigMapfile.
See the Kubernetes documentation on configuring all key value pairs in a config map as environment variables for more information.
Manage a Kpow instance
Access the Kpow UI via port forwarding
- Community
- Enterprise
Follow the notes instructions to set the $POD_NAME
variable and configure port forwarding to the Kpow UI.
export POD_NAME=$(kubectl get pods --namespace factorhouse -l "app.kubernetes.io/name=kpow-ce,app.kubernetes.io/instance=kpow-ce" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace factorhouse port-forward $POD_NAME 3000:3000
Kpow is now available on http://127.0.0.1:3000.
Follow the notes instructions to set the $POD_NAME
variable and configure port forwarding to the Kpow UI.
export POD_NAME=$(kubectl get pods --namespace factorhouse -l "app.kubernetes.io/name=kpow,app.kubernetes.io/instance=kpow" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace factorhouse port-forward $POD_NAME 3000:3000
Kpow is now available on http://127.0.0.1:3000.
Check the Kpow Pod
kubectl describe pods --namespace factorhouse
Name: kpow-9988df6b6-vvf8z
Namespace: factorhouse
Priority: 0
Node: ip-172-31-33-42.ap-southeast-2.compute.internal/172.31.33.42
Start Time: Mon, 31 May 2021 17:22:22 +1000
Labels: app.kubernetes.io/instance=kpow
app.kubernetes.io/name=kpow
pod-template-hash=9988df6b6
Annotations: kubernetes.io/psp: eks.privileged
Status: Running
View the Kpow Pod logs
kubectl logs --namespace factorhouse $POD_NAME
11:36:49.111 INFO [main] kpow.system ? start Kpow
...
Remove Kpow
- Community
- Enterprise
Deletes the kpow-ce
release from the factorhouse namespace using Helm.
helm delete --namespace factorhouse kpow-ce
Deletes the kpow
release from the factorhouse namespace using Helm.
helm delete --namespace factorhouse kpow
Start Kpow with local changes
You can run Kpow with local edits to these charts and provide local configuration when running Kpow.
Pull and untar the Kpow Charts
- Community
- Enterprise
helm pull factorhouse/kpow-ce --untar --untardir .
helm pull factorhouse/kpow --untar --untardir .
Make local edits
- Community
- Enterprise
Make any edits required to kpow-ce/Chart.yaml
or kpow-ce/values.yaml
(adding volume mounts, etc).
Make any edits required to kpow/Chart.yaml
or kpow/values.yaml
(adding volume mounts, etc).
Run local Charts
- Community
- Enterprise
The command to run local charts is slightly different, see ./kpow-ce
rather than factorhouse/kpow-ce
.
helm install --namespace factorhouse --create-namespace kpow ./kpow-ce <.. --set configuration, etc ..>
The command to run local charts is slightly different, see ./kpow
rather than factorhouse/kpow
.
helm install --namespace factorhouse --create-namespace kpow ./kpow <.. --set configuration, etc ..>
Run with local ConfigMap configuration
- Community
- Enterprise
Place your local ConfigMap in the ./kpow-ce/templates/
directory.
Your local ConfigMap can then be referenced with --set envFromConfigMap=kpow-config
.
helm install --namespace factorhouse --create-namespace kpow ./kpow-ce --set envFromConfigMap=kpow-config
See kpow-ce-config.yaml.example for an example ConfigMap file.
See the Kubernetes documentation on configuring all key value pairs in a config map as environment variables for more information.
Place your local ConfigMap in the ./kpow/templates/
directory.
Your local ConfigMap can then be referenced with --set envFromConfigMap=kpow-config
.
helm install --namespace factorhouse --create-namespace kpow ./kpow --set envFromConfigMap=kpow-config
See kpow-config.yaml.example for an example ConfigMap file.
See the Kubernetes documentation on configuring all key value pairs in a config map as environment variables for more information.
Manage sensitive environment variables
- Community
- Enterprise
This helm chart accepts the name of a secret containing sensitive parameters, e.g.
apiVersion: v1
kind: Secret
metadata:
name: kpow-secrets
data:
SASL_JAAS_CONFIG: a3JnLmFwYWNoXS5rYWZrYS5jb21tb24uc2VjdXJpdHkucGxhaW4uUGxhaW5Mb2dpbk2vZHVsZSByZXF1aXJiZCB1c2VybmFtZT0iTFQ1V0ZaV1BRWUpHNzRJQyIgcGFzc3dvcmQ9IjlYUFVYS3BLYUQxYzVJdXVNRjRPKzZ2NxJ0a1E4aS9yWUp6YlppdlgvZnNiTG51eGY4SnlFT1dUeXMvTnJ1bTAiBwo=
CONFLUENT_API_SECRET: NFJSejlReFNTTXlTcGhXdjNLMHNYY1F6UGNURmdadlNYT0ZXSXViWFJySmx2N3A2WStSenROQnVpYThvNG1NSRo=
kubectl apply -f ./kpow-secrets.yaml --namespace factorhouse
Then run the helm chart (this can be used in conjunction with envFromConfigMap
)
See the Kubernetes documentation on configuring all key value pairs in a secret as environment variables for more information.
helm install --namespace factorhouse --create-namespace kpow ./kpow-ce --set envFromSecret=kpow-secrets --set envFromConfigMap=kpow-config
This helm chart accepts the name of a secret containing sensitive parameters, e.g.
apiVersion: v1
kind: Secret
metadata:
name: kpow-secrets
data:
SASL_JAAS_CONFIG: a3JnLmFwYWNoXS5rYWZrYS5jb21tb24uc2VjdXJpdHkucGxhaW4uUGxhaW5Mb2dpbk2vZHVsZSByZXF1aXJiZCB1c2VybmFtZT0iTFQ1V0ZaV1BRWUpHNzRJQyIgcGFzc3dvcmQ9IjlYUFVYS3BLYUQxYzVJdXVNRjRPKzZ2NxJ0a1E4aS9yWUp6YlppdlgvZnNiTG51eGY4SnlFT1dUeXMvTnJ1bTAiBwo=
CONFLUENT_API_SECRET: NFJSejlReFNTTXlTcGhXdjNLMHNYY1F6UGNURmdadlNYT0ZXSXViWFJySmx2N3A2WStSenROQnVpYThvNG1NSRo=
kubectl apply -f ./kpow-secrets.yaml --namespace factorhouse
Then run the helm chart (this can be used in conjunction with envFromConfigMap
)
See the Kubernetes documentation on configuring all key value pairs in a secret as environment variables for more information.
helm install --namespace factorhouse --create-namespace kpow ./kpow --set envFromSecret=kpow-secrets --set envFromConfigMap=kpow-config
Provide files to the Kpow Pod
There are occasions where you must provide files to the Kpow Pod in order for Kpow to run correctly, such files include:
- RBAC configuration
- SSL Keystores
- SSL Truststores
How you provide these files is down to user preference, we are not able to provide any support or instruction in this regard.
You may find the Kubernetes documentation on injecting data into applications useful.
Kpow memory and CPU requirements
These charts run Kpow with Guaranteed QoS, having resource request and limit set to these values by default:
resources:
limits:
cpu: 2
memory: 8Gi
requests:
cpu: 2
memory: 8Gi
These default resource settings are conservative, suited to a deployment of Kpow that manages multiple Kafka clusters and associated resources.
When running Kpow with a single Kafka cluster you can experiment with reducing those resources as far as our suggested minimum:
Minimum resource requirements
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 1
memory: 2Gi
Adjust these values from the command line like so:
helm install --namespace factorhouse --create-namespace kpow factorhouse/kpow \
--set resources.limits.cpu=1 \
--set resources.limits.memory=2Gi \
--set resources.requests.cpu=1 \
--set resources.requests.memory=2Gi
We recommend always having limits and requests set to the same value, as this set Kpow in Guaranteed QoS and provides a much more reliable operation.
Snappy compression in read-only filesystem
We preset an attribute for Snappy compression in read-only filesystems. It is disabled by default and can be enabled - modify the volume configuration if necessary.
ephemeralTmp:
enabled: true
volume:
emptyDir:
medium: Memory # Optional: for better performance
sizeLimit: "100Mi" # Configurable size