memcached: switch to sidecar

Instead of running the exporter as a seperate deployemnt that talks
to the service, which will NOT be reporting reliable information if
you have more than 1 replica of memcached, this patch insteads moves
things into a sidecar model that runs in the same pod and exposes
the service.

Change-Id: Ia4801b47f44df91db10886f7cb4e8e174557aded
This commit is contained in:
Mohammed Naser 2022-01-26 16:07:08 -05:00
parent 11ac37056b
commit 696e37e3f7
10 changed files with 37 additions and 178 deletions

View File

@ -15,6 +15,6 @@ apiVersion: v1
appVersion: v1.5.5 appVersion: v1.5.5
description: OpenStack-Helm Memcached description: OpenStack-Helm Memcached
name: memcached name: memcached
version: 0.1.5 version: 0.1.6
home: https://github.com/memcached/memcached home: https://github.com/memcached/memcached
... ...

View File

@ -18,7 +18,7 @@ set -ex
COMMAND="${@:-start}" COMMAND="${@:-start}"
function start () { function start () {
exec /bin/memcached_exporter --memcached.address "$MEMCACHED_HOST" exec /bin/memcached_exporter
} }
function stop () { function stop () {

View File

@ -27,4 +27,6 @@ data:
{{- end }} {{- end }}
memcached.sh: | memcached.sh: |
{{ tuple "bin/_memcached.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} {{ tuple "bin/_memcached.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
memcached-exporter.sh: |
{{ tuple "bin/_memcached-exporter.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
{{- end }} {{- end }}

View File

@ -80,6 +80,29 @@ spec:
mountPath: /tmp/memcached.sh mountPath: /tmp/memcached.sh
subPath: memcached.sh subPath: memcached.sh
readOnly: true readOnly: true
{{- if .Values.monitoring.prometheus.enabled }}
- name: memcached-exporter
image: {{ .Values.images.tags.prometheus_memcached_exporter }}
imagePullPolicy: {{ .Values.images.pull_policy }}
{{ tuple $envAll $envAll.Values.pod.resources.prometheus_memcached_exporter | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
{{ dict "envAll" $envAll "application" "server" "container" "memcached_exporter" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 10 }}
command:
- /tmp/memcached-exporter.sh
- start
ports:
- name: metrics
containerPort: {{ tuple "oslo_cache" "internal" "metrics" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
readinessProbe:
tcpSocket:
port: {{ tuple "oslo_cache" "internal" "metrics" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
volumeMounts:
- name: pod-tmp
mountPath: /tmp
- name: memcached-bin
mountPath: /tmp/memcached-exporter.sh
subPath: memcached-exporter.sh
readOnly: true
{{- end }}
volumes: volumes:
- name: pod-tmp - name: pod-tmp
emptyDir: {} emptyDir: {}

View File

@ -1,26 +0,0 @@
{{/*
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.
*/}}
{{- if and .Values.manifests.monitoring.prometheus.configmap_bin .Values.monitoring.prometheus.enabled }}
{{- $envAll := . }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ printf "%s-%s" $envAll.Release.Name "memcached-exporter-bin" | quote }}
data:
memcached-exporter.sh: |
{{ tuple "bin/_memcached-exporter.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
{{- end }}

View File

@ -1,81 +0,0 @@
{{/*
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.
*/}}
{{- if and .Values.manifests.monitoring.prometheus.deployment_exporter .Values.monitoring.prometheus.enabled }}
{{- $envAll := . }}
{{- $rcControllerName := printf "%s-%s" $envAll.Release.Name "memcached-exporter" }}
{{- $configMapBinName := printf "%s-%s" $envAll.Release.Name "memcached-exporter-bin" }}
{{ tuple $envAll "prometheus_memcached_exporter" $rcControllerName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $rcControllerName | quote }}
labels:
{{ tuple $envAll "prometheus_memcached_exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
spec:
replicas: {{ .Values.pod.replicas.prometheus_memcached_exporter }}
selector:
matchLabels:
{{ tuple $envAll "prometheus_memcached_exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 6 }}
{{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
template:
metadata:
labels:
{{ tuple $envAll "prometheus_memcached_exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }}
namespace: {{ .Values.endpoints.prometheus_memcached_exporter.namespace }}
annotations:
{{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" | indent 8 }}
{{ dict "envAll" $envAll "podName" "prometheus_memcached_exporter" "containerNames" (list "init" "memcached-exporter") | include "helm-toolkit.snippets.kubernetes_mandatory_access_control_annotation" | indent 8 }}
spec:
{{ dict "envAll" $envAll "application" "memcached_exporter" | include "helm-toolkit.snippets.kubernetes_pod_security_context" | indent 6 }}
shareProcessNamespace: true
serviceAccountName: {{ $rcControllerName | quote }}
nodeSelector:
{{ .Values.labels.prometheus_memcached_exporter.node_selector_key }}: {{ .Values.labels.prometheus_memcached_exporter.node_selector_value | quote }}
terminationGracePeriodSeconds: {{ .Values.pod.lifecycle.termination_grace_period.prometheus_memcached_exporter.timeout | default "30" }}
initContainers:
{{ tuple $envAll "prometheus_memcached_exporter" list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }}
containers:
- name: memcached-exporter
image: {{ .Values.images.tags.prometheus_memcached_exporter }}
imagePullPolicy: {{ .Values.images.pull_policy }}
{{ tuple $envAll $envAll.Values.pod.resources.prometheus_memcached_exporter | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
{{ dict "envAll" $envAll "application" "memcached_exporter" "container" "memcached_exporter" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 10 }}
command:
- /tmp/memcached-exporter.sh
- start
ports:
- name: metrics
containerPort: {{ tuple "prometheus_memcached_exporter" "internal" "metrics" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
env:
- name: MEMCACHED_HOST
value: {{ tuple "oslo_cache" "internal" "memcache" . | include "helm-toolkit.endpoints.host_and_port_endpoint_uri_lookup" }}
volumeMounts:
- name: pod-tmp
mountPath: /tmp
- name: memcached-exporter-bin
mountPath: /tmp/memcached-exporter.sh
subPath: memcached-exporter.sh
readOnly: true
volumes:
- name: pod-tmp
emptyDir: {}
- name: memcached-exporter-bin
configMap:
name: {{ $configMapBinName | quote }}
defaultMode: 0555
{{- end }}

View File

@ -1,35 +0,0 @@
{{/*
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.
*/}}
{{- if and .Values.manifests.monitoring.prometheus.service_exporter .Values.monitoring.prometheus.enabled }}
{{- $envAll := . }}
{{- $prometheus_annotations := $envAll.Values.monitoring.prometheus.memcached_exporter }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ tuple "prometheus_memcached_exporter" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
labels:
{{ tuple $envAll "prometheus_memcached_exporter" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
annotations:
{{- if .Values.monitoring.prometheus.enabled }}
{{ tuple $prometheus_annotations | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }}
{{- end }}
spec:
ports:
- name: metrics
port: {{ tuple "prometheus_memcached_exporter" "internal" "metrics" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
selector:
{{ tuple $envAll "prometheus_memcached_exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
{{- end }}

View File

@ -22,7 +22,12 @@ metadata:
spec: spec:
sessionAffinity: ClientIP sessionAffinity: ClientIP
ports: ports:
- port: {{ tuple "oslo_cache" "internal" "memcache" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} - name: memcache
port: {{ tuple "oslo_cache" "internal" "memcache" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
{{- if .Values.monitoring.prometheus.enabled }}
- name: metrics
port: {{ tuple "oslo_cache" "internal" "metrics" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
{{- end }}
selector: selector:
{{ tuple $envAll "memcached" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} {{ tuple $envAll "memcached" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
{{- end }} {{- end }}

View File

@ -41,10 +41,6 @@ dependencies:
services: services:
- endpoint: internal - endpoint: internal
service: local_image_registry service: local_image_registry
prometheus_memcached_exporter:
services:
- endpoint: internal
service: oslo_cache
endpoints: endpoints:
cluster_domain_suffix: cluster.local cluster_domain_suffix: cluster.local
@ -69,17 +65,6 @@ endpoints:
port: port:
memcache: memcache:
default: 11211 default: 11211
prometheus_memcached_exporter:
namespace: null
hosts:
default: memcached-exporter
host_fqdn_override:
default: null
path:
default: /metrics
scheme:
default: 'http'
port:
metrics: metrics:
default: 9150 default: 9150
kube_dns: kube_dns:
@ -129,9 +114,6 @@ labels:
server: server:
node_selector_key: openstack-control-plane node_selector_key: openstack-control-plane
node_selector_value: enabled node_selector_value: enabled
prometheus_memcached_exporter:
node_selector_key: openstack-control-plane
node_selector_value: enabled
manifests: manifests:
configmap_bin: true configmap_bin: true
@ -139,21 +121,9 @@ manifests:
job_image_repo_sync: true job_image_repo_sync: true
network_policy: false network_policy: false
service: true service: true
monitoring:
prometheus:
configmap_bin: true
deployment_exporter: true
service_exporter: true
pod: pod:
security_context: security_context:
memcached_exporter:
pod:
runAsUser: 65534
container:
memcached_exporter:
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
server: server:
pod: pod:
runAsUser: 65534 runAsUser: 65534
@ -161,6 +131,9 @@ pod:
memcached: memcached:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
readOnlyRootFilesystem: true readOnlyRootFilesystem: true
memcached_exporter:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
affinity: affinity:
anti: anti:
topologyKey: topologyKey:
@ -180,11 +153,8 @@ pod:
termination_grace_period: termination_grace_period:
memcached: memcached:
timeout: 30 timeout: 30
prometheus_memcached_exporter:
timeout: 30
replicas: replicas:
server: 1 server: 1
prometheus_memcached_exporter: 1
resources: resources:
enabled: false enabled: false
memcached: memcached:

View File

@ -6,4 +6,5 @@ memcached:
- 0.1.3 Remove panko residue - 0.1.3 Remove panko residue
- 0.1.4 Use full image ref for docker official images - 0.1.4 Use full image ref for docker official images
- 0.1.5 Update htk requirements - 0.1.5 Update htk requirements
- 0.1.6 Switch to using sidecar for exporter
... ...