[bitnami/wavefront-adapter-for-istio] Add chart (#5868)

* [bitnami/wavefront-adapter-for-istio] Add chart

* fix incorrect kind

* Fix issues

* Make istio objects optional

* Update bitnami/wavefront-adapter-for-istio/README.md

Co-authored-by: Alejandro Moreno <amorenoc@vmware.com>

* Bump wavefront dep

* [bitnami/wavefront-adapter-for-istio] Update components versions

Signed-off-by: Bitnami Containers <containers@bitnami.com>

Co-authored-by: Alejandro Moreno <amorenoc@vmware.com>
Co-authored-by: Bitnami Containers <containers@bitnami.com>
This commit is contained in:
Javier J. Salmerón-García
2021-03-25 23:37:42 +01:00
committed by GitHub
co-authored by Alejandro Moreno Bitnami Containers
parent fe13a2a076
commit 1e1f5e3893
18 changed files with 1669 additions and 0 deletions
@@ -0,0 +1,9 @@
dependencies:
- name: wavefront
repository: https://charts.bitnami.com/bitnami
version: 2.0.1
- name: common
repository: https://charts.bitnami.com/bitnami
version: 1.4.2
digest: sha256:c3646beb3cc1cf1f77ac0f469b265f48cfb1c12b8d80dab8b69d9ec070cf40ec
generated: "2021-03-25T15:33:52.335524027Z"
@@ -0,0 +1,33 @@
annotations:
category: Infrastructure
apiVersion: v2
appVersion: 0.1.5
dependencies:
- condition: wavefront.enabled
name: wavefront
repository: https://charts.bitnami.com/bitnami
version: 2.x.x
- name: common
repository: https://charts.bitnami.com/bitnami
tags:
- bitnami-common
version: 1.x.x
description: Wavefront Adapter for Istio is a lightweight Istio adapter that exposes Istio metrics to Wavefront. It supports Istio v1.4+ and Kubernetes v1.15+.
engine: gotpl
home: https://github.com/vmware/wavefront-adapter-for-istio/
icon: https://bitnami.com/assets/stacks/wavefront-adapter-for-istio/img/wavefront-adapter-for-istio-stack-220x234.png
keywords:
- alerting
- adapter
- istio
- metrics
- monitoring
- observability
- wavefront
maintainers:
- email: containers@bitnami.com
name: Bitnami
name: wavefront-adapter-for-istio
sources:
- https://github.com/bitnami/bitnami-docker-wavefront-adapter-for-istio
version: 0.1.0
@@ -0,0 +1,239 @@
# Wavefront Adapter for Istio
[Wavefront Adapter for Istio](https://github.com/vmware/wavefront-adapter-for-istio/) is a lightweight Istio adapter that exposes Istio metrics to Wavefront.
## TL;DR
```console
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/wavefront-adapter-for-istio
```
## Introduction
Bitnami charts for Helm are carefully engineered, actively maintained and are the quickest and easiest way to deploy containers on a Kubernetes cluster that are ready to handle production workloads.
This will deploy a [Wavefront Adapter for Istio](https://github.com/vmware/wavefront-adapter-for-istio/) Deployment in a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
Bitnami charts can be used with [Kubeapps](https://kubeapps.com/) for deployment and management of Helm Charts in clusters. This Helm chart has been tested on top of [Bitnami Kubernetes Production Runtime](https://kubeprod.io/) (BKPR). Deploy BKPR to get automated TLS certificates, logging and monitoring for your applications.
## Prerequisites
- Kubernetes 1.15+
- Helm 3.1.0
- Istio v1.4, v1.5 and v1.6 with `Mixer` support
In order to enable the `Mixer` in Istio versions starting from v1.5, execute the following commands:
##### Istio v1.5.x
```console
istioctl manifest apply --set values.prometheus.enabled=true --set values.telemetry.v1.enabled=true --set values.telemetry.v2.enabled=false --set components.citadel.enabled=true --set components.telemetry.enabled=true
```
##### Istio v1.6.x
```console
istioctl install --set values.prometheus.enabled=true --set values.telemetry.v1.enabled=true --set values.telemetry.v2.enabled=false --set components.citadel.enabled=true --set components.telemetry.enabled=true
```
## Installing the Chart
To install the chart with the release name `my-release`:
```console
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/wavefront-adapter-for-istio
```
These commands deploy wavefront-adapter-for-istio on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation.
> **Tip**: List all releases using `helm list`
## Uninstalling the Chart
To uninstall/delete the `my-release` helm release:
```console
$ helm uninstall my-release
```
The command removes all the Kubernetes components associated with the chart and deletes the release.
## Parameters
### Global parameters
| Name | Description | Value |
|---------------------------|----------------------------------------------------|-----------------|
| `global.imageRegistry` | Global Docker image registry | `nil` |
| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` |
| `kubeVersion` | Override Kubernetes version | `nil` |
| `nameOverride` | String to partially override common.names.fullname | `nil` |
| `fullnameOverride` | String to fully override common.names.fullname | `nil` |
| `commonLabels` | Labels to add to all deployed objects | `{}` |
| `commonAnnotations` | Annotations to add to all deployed objects | `{}` |
| `clusterDomain` | Kubernetes cluster domain name | `cluster.local` |
| `extraDeploy` | Array of extra objects to deploy with the release | `[]` |
### Wavefront Adapter for Istio deployment parameters
| Name | Description | Value |
|-----------------------------------------|-------------------------------------------------------------------------------------------|---------------------------------------|
| `image.registry` | Adapter image registry | `docker.io` |
| `image.repository` | Adapter image repository | `bitnami/wavefront-adapter-for-istio` |
| `image.tag` | Adapter image tag (immutabe tags are recommended) | `1.0.3-debian-10-r0` |
| `image.pullPolicy` | Adapter image pull policy | `IfNotPresent` |
| `image.pullSecrets` | Adapter image pull secrets | `[]` |
| `image.debug` | Enable image debug mode | `false` |
| `livenessProbe.enabled` | Enable livenessProbe | `true` |
| `livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `readinessProbe.enabled` | Enable readinessProbe | `true` |
| `readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `command` | Override default container command (useful when using custom images) | `[]` |
| `args` | Override default container args (useful when using custom images) | `[]` |
| `hostAliases` | Add deployment host aliases | `[]` |
| `resources.limits` | The resources limits for the Adapter container | `{}` |
| `resources.requests` | The requested resourcesc for the Adapter container | `{}` |
| `containerSecurityContext.enabled` | Enabled Adapter containers' Security Context | `true` |
| `containerSecurityContext.runAsUser` | Set Adapter container's Security Context runAsUser | `1001` |
| `containerSecurityContext.runAsNonRoot` | Set Adapter container's Security Context runAsNonRoot | `true` |
| `podSecurityContext.enabled` | Enabled Adapter pods' Security Context | `true` |
| `podSecurityContext.fsGroup` | Set Adapter pod's Security Context fsGroup | `1001` |
| `podAffinityPreset` | Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `nodeAffinityPreset.type` | Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `nodeAffinityPreset.key` | Node label key to match. Ignored if `affinity` is set | `""` |
| `nodeAffinityPreset.values` | Node label values to match. Ignored if `affinity` is set | `[]` |
| `affinity` | Affinity for pod assignment | `{}` |
| `nodeSelector` | Node labels for pod assignment | `{}` |
| `tolerations` | Tolerations for pod assignment | `[]` |
| `podLabels` | Extra labels for Adapter pods | `{}` |
| `priorityClassName` | Adapter pod priority | `""` |
| `lifecycleHooks` | Add lifecycle hooks to the Adapter deployment | `{}` |
| `customLivenessProbe` | Override default liveness probe | `{}` |
| `customReadinessProbe` | Override default readiness probe | `{}` |
| `updateStrategy.type` | Adapter deployment update strategy | `RollingUpdate` |
| `containerPort` | Adapter container port | `8000` |
| `extraEnvVars` | Add extra environment variables to the Adapter container | `[]` |
| `extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars | `nil` |
| `extraEnvVarsSecret` | Name of existing Secret containing extra env vars | `nil` |
| `extraVolumes` | Optionally specify extra list of additional volumes for Adapter pods | `[]` |
| `extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for Adapter container(s) | `[]` |
| `initContainers` | Add additional init containers to the Adapter pods | `{}` |
| `sidecars` | Add additional sidecar containers to the Adapter pod | `{}` |
| `externalProxy.host` | Host of a wavefront-proxy instance (required if wavefront.enabled = false) | `nil` |
| `externalProxy.port` | Host of a wavefront-proxy instance (required if wavefront.enabled = false) | `2878` |
| `adapterLogLevel` | Adapter log level | `info` |
| `istio.namespace` | Namespace to deploy the Istio objects | `istio-system` |
| `istio.apiVersion` | Override Istio API version | `nil` |
| `metrics.flushInterval` | Interval to flush the metrics | `5s` |
| `metrics.source` | Source tag for all metrics handled by the adapter | `istio` |
| `metrics.prefix` | Prefix to prepend to all metrics handled by the adapter | `istio` |
| `metrics.http` | Enable the collection of http metrics | `true` |
| `metrics.tcp` | Enable the collection of tcp metrics | `true` |
### Traffic Exposure Parameters
| Name | Description | Value |
|------------------------------------|----------------------------------------------|-------------|
| `service.type` | Adapter service type | `ClusterIP` |
| `service.port` | Adapter service port | `8000` |
| `service.loadBalancerIP` | Adapter service LoadBalancer IP | `nil` |
| `service.loadBalancerSourceRanges` | loadBalancerIP source ranges for the Service | `nil` |
| `service.nodePorts.http` | NodePort for the HTTP endpoint | `""` |
| `service.externalTrafficPolicy` | External traffic policy for the service | `Cluster` |
### Wavefront sub-chart parameters
| Name | Description | Value |
|-----------------------------------|-------------------------------------------------------------------------------------------|--------------------------------------|
| `wavefront.enabled` | Deploy Wavefront chart (necessary if externalProxyHost is not set) | `true` |
| `wavefront.wavefront.url` | Wavefront SAAS service URL | `https://YOUR_CLUSTER.wavefront.com` |
| `wavefront.wavefront.token` | Wavefront SAAS token | `YOUR_API_TOKEN` |
| `wavefront.collector.enabled` | Deploy Wavefront collector (not used by the Adapter pod) | `false` |
| `wavefront.rbac.create` | Create RBAC rules (not necessary as the Adapter only uses wavefront-proxy) | `false` |
| `wavefront.proxy.enabled` | Deploy Wavefront Proxy (required if externalProxyHost is not set) | `true` |
| `wavefront.proxy.port` | Deployed Wavefront Proxy port (required if externalProxyHost is not set) | `2878` |
| `wavefront.serviceAccount.create` | Create Wavefront serivce account (not necessary as the Adapter only uses wavefront-proxy) | `false` |
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
```console
$ helm install my-release \
--set livenessProbe.successThreshold=5 \
bitnami/wavefront-adapter-for-istio
```
The above command sets the `livenessProbe.successThreshold` to `5`.
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
```bash
$ helm install my-release -f values.yaml bitnami/wavefront-adapter-for-istio
```
## Configuration and installation details
### [Rolling VS Immutable tags](https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/)
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.
### Connecting to Wavefront
The Wavefront Adapter for Istio chart needs to be connected to a Wavefront instance. This can be done in three different ways:
- Deploying the Wavefront subchart, using only the Wavefront Proxy component (default behavior). This is done by setting `wavefront.enabled=true` and `wavefront.proxy.enabled=true`. We recommend disabling the rest of the Wavefront sub-chart resources as they would not be used by the Prometheus Storage Adapter. In this case, you should not set the `externalProxy.host` value. You also need to configure the Wavefront SaaS URL and token using the `wavefont.wavefront.url` and `wavefront.wavefront.token`.
```yaml
externalProxy:
host:
port:
wavefront:
enabled: true
collector:
enabled: false
rbac:
create: false
serviceAccount:
create: false
proxy:
enabled: true
wavefront:
url: http://WAVEFRONT_URL
token: WAVEFRONT_TOKEN
```
- Using an external Wavefront Proxy instance. This is done by setting the `externalProxy.host` and `externalProxy.port` values. In this case, you should not set the `wavefront.enabled` value to `true`. You also need to configure the Wavefront SaaS URL and token using the `wavefont.wavefront.url` and `wavefront.wavefront.token`.
```yaml
externalProxy:
host:
port:
wavefront:
enabled: false
wavefront:
url: http://WAVEFRONT_URL
token: WAVEFRONT_TOKEN
```
- Use direct ingestion without a Wavefront Proxy instance. This is done by not setting the `externalProxy` values and setting the `wavefront.enabled` value to false.
## Troubleshooting
Find more information about how to deal with common errors related to Bitnamis Helm charts in [this troubleshooting guide](https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues).
## Upgrading
```bash
$ helm upgrade my-release bitnami/wavefront-adapter-for-istio
```
@@ -0,0 +1,6 @@
wavefront:
enabled: false
externalProxy:
host: test-proxy
port: 1234
@@ -0,0 +1,20 @@
** Please be patient while the chart is being deployed **
1. Get the application URL by running these commands:
{{- if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "common.names.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ template "common.names.fullname" . }}
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "common.names.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
echo "The renconciler is available at http://127.0.0.1:{{ .Values.service.port }}"
kubectl port-forward svc/{{ template "common.names.fullname" . }} {{ .Values.service.port }}:{{ .Values.service.port }} &
{{- end }}
{{- include "common.warnings.rollingTag" .Values.image }}
{{- include "wfafi.validateValues" . }}
@@ -0,0 +1,87 @@
{{/*
Return the proper wavefront-adapter-for-istio image name
*/}}
{{- define "wfafi.image" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "wfafi.proxy.fullname" -}}
{{- printf "%s-%s" .Release.Name "wavefront-proxy" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Return the proper Docker Image Registry Secret Names
*/}}
{{- define "wfafi.imagePullSecrets" -}}
{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}}
{{- end -}}
{{/*
Return the proper Docker Image Registry Secret Names
*/}}
{{- define "wfafi.istio.apiVersion" -}}
{{- if .Values.istio.apiVersion -}}
{{- .Values.istio.apiVersion -}}
{{- else -}}
{{ print "config.istio.io/v1alpha2" }}
{{- end -}}
{{- end -}}
{{/*
Compile all warnings into a single message.
*/}}
{{- define "wfafi.validateValues" -}}
{{- $messages := list -}}
{{- $messages := append $messages (include "wfafi.validateValues.proxy" .) -}}
{{- $messages := without $messages "" -}}
{{- $message := join "\n" $messages -}}
{{- if $message -}}
{{- printf "\nVALUES VALIDATION:\n%s" $message -}}
{{- end -}}
{{- end -}}
{{/* Validate values of Wavefront Adapter for Istio - Wavefront Proxy configuration */}}
{{- define "wfafi.validateValues.proxy" -}}
{{- if and (.Values.wavefront.enabled) (not .Values.wavefront.proxy.enabled) -}}
wavefront-adapter-for-istio: SubchartProxyNotDeployed
The Wavefront subchart is being deployed without the mandatory Wavefront Proxy instance. Set wavefront.proxy.enabled=true. We recommend the following values:
wavefront:
enabled: true
collector:
enabled: false
rbac:
create: false
serviceAccount:
create: false
proxy:
enabled: true
{{- end }}
{{- if and .Values.wavefront.enabled .Values.externalProxy.host -}}
wavefront-adapter-for-istio: ConflictingProxies
The Wavefront subchart is being deployed and an external Wavefront Proxy is set. Select ONLY one of the following options:
1) Deploy the Wavefront subchart with the Wavefront Proxy. Recommended values:
wavefront:
enabled: true
collector:
enabled: false
rbac:
create: false
serviceAccount:
create: false
proxy:
enabled: true
2) Use an existing Wavefront Proxy instance. Set the externalProxy.host and externalProxy.port values
3) Do not use Wavefront Proxy and connect directly to Wavefront by setting wavefront.enabled=false and not setting the externalProxy.host value
{{- end }}
{{- end -}}
@@ -0,0 +1,149 @@
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
kind: Deployment
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ template "common.names.fullname" . }}
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
{{- if .Values.updateStrategy }}
strategy: {{- toYaml .Values.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
template:
metadata:
annotations:
{{- if .Values.podAnnotations }}
{{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
{{- include "wfafi.imagePullSecrets" . | nindent 6 }}
{{- if .Values.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "component" "wavefront-adapter-for-istio" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "component" "wavefront-adapter-for-istio" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.priorityClassName }}
priorityClassName: {{ .Values.priorityClassName | quote }}
{{- end }}
{{- if .Values.podSecurityContext.enabled }}
securityContext: {{- omit .Values.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }}
{{- end }}
containers:
- name: wavefront-adapter-for-istio
image: {{ template "wfafi.image" . }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if .Values.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }}
{{- else }}
command:
- wavefront
{{- end }}
{{- if .Values.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }}
{{- else }}
args:
- {{ .Values.containerPort | quote }}
{{- end }}
env:
{{- if .Values.extraEnvVars }}
{{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.extraEnvVarsSecret "context" $) }}
{{- end }}
{{- if .Values.resources }}
resources: {{- toYaml .Values.resources | nindent 12 }}
{{- end }}
ports:
- containerPort: {{ .Values.containerPort }}
name: grpc
{{- if .Values.livenessProbe.enabled }}
livenessProbe:
exec:
# As it is a grpc port, we cannot httpGet. tcpSocket cannot be used either
# because it adds noise in the logs
command:
- bash
- -ec
- |
ps auxf | grep wavefront
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
{{- else if .Values.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.readinessProbe.enabled }}
readinessProbe:
exec:
# As it is a grpc port, we cannot httpGet. tcpSocket cannot be used either
# because it adds noise in the logs
command:
- bash
- -ec
- |
ps auxf | grep wavefront
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
{{- else if .Values.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.extraVolumeMounts }}
volumeMounts: {{- include "common.tplvalues.render" (dict "value" .Values.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.sidecars "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.extraVolumes }}
volumes: {{- include "common.tplvalues.render" (dict "value" .Values.extraVolumes "context" $) | nindent 8 }}
{{- end }}
@@ -0,0 +1,4 @@
{{- range .Values.extraDeploy }}
---
{{ include "common.tplvalues.render" (dict "value" . "context" $) }}
{{- end }}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,187 @@
{{- if .Values.istio.create }}
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: attributemanifest
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
# We cannot set a different name: https://istio.io/latest/zh/docs/reference/config/policy-and-telemetry/istio.policy.v1beta1/
name: istio-proxy
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
attributes:
origin.ip:
valueType: IP_ADDRESS
origin.uid:
valueType: STRING
origin.user:
valueType: STRING
request.headers:
valueType: STRING_MAP
request.total_size:
valueType: INT64
request.id:
valueType: STRING
request.host:
valueType: STRING
request.method:
valueType: STRING
request.path:
valueType: STRING
request.reason:
valueType: STRING
request.referer:
valueType: STRING
request.scheme:
valueType: STRING
request.size:
valueType: INT64
request.time:
valueType: TIMESTAMP
request.useragent:
valueType: STRING
response.code:
valueType: INT64
response.duration:
valueType: DURATION
response.headers:
valueType: STRING_MAP
response.total_size:
valueType: INT64
response.size:
valueType: INT64
response.time:
valueType: TIMESTAMP
source.uid:
valueType: STRING
source.user: # DEPRECATED
valueType: STRING
source.principal:
valueType: STRING
destination.principal:
valueType: STRING
destination.uid:
valueType: STRING
connection.event:
valueType: STRING
connection.id:
valueType: STRING
connection.received.bytes:
valueType: INT64
connection.received.bytes_total:
valueType: INT64
connection.sent.bytes:
valueType: INT64
connection.sent.bytes_total:
valueType: INT64
connection.duration:
valueType: DURATION
connection.mtls:
valueType: BOOL
connection.requested_server_name:
valueType: STRING
context.protocol:
valueType: STRING
context.timestamp:
valueType: TIMESTAMP
context.time:
valueType: TIMESTAMP
context.reporter.kind:
valueType: STRING
context.reporter.uid:
valueType: STRING
api.service:
valueType: STRING
api.version:
valueType: STRING
api.operation:
valueType: STRING
api.protocol:
valueType: STRING
request.auth.principal:
valueType: STRING
request.auth.audiences:
valueType: STRING
request.auth.claims:
valueType: STRING_MAP
request.auth.raw_claims:
valueType: STRING
request.auth.presenter:
valueType: STRING
request.api_key:
valueType: STRING
---
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: attributemanifest
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
# We cannot set a different name: https://istio.io/latest/zh/docs/reference/config/policy-and-telemetry/istio.policy.v1beta1/
name: kubernetes
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
attributes:
source.ip:
valueType: IP_ADDRESS
source.labels:
valueType: STRING_MAP
source.name:
valueType: STRING
source.namespace:
valueType: STRING
source.owner:
valueType: STRING
source.service: # DEPRECATED
valueType: STRING
source.serviceAccount:
valueType: STRING
source.services:
valueType: STRING
source.workload.uid:
valueType: STRING
source.workload.name:
valueType: STRING
source.workload.namespace:
valueType: STRING
destination.ip:
valueType: IP_ADDRESS
destination.labels:
valueType: STRING_MAP
destination.metadata:
valueType: STRING_MAP
destination.name:
valueType: STRING
destination.namespace:
valueType: STRING
destination.owner:
valueType: STRING
destination.service: # DEPRECATED
valueType: STRING
destination.service.uid:
valueType: STRING
destination.service.name:
valueType: STRING
destination.service.namespace:
valueType: STRING
destination.service.host:
valueType: STRING
destination.serviceAccount:
valueType: STRING
destination.workload.uid:
valueType: STRING
destination.workload.name:
valueType: STRING
destination.workload.namespace:
valueType: STRING
{{- end }}
@@ -0,0 +1,93 @@
{{- if .Values.istio.create }}
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: handler
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-wavefront-handler
namespace: {{ .Values.istio.namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
adapter: {{ include "common.names.fullname" . }}-wavefront
connection:
address: {{ printf "%s.%s.svc.%s:%d" (include "common.names.fullname" .) .Release.Namespace .Values.clusterDomain (int .Values.service.port) }}
params:
{{- if .Values.wavefront.proxy.enabled }}
proxy:
address: {{ printf "%s.%s.svc.%s:%d" (include "wfafi.proxy.fullname" .) .Release.Namespace .Values.clusterDomain (int .Values.wavefront.proxy.port) }}
{{- else if .Values.externalProxy.host }}
proxy:
address: {{ printf "%s:%s" .Values.externalProxy.host (int .Values.externalProxy.port) }}
{{- else }}
direct:
server: {{ .Values.wavefront.wavefront.url }}
token: {{ .Values.wavefront.wavefront.token }}
{{- end }}
flushInterval: {{ .Values.metrics.flushInterval }}
source: {{ .Values.metrics.source }}
prefix: {{ .Values.metrics.prefix }}
metrics:
{{- if eq .Values.metrics.http true }}
- name: requestsize
instanceName: {{ include "common.names.fullname" . }}-requestsize.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
- name: requestcount
instanceName: {{ include "common.names.fullname" . }}-requestcount.instance.{{ .Release.Namespace }}
type: DELTA_COUNTER
- name: requestduration
instanceName: {{ include "common.names.fullname" . }}-requestduration.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
- name: responsesize
instanceName: {{ include "common.names.fullname" . }}-responsesize.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
{{- end }}
{{- if eq .Values.metrics.tcp true }}
- name: tcpsentbytes
instanceName: {{ include "common.names.fullname" . }}-tcpsentbytes.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
- name: tcpreceivedbytes
instanceName: {{ include "common.names.fullname" . }}-tcpreceivedbytes.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
- name: tcpconnectionsopened
instanceName: {{ include "common.names.fullname" . }}-tcpconnectionsopened.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
- name: tcpconnectionsclosed
instanceName: {{ include "common.names.fullname" . }}-tcpconnectionsclosed.instance.{{ .Release.Namespace }}
type: HISTOGRAM
sample:
expDecay:
reservoirSize: 1024
alpha: 0.015
{{- end }}
logs:
level: {{ .Values.adapterLogLevel }}
{{- end }}
@@ -0,0 +1,117 @@
{{- if and .Values.istio.create .Values.metrics.http }}
# requestsize instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-requestsize
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: request.total_size | 0
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
---
# requestcount instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-requestcount
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: 1
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
---
# requestduration instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-requestduration
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: response.duration | "0ms"
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
---
# responsesize instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-responsesize
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: response.total_size | 0
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
{{- end }}
@@ -0,0 +1,117 @@
{{- if and .Values.istio.create .Values.metrics.tcp }}
# tcpsentbytes instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-tcpsentbytes
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: connection.sent.bytes | 0
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
---
# tcpreceivedbytes instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-tcpreceivedbytes
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: connection.received.bytes | 0
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
---
# tcpconnectionsopened instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-tcpconnectionsopened
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: 1
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
---
# tcpconnectionsclosed instance for template metric
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: instance
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-tcpconnectionsclosed
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
template: {{ include "common.names.fullname" . }}-metric
params:
value: 1
dimensions:
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server")
source_service: source.workload.name | "unknown"
source_service_namespace: source.workload.namespace | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service.name | "unknown"
destination_service_namespace: destination.service.namespace | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
{{- end }}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,25 @@
{{- if and .Values.istio.create .Values.metrics.http }}
# rule to dispatch to handler wavefront-handler
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: rule
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-wavefront-http-rule
namespace: {{ .Values.istio.namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
match: context.protocol == "http"
actions:
- handler: {{ include "common.names.fullname" . }}-wavefront-handler.{{ .Values.istio.namespace }}
instances:
- {{ include "common.names.fullname" . }}-requestsize.instance.{{ .Release.Namespace }}
- {{ include "common.names.fullname" . }}-requestcount.instance.{{ .Release.Namespace }}
- {{ include "common.names.fullname" . }}-requestduration.instance.{{ .Release.Namespace }}
- {{ include "common.names.fullname" . }}-responsesize.instance.{{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,60 @@
{{- if and .Values.istio.create .Values.metrics.tcp }}
# rule to dispatch tcp metrics to handler wavefront-handler
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: rule
metadata:
name: {{ include "common.names.fullname" . }}-wavefront-tcp-rule
namespace: {{ .Values.istio.namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
match: context.protocol == "tcp"
actions:
- handler: {{ include "common.names.fullname" . }}-wavefront-handler.{{ .Values.istio.namespace }}
instances:
- {{ include "common.names.fullname" . }}-tcpsentbytes.instance.{{ .Release.Namespace }}
- {{ include "common.names.fullname" . }}-tcpreceivedbytes.instance.{{ .Release.Namespace }}
---
# rule to dispatch tcp connection open metric to handler wavefront-handler
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: rule
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-wavefront-tcp-connection-open-rule
namespace: {{ .Values.istio.namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
match: context.protocol == "tcp" && connection.event == "open"
actions:
- handler: {{ include "common.names.fullname" . }}-wavefront-handler.{{ .Values.istio.namespace }}
instances:
- {{ include "common.names.fullname" . }}-tcpconnectionsopened.instance.{{ .Release.Namespace }}
---
# rule to dispatch tcp connection close metric to handler wavefront-handler
apiVersion: {{ include "wfafi.istio.apiVersion" . }}
kind: rule
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ include "common.names.fullname" . }}-wavefront-tcp-connection-close-rule
namespace: {{ .Values.istio.namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
match: context.protocol == "tcp" && connection.event == "close"
actions:
- handler: {{ include "common.names.fullname" . }}-wavefront-handler.{{ .Values.istio.namespace }}
instances:
- {{ include "common.names.fullname" . }}-tcpconnectionsclosed.instance.{{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,36 @@
apiVersion: v1
kind: Service
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ template "common.names.fullname" . }}
namespace: {{ .Release.Namespace }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
type: {{ .Values.service.type }}
{{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
{{- end }}
ports:
- name: grpc
port: {{ .Values.service.port }}
targetPort: grpc
protocol: TCP
{{- if (and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) (not (empty .Values.service.nodePorts.http))) }}
nodePort: {{ .Values.service.nodePorts.http }}
{{- else if eq .Values.service.type "ClusterIP" }}
nodePort: null
{{- end }}
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: wavefront-adapter-for-istio
@@ -0,0 +1,445 @@
## Global Docker image parameters
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
## Current available global Docker image parameters: imageRegistry and imagePullSecrets
##
## @section Global parameters
## @param global.imageRegistry Global Docker image registry
## @param global.imagePullSecrets Global Docker registry secret names as an array
##
global:
imageRegistry:
imagePullSecrets: []
# - myRegistryKeySecretName
# storageClass: myStorageClass
## Override Kubernetes version
## @param kubeVersion Override Kubernetes version
##
kubeVersion:
## String to partially override common.names.fullname template (will maintain the release name)
## @param nameOverride String to partially override common.names.fullname
##
nameOverride:
## String to fully override common.names.fullname template
## @param fullnameOverride String to fully override common.names.fullname
##
fullnameOverride:
## Add labels to all the deployed resources
## @param commonLabels Labels to add to all deployed objects
##
commonLabels: {}
## Add annotations to all the deployed resources
## @param commonAnnotations Annotations to add to all deployed objects
##
commonAnnotations: {}
## Kubernetes Cluster Domain
## @param clusterDomain Kubernetes cluster domain name
##
clusterDomain: cluster.local
## Extra objects to deploy (value evaluated as a template)
## @param extraDeploy Array of extra objects to deploy with the release
##
extraDeploy: []
## @section Wavefront Adapter for Istio deployment parameters
##
image:
## @param image.registry Adapter image registry
##
registry: docker.io
## @param image.repository Adapter image repository
##
repository: bitnami/wavefront-adapter-for-istio
## @param image.tag Adapter image tag (immutabe tags are recommended)
##
tag: 0.1.5-debian-10-r2
## Specify a imagePullPolicy
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
##
## @param image.pullPolicy Adapter image pull policy
##
pullPolicy: IfNotPresent
## Optionally specify an array of imagePullSecrets.
## Secrets must be manually created in the namespace.
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
##
## @param image.pullSecrets Adapter image pull secrets
##
pullSecrets: []
# - myRegistryKeySecretName
## Enable debug mode
## @param image.debug Enable image debug mode
##
debug: false
## Configure extra options for liveness and readiness probes
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
## @param livenessProbe.enabled Enable livenessProbe
## @param livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
## @param livenessProbe.periodSeconds Period seconds for livenessProbe
## @param livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
## @param livenessProbe.failureThreshold Failure threshold for livenessProbe
## @param livenessProbe.successThreshold Success threshold for livenessProbe
##
livenessProbe:
enabled: true
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
## @param readinessProbe.enabled Enable readinessProbe
## @param readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
## @param readinessProbe.periodSeconds Period seconds for readinessProbe
## @param readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
## @param readinessProbe.failureThreshold Failure threshold for readinessProbe
## @param readinessProbe.successThreshold Success threshold for readinessProbe
##
readinessProbe:
enabled: true
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
## Command and args for running the container (set to default if not set). Use array form
## @param command Override default container command (useful when using custom images)
##
command: []
## Args for running the container (set to default if not set). Use array form
## @param args Override default container args (useful when using custom images)
##
args: []
## Deployment pod host aliases
## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
## @param hostAliases Add deployment host aliases
##
hostAliases: []
## wavefront-adapter-for-istio resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
##
resources:
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
## @param resources.limits The resources limits for the Adapter container
##
limits: {}
# cpu: 200m
# memory: 256Mi
## @param resources.requests The requested resourcesc for the Adapter container
##
requests: {}
# cpu: 200m
# memory: 10Mi
## wavefront-adapter-for-istio containers' Security Context
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
## @param containerSecurityContext.enabled Enabled Adapter containers' Security Context
## @param containerSecurityContext.runAsUser Set Adapter container's Security Context runAsUser
## @param containerSecurityContext.runAsNonRoot Set Adapter container's Security Context runAsNonRoot
##
containerSecurityContext:
enabled: true
runAsUser: 1001
runAsNonRoot: true
## wavefront-adapter-for-istio pods' Security Context
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
## @param podSecurityContext.enabled Enabled Adapter pods' Security Context
## @param podSecurityContext.fsGroup Set Adapter pod's Security Context fsGroup
##
podSecurityContext:
enabled: true
fsGroup: 1001
## Pod affinity preset
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
## Allowed values: soft, hard
## @param podAffinityPreset Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
##
podAffinityPreset: ""
## Pod anti-affinity preset
## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
## Allowed values: soft, hard
##
podAntiAffinityPreset: soft
## Node affinity preset
## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
## Allowed values: soft, hard
## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
## @param nodeAffinityPreset.key Node label key to match. Ignored if `affinity` is set
## @param nodeAffinityPreset.values Node label values to match. Ignored if `affinity` is set
##
nodeAffinityPreset:
## Node affinity type
## Allowed values: soft, hard
##
type: ""
## Node label key to match
## E.g.
## key: "kubernetes.io/e2e-az-name"
##
key: ""
## Node label values to match
## E.g.
## values:
## - e2e-az1
## - e2e-az2
##
values: []
## Affinity for pod assignment. Evaluated as a template.
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
## @param affinity Affinity for pod assignment
##
affinity: {}
## Node labels for pod assignment. Evaluated as a template.
## ref: https://kubernetes.io/docs/user-guide/node-selection/
## @param nodeSelector Node labels for pod assignment
##
nodeSelector: {}
## Tolerations for pod assignment. Evaluated as a template.
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
## @param tolerations Tolerations for pod assignment
##
tolerations: []
## Pod extra labels
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
##
## @param podLabels Extra labels for Adapter pods
##
podLabels: {}
## Annotations for server pods.
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
## @skip podAnnotations
##
podAnnotations:
sidecar.istio.io/inject: "false"
scheduler.alpha.kubernetes.io/critical-pod: ""
## wavefront-adapter-for-istio pods' priority.
## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
## @param priorityClassName Adapter pod priority
##
priorityClassName: ""
## lifecycleHooks for the wavefront-adapter-for-istio container to automate configuration before or after startup.
## @param lifecycleHooks Add lifecycle hooks to the Adapter deployment
##
lifecycleHooks: {}
## Custom Liveness probes for wavefront-adapter-for-istio
## @param customLivenessProbe Override default liveness probe
##
customLivenessProbe: {}
## Custom Rediness probes wavefront-adapter-for-istio
## @param customReadinessProbe Override default readiness probe
##
customReadinessProbe: {}
## Update strategy - only really applicable for deployments with RWO PVs attached
## If replicas = 1, an update can get "stuck", as the previous pod remains attached to the
## PV, and the "incoming" pod can never start. Changing the strategy to "Recreate" will
## terminate the single previous pod, so that the new, incoming pod can attach to the PV
## @param updateStrategy.type Adapter deployment update strategy
##
updateStrategy:
type: RollingUpdate
## Adapter Container port
## @param containerPort Adapter container port
##
containerPort: 8000
## Additional environment variables to set
## Example:
## extraEnvVars:
## - name: FOO
## value: "bar"
## @param extraEnvVars Add extra environment variables to the Adapter container
##
extraEnvVars: []
## ConfigMap with extra environment variables
## @param extraEnvVarsCM Name of existing ConfigMap containing extra env vars
##
extraEnvVarsCM:
## Secret with extra environment variables
## @param extraEnvVarsSecret Name of existing Secret containing extra env vars
##
extraEnvVarsSecret:
## Extra volumes to add to the deployment
## @param extraVolumes Optionally specify extra list of additional volumes for Adapter pods
##
extraVolumes: []
## Extra volume mounts to add to the container
## @param extraVolumeMounts Optionally specify extra list of additional volumeMounts for Adapter container(s)
##
extraVolumeMounts: []
## Add init containers to the wavefront-adapter-for-istio pods.
## Example:
## initContainers:
## - name: your-image-name
## image: your-image
## imagePullPolicy: Always
## ports:
## - name: portname
## containerPort: 1234
## @param initContainers Add additional init containers to the Adapter pods
##
initContainers: {}
## Add sidecars to the wavefront-adapter-for-istio pods.
## Example:
## sidecars:
## - name: your-image-name
## image: your-image
## imagePullPolicy: Always
## ports:
## - name: portname
## containerPort: 1234
##
## @param sidecars Add additional sidecar containers to the Adapter pod
##
sidecars: {}
## Use an external wavefront-proxy host
##
externalProxy:
## @param externalProxy.host Host of a wavefront-proxy instance (required if wavefront.enabled = false)
##
host:
## @param externalProxy.port Host of a wavefront-proxy instance (required if wavefront.enabled = false)
##
port: 2878
## Adapter prefix parameter
## @param adapterLogLevel Adapter log level
##
adapterLogLevel: info
## Istio settings
##
istio:
## @param istio.create Deploy istio objects
##
create: true
## @param istio.namespace Namespace to deploy the Istio objects
##
namespace: istio-system
## @param istio.apiVersion Override Istio API version
##
apiVersion:
## Adapter Metrics parameters
##
metrics:
## @param metrics.flushInterval Interval to flush the metrics
##
flushInterval: 5s
## @param metrics.source Source tag for all metrics handled by the adapter
##
source: istio
## @param metrics.prefix Prefix to prepend to all metrics handled by the adapter
##
prefix: istio
## @param metrics.http Enable the collection of http metrics
##
http: true
## @param metrics.tcp Enable the collection of tcp metrics
##
tcp: true
## @section Traffic Exposure Parameters
## Service parameters
##
service:
## @param service.type Adapter service type
##
type: ClusterIP
## HTTP Port
## @param service.port Adapter service port
##
port: 8000
## loadBalancerIP for the Service (optional, cloud specific)
## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
## @param service.loadBalancerIP Adapter service LoadBalancer IP
##
loadBalancerIP:
## loadBalancerIP source ranges for the Service
## @param service.loadBalancerSourceRanges loadBalancerIP source ranges for the Service
##
loadBalancerSourceRanges:
##
## nodePorts:
## http: <to set explicitly, choose port between 30000-32767>
## https: <to set explicitly, choose port between 30000-32767>
## @param service.nodePorts.http NodePort for the HTTP endpoint
##
nodePorts:
http: ""
## Enable client source IP preservation
## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
## @param service.externalTrafficPolicy External traffic policy for the service
##
externalTrafficPolicy: Cluster
## @section Wavefront sub-chart parameters
## Wavefront chart parameters
## NOTE: This solution will currently work with wavefront-proxy, reason why we disable the rest of
## the services by default
##
wavefront:
## @param wavefront.enabled Deploy Wavefront chart (necessary if externalProxyHost is not set)
##
enabled: true
## @param wavefront.wavefront.url Wavefront SAAS service URL
## @param wavefront.wavefront.token Wavefront SAAS token
##
wavefront:
url: https://YOUR_CLUSTER.wavefront.com
token: YOUR_API_TOKEN
## @param wavefront.collector.enabled Deploy Wavefront collector (not used by the Adapter pod)
##
collector:
enabled: false
## @param wavefront.rbac.create Create RBAC rules (not necessary as the Adapter only uses wavefront-proxy)
##
rbac:
create: false
proxy:
## @param wavefront.proxy.enabled Deploy Wavefront Proxy (required if externalProxyHost is not set)
##
enabled: true
## @param wavefront.proxy.port Deployed Wavefront Proxy port (required if externalProxyHost is not set)
##
port: 2878
## @param wavefront.serviceAccount.create Create Wavefront serivce account (not necessary as the Adapter only uses wavefront-proxy)
##
serviceAccount:
create: false