Wavefront packaged by Bitnami
Wavefront is a high-performance streaming analytics platform for monitoring and optimizing your environment and applications.
TL;DR
$ kubectl create namespace wavefront
$ helm install my-release bitnami/wavefront --namespace wavefront \
--set clusterName=<K8s-CLUSTER-NAME> \
--set wavefront.url=https://<YOUR_CLUSTER>.wavefront.com \
--set wavefront.token=<YOUR_API_TOKEN>
Introduction
This chart will deploy the Wavefront Collector for Kubernetes and Wavefront Proxy to your Kubernetes cluster. You can use this chart to install multiple Wavefront Proxy releases, though only one Wavefront Collector for Kubernetes per cluster should be used.
You can learn more about the Wavefront and Kubernetes integration in the official documentation
Bitnami charts can be used with Kubeapps for deployment and management of Helm Charts in clusters. This chart has been tested to work with NGINX Ingress, cert-manager, fluentd and Prometheus on top of the BKPR.
Prerequisites
- Kubernetes 1.19+
- Helm 3.2.0+
- PV provisioner support in the underlying infrastructure
Installing the Chart
To install the chart with the release name my-release (if not already done, create a wavefront namespace):
$ kubectl create namespace wavefront
$ helm install my-release bitnami/wavefront --namespace wavefront \
--set clusterName=<K8s-CLUSTER-NAME> \
--set wavefront.url=https://<YOUR_CLUSTER>.wavefront.com \
--set wavefront.token=<YOUR_API_TOKEN>
The command deploys Wavefront on the Kubernetes cluster in the wavefront namespace using the configuration. The Parameters section lists the parameters that can be configured during installation.
The required parameters are clusterName, wavefront.url and wavefront.token. You will need to provide values for those options for a successful installation of the chart.
Tip
: List all releases using
helm list
Uninstalling the Chart
To uninstall/delete the my-release deployment:
$ helm delete my-release
The command removes all the Kubernetes components associated with the chart and deletes the release. If you want to also remove the namespace please execute kubectl delete namespace wavefront.
Parameters
Global parameters
| Name | Description | Value |
|---|---|---|
global.imageRegistry |
Global Docker image registry | "" |
global.imagePullSecrets |
Global Docker registry secret names as an array | [] |
global.storageClass |
Global StorageClass for Persistent Volume(s) | "" |
Common parameters
| Name | Description | Value |
|---|---|---|
kubeVersion |
Force target Kubernetes version (using Helm capabilities if not set) | "" |
nameOverride |
String to partially override %%COMPONENT_NAME%%.fullname template with a string (will prepend the release name) | "" |
fullnameOverride |
String to fully override %%COMPONENT_NAME%%.fullname template with a string | "" |
commonLabels |
Add labels to all the deployed resources | {} |
commonAnnotations |
Add annotations to all the deployed resources | {} |
extraDeploy |
Extra objects to deploy (value evaluated as a template) | [] |
diagnosticMode.enabled |
Enable diagnostic mode (all probes will be disabled and the command will be overridden) | false |
diagnosticMode.command |
Command to override all containers in the the deployment(s)/statefulset(s) | ["sleep"] |
diagnosticMode.args |
Args to override all containers in the the deployment(s)/statefulset(s) | ["infinity"] |
Wavefront Common parameters
| Name | Description | Value |
|---|---|---|
clusterName |
This is a unique name for the cluster (required) | KUBERNETES_CLUSTER_NAME |
wavefront.url |
Wavefront URL for your cluster (required) | https://YOUR_CLUSTER.wavefront.com |
wavefront.token |
Wavefront API Token (required) | YOUR_API_TOKEN |
wavefront.existingSecret |
Name of an existing secret containing the token | "" |
podSecurityPolicy.create |
Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later | false |
rbac.create |
Specifies whether RBAC resources should be created | true |
rbac.rules |
Custom RBAC rules to set | [] |
serviceAccount.create |
Specifies whether a ServiceAccount should be created | true |
serviceAccount.name |
Name of the service account to use. If not set and create is true, a name is generated using the fullname template. | "" |
serviceAccount.automountServiceAccountToken |
Automount service account token for the server service account | true |
serviceAccount.annotations |
Annotations for service account. Evaluated as a template. Only used if create is true. |
{} |
projectPacific.enabled |
Enable and create role binding for Tanzu Kubernetes cluster | false |
tkgi.enabled |
Properties for TKGI environments. If enabled, a role binding to handle pod security policy will be installed within the TKGI cluster | false |
Collector parameters
| Name | Description | Value |
|---|---|---|
collector.enabled |
Setup and enable the Wavefront collector to gather metrics | true |
collector.image.registry |
Wavefront collector Image registry | docker.io |
collector.image.repository |
Wavefront collector Image repository | bitnami/wavefront-kubernetes-collector |
collector.image.tag |
Wavefront collector Image tag (immutable tags are recommended) | 1.10.0-scratch-r8 |
collector.image.pullPolicy |
Image pull policy | IfNotPresent |
collector.image.pullSecrets |
Specify docker-registry secret names as an array | [] |
collector.hostAliases |
Deployment pod host aliases | [] |
collector.useDaemonset |
Use Wavefront collector in Daemonset mode | true |
collector.usePKSPrefix |
If installing into a TKGi/PKS environment, set this to true. Prefixes metrics with 'pks.kubernetes.' | false |
collector.maxProcs |
Maximum number of CPUs that can be used simultaneously | "" |
collector.logLevel |
Log level. Allowed values: info, debug or trace |
"" |
collector.interval |
Default metrics collection interval | "" |
collector.flushInterval |
How often to force a metrics flush | "" |
collector.sinkDelay |
Timeout for exporting data | "" |
collector.useReadOnlyPort |
Use un-authenticated port for kubelet | false |
collector.useProxy |
Use a Wavefront Proxy to send metrics through | true |
collector.proxyAddress |
Can be used to specify a specific address for the Wavefront Proxy | "" |
collector.kubernetesState |
Collect metrics about Kubernetes resource states | true |
collector.apiServerMetrics |
Collect metrics about Kubernetes API server | false |
collector.tags |
Map of tags to apply to all metrics collected by the collector | {} |
collector.hostOSMetrics |
If set to true, host OS metrics will be collected | false |
collector.filters.metricDenyList |
Optimized metrics collection to omit peripheral metrics. | [] |
collector.filters.tagExclude |
Filter out generated labels | [] |
collector.events.enabled |
Events can also be collected and sent to Wavefront | false |
collector.events.filters |
Optional filtering of events collected | {} |
collector.discovery.enabled |
Rules based and Prometheus endpoints auto-discovery | true |
collector.discovery.annotationPrefix |
When specified, this replaces prometheus.io as the prefix for annotations used to auto-discover Prometheus endpoints |
"" |
collector.discovery.enableRuntimeConfigs |
Whether to enable runtime discovery configurations | true |
collector.discovery.config |
Configuration for rules based auto-discovery | [] |
collector.controlplane.enabled |
Enable metrics for control plane dashboard (default false) | false |
collector.existingConfigmap |
Name of existing ConfigMap with collector configuration | "" |
collector.command |
Override default container command (useful when using custom images) | [] |
collector.args |
Override default container args (useful when using custom images) | [] |
collector.resources.limits |
The resources limits for the collector container | {} |
collector.resources.requests |
The requested resources for the collector container | {} |
collector.containerSecurityContext.enabled |
Enable Container Security Context configuration | true |
collector.containerSecurityContext.runAsUser |
Set Container's Security Context runAsUser | 1001 |
collector.containerSecurityContext.runAsNonRoot |
Set Container's Security Context runAsNonRoot | true |
collector.containerSecurityContext.readOnlyRootFilesystem |
Mount / (root) as a readonly filesystem on container | true |
collector.podSecurityContext.enabled |
Enable Pod Security Context configuration | true |
collector.podSecurityContext.fsGroup |
Group ID for the volumes of the pod | 1001 |
collector.podAffinityPreset |
Wavefront collector pod affinity preset. Ignored if collector.affinity is set. Allowed values: soft or hard |
"" |
collector.podAntiAffinityPreset |
Wavefront collector pod anti-affinity preset. Ignored if collector.affinity is set. Allowed values: soft or hard |
soft |
collector.nodeAffinityPreset.type |
Wavefront collector node affinity preset type. Ignored if collector.affinity is set. Allowed values: soft or hard |
"" |
collector.nodeAffinityPreset.key |
Wavefront collector node label key to match Ignored if collector.affinity is set. |
"" |
collector.nodeAffinityPreset.values |
Wavefront collector node label values to match. Ignored if collector.affinity is set. |
[] |
collector.affinity |
Wavefront collector affinity for pod assignment | {} |
collector.nodeSelector |
Wavefront collector node labels for pod assignment | {} |
collector.tolerations |
Wavefront collector tolerations for pod assignment | [] |
collector.schedulerName |
Name of the k8s scheduler (other than default) | "" |
collector.terminationGracePeriodSeconds |
In seconds, time the given to the %%MAIN_CONTAINER_NAME%% pod needs to terminate gracefully | "" |
collector.topologySpreadConstraints |
Topology Spread Constraints for pod assignment | [] |
collector.podLabels |
Wavefront collector pod extra labels | {} |
collector.podAnnotations |
Annotations for Wavefront collector pods | {} |
collector.priorityClassName |
Wavefront Collector pods' priority | "" |
collector.lifecycleHooks |
Lifecycle hooks for the Wavefront Collector container to automate configuration before or after startup | {} |
collector.customLivenessProbe |
Override default liveness probe | {} |
collector.customReadinessProbe |
Override default readiness probe | {} |
collector.customStartupProbe |
Override default startup probe | {} |
collector.updateStrategy.type |
Update strategy - only really applicable for deployments with RWO PVs attached | RollingUpdate |
collector.extraEnvVars |
Extra environment variables to be set on collector container | [] |
collector.extraEnvVarsCM |
Name of existing ConfigMap containing extra environment variables | "" |
collector.extraEnvVarsSecret |
Name of existing Secret containing extra environment variables | "" |
collector.extraVolumes |
Optionally specify extra list of additional volumes for collector container | [] |
collector.extraVolumeMounts |
Optionally specify extra list of additional volumeMounts for collector container | [] |
collector.initContainers |
Add init containers to the Wavefront proxy pods | [] |
collector.sidecars |
Add sidecars to the Wavefront proxy pods | [] |
Proxy parameters
| Name | Description | Value |
|---|---|---|
proxy.enabled |
Setup and enable Wavefront proxy to send metrics through | true |
proxy.image.registry |
Wavefront proxy image registry | docker.io |
proxy.image.repository |
Wavefront proxy image repository | bitnami/wavefront-proxy |
proxy.image.tag |
Wavefront proxy image tag (immutable tags are recommended) | 11.0.0-debian-10-r11 |
proxy.image.pullPolicy |
Wavefront proxy image pull policy | IfNotPresent |
proxy.image.pullSecrets |
Specify docker-registry secret names as an array | [] |
proxy.hostAliases |
Deployment pod host aliases | [] |
proxy.resources.limits |
The resources limits for the proxy container | {} |
proxy.resources.requests |
The requested resources for the proxy container | {} |
proxy.containerSecurityContext.enabled |
Enable Container Security Context configuration | true |
proxy.containerSecurityContext.runAsUser |
Set Container's Security Context runAsUser | 1001 |
proxy.containerSecurityContext.runAsNonRoot |
Set Container's Security Context runAsNonRoot | true |
proxy.containerSecurityContext.readOnlyRootFilesystem |
Mount / (root) as a readonly filesystem on Proxy container | true |
proxy.podSecurityContext.enabled |
Enable Pod Security Context configuration | true |
proxy.podSecurityContext.fsGroup |
Group ID for the volumes of the pod | 1001 |
proxy.podAffinityPreset |
Wavefront proxy pod affinity preset. Ignored if proxy.affinity is set. Allowed values: soft or hard |
"" |
proxy.podAntiAffinityPreset |
Wavefront proxy pod anti-affinity preset. Ignored if proxy.affinity is set. Allowed values: soft or hard |
soft |
proxy.nodeAffinityPreset.type |
Wavefront proxy node affinity preset type. Ignored if proxy.affinity is set. Allowed values: soft or hard |
"" |
proxy.nodeAffinityPreset.key |
Wavefront proxy node label key to match Ignored if proxy.affinity is set. |
"" |
proxy.nodeAffinityPreset.values |
Wavefront proxy node label values to match. Ignored if proxy.affinity is set. |
[] |
proxy.affinity |
Wavefront proxy affinity for pod assignment | {} |
proxy.nodeSelector |
Wavefront proxy node labels for pod assignment | {} |
proxy.tolerations |
Wavefront proxy tolerations for pod assignment | [] |
proxy.schedulerName |
Name of the k8s scheduler (other than default) | "" |
proxy.terminationGracePeriodSeconds |
In seconds, time the given to the %%MAIN_CONTAINER_NAME%% pod needs to terminate gracefully | "" |
proxy.topologySpreadConstraints |
Topology Spread Constraints for pod assignment | [] |
proxy.podLabels |
Wavefront proxy pod extra labels | {} |
proxy.podAnnotations |
Annotations for Wavefront proxy pods | {} |
proxy.priorityClassName |
Wavefront proxy pods' priority class name | "" |
proxy.lifecycleHooks |
Lifecycle hooks for the Wavefront proxy container to automate configuration before or after startup | {} |
proxy.livenessProbe.enabled |
Enable livenessProbe | true |
proxy.livenessProbe.initialDelaySeconds |
Initial delay seconds for livenessProbe | 10 |
proxy.livenessProbe.periodSeconds |
Period seconds for livenessProbe | 20 |
proxy.livenessProbe.timeoutSeconds |
Timeout seconds for livenessProbe | 1 |
proxy.livenessProbe.failureThreshold |
Failure threshold for livenessProbe | 6 |
proxy.livenessProbe.successThreshold |
Success threshold for livenessProbe | 1 |
proxy.readinessProbe.enabled |
Enable readinessProbe | true |
proxy.readinessProbe.initialDelaySeconds |
Initial delay seconds for readinessProbe | 10 |
proxy.readinessProbe.periodSeconds |
Period seconds for readinessProbe | 20 |
proxy.readinessProbe.timeoutSeconds |
Timeout seconds for readinessProbe | 1 |
proxy.readinessProbe.failureThreshold |
Failure threshold for readinessProbe | 6 |
proxy.readinessProbe.successThreshold |
Success threshold for readinessProbe | 1 |
proxy.startupProbe.enabled |
Enable startupProbe | false |
proxy.startupProbe.initialDelaySeconds |
Initial delay seconds for startupProbe | 10 |
proxy.startupProbe.periodSeconds |
Period seconds for startupProbe | 20 |
proxy.startupProbe.timeoutSeconds |
Timeout seconds for startupProbe | 1 |
proxy.startupProbe.failureThreshold |
Failure threshold for startupProbe | 6 |
proxy.startupProbe.successThreshold |
Success threshold for startupProbe | 1 |
proxy.customLivenessProbe |
Override default liveness probe | {} |
proxy.customReadinessProbe |
Override default readiness probe | {} |
proxy.customStartupProbe |
Override default startup probe | {} |
proxy.updateStrategy.type |
Update strategy - only really applicable for deployments with RWO PVs attached | RollingUpdate |
proxy.extraEnvVars |
Extra environment variables to be set on proxy container | [] |
proxy.extraEnvVarsCM |
Name of existing ConfigMap containing extra environment variables | "" |
proxy.extraEnvVarsSecret |
Name of existing Secret containing extra environment variables | "" |
proxy.extraVolumes |
Optionally specify extra list of additional volumes for proxy container | [] |
proxy.extraVolumeMounts |
Optionally specify extra list of additional volumeMounts for proxy container | [] |
proxy.initContainers |
Add init containers to the Wavefront proxy pods | [] |
proxy.sidecars |
Add sidecars to the Wavefront proxy pods | [] |
proxy.replicaCount |
ReplicaCount to deploy for Wavefront proxy (usually 1) | 1 |
proxy.port |
The port number the proxy will listen on for metrics in Wavefront data format | 2878 |
proxy.tracePort |
The port number the proxy will listen on for tracing spans in Wavefront trace data format (usually 30000) | "" |
proxy.jaegerPort |
The port number the proxy will listen on for tracing spans in Jaeger data format (usually 30001) | "" |
proxy.traceJaegerHttpListenerPort |
TCP ports to receive Jaeger Thrift formatted data via HTTP. The data is then sent to Wavefront in Wavefront span format (usually 30080) | "" |
proxy.traceJaegerGrpcListenerPort |
TCP ports to receive Jaeger GRPC formatted data via HTTP (usually 14250) | "" |
proxy.zipkinPort |
The port number the proxy will listen on for tracing spans in Zipkin data format (usually 9411) | "" |
proxy.traceSamplingRate |
Sampling rate to apply to tracing spans sent to the proxy | "" |
proxy.traceSamplingDuration |
When set to greater than 0, spans that exceed this duration will force trace to be sampled (ms) | "" |
proxy.traceJaegerApplicationName |
Custom application name for traces received on Jaeger's traceJaegerListenerPorts or traceJaegerHttpListenerPorts. | "" |
proxy.traceZipkinApplicationName |
Custom application name for traces received on Zipkin's traceZipkinListenerPorts. | "" |
proxy.histogramPort |
Port for histogram distribution format data (usually 40000) | "" |
proxy.histogramMinutePort |
Port to accumulate 1-minute based histograms on Wavefront data format (usually 40001) | "" |
proxy.histogramHourPort |
Port to accumulate 1-hour based histograms on Wavefront data format (usually 40002) | "" |
proxy.histogramDayPort |
Port to accumulate 1-day based histograms on Wavefront data format (usually 40003) | "" |
proxy.deltaCounterPort |
Port to accumulate 1-minute delta counters on Wavefront data format (usually 50000) | "" |
proxy.command |
Override default container command (useful when using custom images) | [] |
proxy.args |
Any configuration property can be passed to the proxy via command line args in the format: --<property_name> <value> |
"" |
proxy.heap |
Wavefront proxy Java heap maximum usage (java -Xmx command line option) | "" |
proxy.existingConfigmap |
Name of existing ConfigMap with Proxy preprocessor configuration | "" |
proxy.preprocessor |
Preprocessor rules is a powerful way to apply filtering or to enhance metrics as they flow | {} |
Kube State Metrics parameters
| Name | Description | Value |
|---|---|---|
kube-state-metrics.enabled |
If enabled the kube-state-metrics chart will be installed as a subchart and the collector will be configured to capture metrics. | false |
Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,
$ helm install my-release \
--set proxy.replicaCount=3 \
bitnami/wavefront
The above command sets 3 proxy replicas.
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
$ helm install my-release -f values.yaml bitnami/wavefront
Tip
: You can use the default values.yaml
Configuration and installation details
Rolling vs Immutable tags
It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image.
Bitnami will release a new chart updating its containers if a new version of the main container, significant changes, or critical vulnerabilities exist.
Use DaemonSet (preferred) or Deployment
It is possible to deploy the Collector as a Daemonset or a Deployment. Refer to the documentation for detailed information on the differences between these options.
The most common use case is to deploy the Wavefront Collector as a DaemonSet to obtain information from the different nodes. However, there are some use cases where a Deployment can be used to gather data (at application level) without deploying a pod per node.
Use a different Wavefront version
To modify the application version used in this chart, specify a different version of the image using the image.tag parameter and/or a different repository using the image.repository parameter. Refer to the chart documentation for more information on these parameters and how to use them with images from a private registry.
Use Sidecars and Init Containers
If additional containers are needed in the same pod (such as additional metrics or logging exporters), they can be defined using the sidecars config parameter. Similarly, extra init containers can be added using the initContainers parameter.
Refer to the chart documentation for more information on, and examples of, configuring and using sidecars and init containers.
Add extra environment variables
To add extra environment variables (useful for advanced operations like custom init scripts), use the extraEnvVars property.
extraEnvVars:
- name: WAVEFRONT_WHATEVER
value: value
Alternatively, use a ConfigMap or a Secret with the environment variables. To do so, use the extraEnvVarsCM or the extraEnvVarsSecret values.
Set Pod affinity
This chart allows you to set your custom affinity using the XXX.affinity parameter(s). Find more information about Pod's affinity in the kubernetes documentation.
As an alternative, you can use of the preset configurations for pod affinity, pod anti-affinity, and node affinity available at the bitnami/common chart. To do so, set the XXX.podAffinityPreset, XXX.podAntiAffinityPreset, or XXX.nodeAffinityPreset parameters.
Troubleshooting
Find more information about how to deal with common errors related to Bitnami's Helm charts in this troubleshooting guide.
Upgrading
To 3.0.0
This major updates the kube-state-metrics subchart to it newest major, 2.0.0, which contains name changes to a few of its values. For more information on this subchart's major, please refer to kube-state-metrics upgrade notes.
To 2.0.0
The wavefront-collector container has been moved to scratch. From now on the content of wavefront-collector container will be just the wavefront-collector binary, so it will not have a shell.
To 1.0.0
On November 13, 2020, Helm v2 support formally ended. This major version is the result of the required changes applied to the Helm Chart to be able to incorporate the different features added in Helm v3 and to be consistent with the Helm project itself regarding the Helm v2 EOL.
Learn more about this change and related upgrade considerations.
License
Copyright © 2022 Bitnami
Licensed 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.