You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by wi...@apache.org on 2019/11/06 18:23:32 UTC
[couchdb-helm] 02/03: Add prometheus sidecar
This is an automated email from the ASF dual-hosted git repository.
willholley pushed a commit to branch prometheus
in repository https://gitbox.apache.org/repos/asf/couchdb-helm.git
commit 9609bb2841d4590f78c01140c7cd76eb21260b42
Author: Will Holley <wi...@gmail.com>
AuthorDate: Wed Nov 6 16:39:23 2019 +0000
Add prometheus sidecar
---
couchdb/Chart.yaml | 2 +-
couchdb/README.md | 35 +++++++++++++++++++++++++++++++
couchdb/templates/_helpers.tpl | 13 ++++++++++++
couchdb/templates/statefulset.yaml | 42 +++++++++++++++++++++++++++++++++++--
couchdb/values.yaml | 18 ++++++++++++++++
docs/couchdb-2.5.0.tgz | Bin 0 -> 8592 bytes
docs/index.yaml | 33 ++++++++++++++++++++++++-----
test/e2e-kind.sh | 6 ++++--
8 files changed, 139 insertions(+), 10 deletions(-)
diff --git a/couchdb/Chart.yaml b/couchdb/Chart.yaml
index deb6de7..9a40d44 100644
--- a/couchdb/Chart.yaml
+++ b/couchdb/Chart.yaml
@@ -1,6 +1,6 @@
apiVersion: v1
name: couchdb
-version: 2.4.1
+version: 2.5.0
appVersion: 2.3.1
description: A database featuring seamless multi-master sync, that scales from
big data to mobile, with an intuitive HTTP/JSON API and designed for
diff --git a/couchdb/README.md b/couchdb/README.md
index b48cd5b..b2b287e 100644
--- a/couchdb/README.md
+++ b/couchdb/README.md
@@ -106,6 +106,7 @@ CouchDB chart and their default values:
| `persistentVolume.enabled` | Boolean determining whether to attach a PV to each node | false
| `persistentVolume.size` | If enabled, the size of the persistent volume to attach | 10Gi
| `enableSearch` | Adds a sidecar for Lucene-powered text search | false |
+| `telemetry.enabled` | Adds a sidecar to expose CouchDB metrics to Prometheus| false |
A variety of other parameters are also configurable. See the comments in the
`values.yaml` file for further details:
@@ -124,6 +125,9 @@ A variety of other parameters are also configurable. See the comments in the
| `initImage.repository` | busybox |
| `initImage.tag` | latest |
| `initImage.pullPolicy` | Always |
+| `telemetryImage.repository` | gesellix/couchdb-prometheus-exporter |
+| `telemetryImage.tag` | latest |
+| `telemetryImage.pullPolicy` | Always |
| `ingress.enabled` | false |
| `ingress.hosts` | chart-example.local |
| `ingress.annotations` | |
@@ -145,6 +149,37 @@ A variety of other parameters are also configurable. See the comments in the
| `serviceAccount.enabled` | true |
| `serviceAccount.create` | true |
| `serviceAccount.imagePullSecrets` | |
+| `telemetry.databases` | |
+
+## Telemetry
+
+The chart optionally deploys the [CouchDB Prometheus exporter](https://github.com/gesellix/couchdb-prometheus-exporter) to each CouchDB node.
+Metrics are exposed on port 9984.
+
+Below is an example Prometheus scrape configuration that can be used to collect per-node CouchDB metrics:
+
+```
+- job_name: couchdb
+ scrape_interval: 10s
+ kubernetes_sd_configs:
+ - role: pod
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_namespace]
+ action: replace
+ target_label: k8s_namespace
+ - source_labels: [__meta_kubernetes_pod_name]
+ action: replace
+ target_label: k8s_pod_name
+ - source_labels: [__address__]
+ action: replace
+ regex: ([^:]+)(?::\d+)?
+ replacement: ${1}:9984
+ target_label: __address__
+ - source_labels: [__meta_kubernetes_pod_label_app]
+ action: keep
+ regex: couchdb
+```
+
## Feedback, Issues, Contributing
diff --git a/couchdb/templates/_helpers.tpl b/couchdb/templates/_helpers.tpl
index 3a9288f..6f263a9 100644
--- a/couchdb/templates/_helpers.tpl
+++ b/couchdb/templates/_helpers.tpl
@@ -72,3 +72,16 @@ If serviceAccount.name is specified, use that, else use the couchdb instance nam
{{- template "couchdb.fullname" . -}}
{{- end -}}
{{- end -}}
+
+{{/*
+In the event that we create both a headless service and a traditional one,
+ensure that the latter gets a unique name.
+*/}}
+{{- define "couchdb.telemetrysvcname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- printf "%s-telemetry-%s" .Values.fullnameOverride .Chart.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- printf "%s-telemetry-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
diff --git a/couchdb/templates/statefulset.yaml b/couchdb/templates/statefulset.yaml
index 7c7b744..c9d4532 100644
--- a/couchdb/templates/statefulset.yaml
+++ b/couchdb/templates/statefulset.yaml
@@ -18,9 +18,13 @@ spec:
metadata:
labels:
{{ include "couchdb.ss.selector" . | indent 8 }}
-{{- with .Values.annotations }}
annotations:
-{{ toYaml . | indent 8 }}
+{{- with .Values.annotations }}
+{{- toYaml . | indent 8 }}
+{{- end }}
+{{- if .Values.telemetry.enabled }}
+ prometheus.io/scrape: 'true'
+ prometheus.io/port: '9984'
{{- end }}
spec:
{{- if .Values.schedulerName }}
@@ -108,6 +112,40 @@ spec:
- name: database-storage
mountPath: /opt/couchdb-search/data
{{- end }}
+{{- if .Values.telemetry.enabled }}
+ - name: telemetry
+ image: "{{ .Values.telemetryImage.repository }}:{{ .Values.telemetryImage.tag }}"
+ imagePullPolicy: {{ .Values.telemetryImage.pullPolicy }}
+ ports:
+ - name: telemetry
+ containerPort: 9984
+ args: ["--couchdb.uri=http://localhost:5984"]
+ livenessProbe:
+ httpGet:
+ path: /metrics
+ port: 9984
+ readinessProbe:
+ httpGet:
+ path: /metrics
+ port: 9984
+ resources:
+{{ toYaml .Values.telemetry.resources | indent 12 }}
+ env:
+ - name: DATABASES
+ value: {{ .Values.telemetry.databases }}
+{{- if not .Values.allowAdminParty }}
+ - name: "COUCHDB.USERNAME"
+ valueFrom:
+ secretKeyRef:
+ name: {{ template "couchdb.fullname" . }}
+ key: adminUsername
+ - name: "COUCHDB.PASSWORD"
+ valueFrom:
+ secretKeyRef:
+ name: {{ template "couchdb.fullname" . }}
+ key: adminPassword
+{{- end }}
+{{- end }}
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
diff --git a/couchdb/values.yaml b/couchdb/values.yaml
index f94faf7..57a259f 100644
--- a/couchdb/values.yaml
+++ b/couchdb/values.yaml
@@ -163,3 +163,21 @@ couchdbConfig:
# This is used to generate FQDNs for peers when joining the CouchDB cluster.
dns:
clusterDomainSuffix: cluster.local
+
+# Adds a sidecar to expose CouchDB metrics as a prometheus endpoint
+# see https://github.com/gesellix/couchdb-prometheus-exporter/blob/master/README.md
+telemetryImage:
+ repository: gesellix/couchdb-prometheus-exporter
+ tag: latest
+ pullPolicy: Always
+telemetry:
+ enabled: false
+# Enable database-specific metrics. Comma delimited list of database names or "_all_dbs" for all.
+# databases: _all_dbs
+ resources:
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ limits:
+ cpu: 1
+ memory: 1Gi
diff --git a/docs/couchdb-2.5.0.tgz b/docs/couchdb-2.5.0.tgz
new file mode 100644
index 0000000..ab91382
Binary files /dev/null and b/docs/couchdb-2.5.0.tgz differ
diff --git a/docs/index.yaml b/docs/index.yaml
index 1e3801a..a34f5da 100644
--- a/docs/index.yaml
+++ b/docs/index.yaml
@@ -3,7 +3,30 @@ entries:
couchdb:
- apiVersion: v1
appVersion: 2.3.1
- created: "2019-11-01T11:51:15.339935463+01:00"
+ created: 2019-11-06T16:36:51.999866Z
+ description: A database featuring seamless multi-master sync, that scales from
+ big data to mobile, with an intuitive HTTP/JSON API and designed for reliability.
+ digest: a9856ec04fd7ea4b04f6b6d7e582ad47ab71381b1b91f1de2230800480e45f94
+ home: https://couchdb.apache.org/
+ icon: http://couchdb.apache.org/CouchDB-visual-identity/logo/CouchDB-couch-symbol.svg
+ keywords:
+ - couchdb
+ - database
+ - nosql
+ maintainers:
+ - email: kocolosk@apache.org
+ name: kocolosk
+ - email: willholley@apache.org
+ name: willholley
+ name: couchdb
+ sources:
+ - https://github.com/apache/couchdb-docker
+ urls:
+ - https://apache.github.io/couchdb-helm/couchdb-2.5.0.tgz
+ version: 2.5.0
+ - apiVersion: v1
+ appVersion: 2.3.1
+ created: 2019-11-01T11:51:15.339935463+01:00
description: A database featuring seamless multi-master sync, that scales from
big data to mobile, with an intuitive HTTP/JSON API and designed for reliability.
digest: db0815c2766f76049b58d0954b66e0b70bf673a7d11c1d3cd9e07c775c646c12
@@ -26,7 +49,7 @@ entries:
version: 2.4.1
- apiVersion: v1
appVersion: 2.3.1
- created: "2019-11-01T11:51:15.339429507+01:00"
+ created: 2019-11-01T11:51:15.339429507+01:00
description: A database featuring seamless multi-master sync, that scales from
big data to mobile, with an intuitive HTTP/JSON API and designed for reliability.
digest: daddf6cc7fe8bb63d6fa8679565d4496d92c23d9ff85b19521fca74c6412bc11
@@ -49,7 +72,7 @@ entries:
version: 2.4.0
- apiVersion: v1
appVersion: 2.3.1
- created: "2019-11-01T11:51:15.333646851+01:00"
+ created: 2019-11-01T11:51:15.333646851+01:00
description: A database featuring seamless multi-master sync, that scales from
big data to mobile, with an intuitive HTTP/JSON API and designed for reliability.
digest: 0eba7c20ec47bc8556b3cb3b5137b578d46b37397493087d61b8199066f84782
@@ -72,7 +95,7 @@ entries:
version: 2.3.0
- apiVersion: v1
appVersion: 2.3.1
- created: "2019-11-01T11:51:15.330535744+01:00"
+ created: 2019-11-01T11:51:15.330535744+01:00
description: A database featuring seamless multi-master sync, that scales from
big data to mobile, with an intuitive HTTP/JSON API and designed for reliability.
digest: f68e6187c2b65a02fdde9d49ec38e76a68c3d82421e5ea9e599bac87f4193c6a
@@ -93,4 +116,4 @@ entries:
urls:
- https://apache.github.io/couchdb-helm/couchdb-2.2.0.tgz
version: 2.2.0
-generated: "2019-11-01T11:51:15.321186109+01:00"
+generated: 2019-11-06T16:36:51.998874Z
diff --git a/test/e2e-kind.sh b/test/e2e-kind.sh
index 4cb57b4..a24d17b 100755
--- a/test/e2e-kind.sh
+++ b/test/e2e-kind.sh
@@ -4,7 +4,7 @@ set -o errexit
set -o nounset
set -o pipefail
-readonly CT_VERSION=v2.3.3
+readonly CT_VERSION=v2.4.0
readonly KIND_VERSION=v0.5.1
readonly CLUSTER_NAME=chart-testing
readonly K8S_VERSION=v1.14.3
@@ -80,7 +80,9 @@ install_local-path-provisioner() {
}
install_charts() {
- docker_exec ct lint-and-install --charts couchdb --upgrade --chart-dirs .
+ docker_exec ct lint-and-install --charts couchdb --upgrade --chart-dirs . --helm-extra-args "--set 'telemetry.enabled=true'"
+ # without telemetry
+ docker_exec ct lint --charts couchdb --chart-dirs . --helm-extra-args "--set ingress.enabled=true'"
echo
}