Prometheus Openstack Exporter: tidy chart and add ks user

This PS adds keystone user management to the prometheus-openstack-exporter
chart, and also performs some spring cleaning.

Change-Id: I69e40c523867f751ecd8c63169aefdfdf4eb5cd2
This commit is contained in:
portdirect 2018-01-11 20:59:19 -05:00
parent 217385a0dd
commit 9b40b8656d
9 changed files with 175 additions and 76 deletions

View File

@ -20,10 +20,12 @@ limitations under the License.
apiVersion: v1 apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: openstack-exporter-bin name: prometheus-openstack-exporter-bin
data: data:
image-repo-sync.sh: |+ image-repo-sync.sh: |+
{{- include "helm-toolkit.scripts.image_repo_sync" . | indent 4 }} {{- include "helm-toolkit.scripts.image_repo_sync" . | indent 4 }}
openstack-exporter.sh: | ks-user.sh: |+
{{ tuple "bin/_openstack-exporter.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} {{- include "helm-toolkit.scripts.keystone_user" . | indent 4 }}
prometheus-openstack-exporter.sh: |
{{ tuple "bin/_prometheus-openstack-exporter.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
{{- end }} {{- end }}

View File

@ -18,9 +18,9 @@ limitations under the License.
{{- $envAll := . }} {{- $envAll := . }}
{{- $ksUserSecret := .Values.secrets.identity.user }} {{- $ksUserSecret := .Values.secrets.identity.user }}
{{- if .Values.images.local_registry.active -}} {{- if .Values.images.local_registry.active -}}
{{- $_ := set .Values "pod_dependency" (merge .Values.dependencies.openstack_metrics_exporter .Values.conditional_dependencies.local_image_registry) -}} {{- $_ := set .Values "pod_dependency" (merge .Values.dependencies.prometheus_openstack_exporter .Values.conditional_dependencies.local_image_registry) -}}
{{- else -}} {{- else -}}
{{- $_ := set .Values "pod_dependency" .Values.dependencies.openstack_metrics_exporter -}} {{- $_ := set .Values "pod_dependency" .Values.dependencies.prometheus_openstack_exporter -}}
{{- end -}} {{- end -}}
{{- $serviceAccountName := "prometheus-openstack-exporter" }} {{- $serviceAccountName := "prometheus-openstack-exporter" }}
@ -29,51 +29,52 @@ limitations under the License.
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
kind: Deployment kind: Deployment
metadata: metadata:
name: openstack-exporter name: prometheus-openstack-exporter
spec: spec:
replicas: {{ .Values.pod.replicas.openstack_metrics_exporter }} replicas: {{ .Values.pod.replicas.prometheus_openstack_exporter }}
{{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }} {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
template: template:
metadata: metadata:
labels: labels:
{{ tuple $envAll "openstack-exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} {{ tuple $envAll "prometheus-openstack-exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }}
spec: spec:
serviceAccountName: {{ $serviceAccountName }} serviceAccountName: {{ $serviceAccountName }}
nodeSelector: nodeSelector:
{{ .Values.labels.node_selector_key }}: {{ .Values.labels.node_selector_value }} {{ .Values.labels.node_selector_key }}: {{ .Values.labels.node_selector_value }}
terminationGracePeriodSeconds: {{ .Values.pod.lifecycle.termination_grace_period.openstack_metrics_exporter.timeout | default "30" }} terminationGracePeriodSeconds: {{ .Values.pod.lifecycle.termination_grace_period.prometheus_openstack_exporter.timeout | default "30" }}
initContainers: initContainers:
{{ tuple $envAll .Values.pod_dependency list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} {{ tuple $envAll .Values.pod_dependency list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }}
containers: containers:
- name: openstack-metrics-exporter - name: openstack-metrics-exporter
{{ tuple $envAll "openstack_metrics_exporter" | include "helm-toolkit.snippets.image" | indent 10 }} {{ tuple $envAll "prometheus_openstack_exporter" | include "helm-toolkit.snippets.image" | indent 10 }}
{{ tuple $envAll $envAll.Values.pod.resources.openstack_metrics_exporter | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} {{ tuple $envAll $envAll.Values.pod.resources.prometheus_openstack_exporter | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
command: command:
- /tmp/openstack-exporter.sh - /tmp/prometheus-openstack-exporter.sh
- start - start
lifecycle:
preStop:
exec:
command:
- /tmp/prometheus-openstack-exporter.sh
- stop
ports: ports:
- name: metrics - name: metrics
containerPort: {{ .Values.network.openstack_metrics_exporter.port }} containerPort: {{ tuple "prometheus_openstack_exporter" "internal" "exporter" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
env: env:
- name: TIMEOUT_SECONDS
value: "{{ .Values.conf.openstack_metrics_exporter.timeout_seconds }}"
- name: OS_POLLING_INTERVAL
value: "{{ .Values.conf.openstack_metrics_exporter.polling_interval_seconds }}"
- name: OS_RETRIES
value: "{{ .Values.conf.openstack_metrics_exporter.retries }}"
- name: LISTEN_PORT - name: LISTEN_PORT
value: "{{ .Values.network.openstack_metrics_exporter.port }}" value: {{ tuple "prometheus_openstack_exporter" "internal" "exporter" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | quote }}
{{ include "helm-toolkit.utils.to_k8s_env_vars" .Values.conf.prometheus_openstack_exporter | indent 12 }}
{{- with $env := dict "ksUserSecret" $ksUserSecret }} {{- with $env := dict "ksUserSecret" $ksUserSecret }}
{{- include "helm-toolkit.snippets.keystone_openrc_env_vars" $env | indent 12 }} {{- include "helm-toolkit.snippets.keystone_openrc_env_vars" $env | indent 12 }}
{{- end }} {{- end }}
volumeMounts: volumeMounts:
- name: openstack-exporter-bin - name: prometheus-openstack-exporter-bin
mountPath: /tmp/openstack-exporter.sh mountPath: /tmp/prometheus-openstack-exporter.sh
subPath: openstack-exporter.sh subPath: prometheus-openstack-exporter.sh
readOnly: true readOnly: true
volumes: volumes:
- name: openstack-exporter-bin - name: prometheus-openstack-exporter-bin
configMap: configMap:
name: openstack-exporter-bin name: prometheus-openstack-exporter-bin
defaultMode: 0555 defaultMode: 0555
{{- end }} {{- end }}

View File

@ -19,14 +19,14 @@ limitations under the License.
{{- if .Values.images.local_registry.active -}} {{- if .Values.images.local_registry.active -}}
{{- $_ := set .Values "pod_dependency" .Values.dependencies.image_repo_sync -}} {{- $_ := set .Values "pod_dependency" .Values.dependencies.image_repo_sync -}}
{{- $serviceAccountName := "openstack-exporter-image-repo-sync"}} {{- $serviceAccountName := "prometheus-openstack-exporter-image-repo-sync"}}
{{ tuple $envAll $envAll.Values.pod_dependency $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }} {{ tuple $envAll $envAll.Values.pod_dependency $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
--- ---
apiVersion: batch/v1 apiVersion: batch/v1
kind: Job kind: Job
metadata: metadata:
name: openstack-metrics-exporter-image-repo-sync name: prometheus-openstack-exporter-image-repo-sync
spec: spec:
template: template:
metadata: metadata:
@ -51,16 +51,16 @@ spec:
command: command:
- /tmp/image-repo-sync.sh - /tmp/image-repo-sync.sh
volumeMounts: volumeMounts:
- name: openstack-exporter-bin - name: prometheus-openstack-exporter-bin
mountPath: /tmp/image-repo-sync.sh mountPath: /tmp/image-repo-sync.sh
subPath: image-repo-sync.sh subPath: image-repo-sync.sh
readOnly: true readOnly: true
- name: docker-socket - name: docker-socket
mountPath: /var/run/docker.sock mountPath: /var/run/docker.sock
volumes: volumes:
- name: openstack-exporter-bin - name: prometheus-openstack-exporter-bin
configMap: configMap:
name: openstack-exporter-bin name: prometheus-openstack-exporter-bin
defaultMode: 0555 defaultMode: 0555
- name: docker-socket - name: docker-socket
hostPath: hostPath:

View File

@ -0,0 +1,67 @@
{{/*
Copyright 2017 The Openstack-Helm Authors.
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 .Values.manifests.job_ks_user }}
{{- $envAll := . }}
{{- $dependencies := .Values.dependencies.ks_user }}
{{- $serviceAccountName := "prometheus-openstack-exporter-ks-user" }}
{{ tuple $envAll $dependencies $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: prometheus-openstack-exporter-ks-user
spec:
template:
metadata:
labels:
{{ tuple $envAll "prometheus-openstack-exporter" "ks-user" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }}
spec:
serviceAccountName: {{ $serviceAccountName }}
restartPolicy: OnFailure
nodeSelector:
{{ .Values.labels.node_selector_key }}: {{ .Values.labels.node_selector_value }}
initContainers:
{{ tuple $envAll $dependencies list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }}
containers:
- name: prometheus-openstack-exporter-ks-user
{{ tuple $envAll "ks_user" | include "helm-toolkit.snippets.image" | indent 10 }}
{{ tuple $envAll $envAll.Values.pod.resources.jobs.ks_user | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
command:
- /tmp/ks-user.sh
volumeMounts:
- name: ks-user-sh
mountPath: /tmp/ks-user.sh
subPath: ks-user.sh
readOnly: true
env:
{{- with $env := dict "ksUserSecret" .Values.secrets.identity.admin }}
{{- include "helm-toolkit.snippets.keystone_openrc_env_vars" $env | indent 12 }}
{{- end }}
- name: SERVICE_OS_SERVICE_NAME
value: "prometheus-openstack-exporter"
{{- with $env := dict "ksUserSecret" .Values.secrets.identity.user }}
{{- include "helm-toolkit.snippets.keystone_user_create_env_vars" $env | indent 12 }}
{{- end }}
- name: SERVICE_OS_ROLE
value: {{ .Values.endpoints.identity.auth.user.role | quote }}
volumes:
- name: ks-user-sh
configMap:
name: prometheus-openstack-exporter-bin
defaultMode: 0555
{{- end }}

View File

@ -14,16 +14,17 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/}} */}}
{{- if .Values.manifests.openstack_metrics_user }} {{- if .Values.manifests.secret_keystone }}
{{- $envAll := . }} {{- $envAll := . }}
{{- $secretName := index $envAll.Values.secrets.identity.user }} {{- range $key1, $userClass := tuple "admin" "user" }}
{{- $secretName := index $envAll.Values.secrets.identity $userClass }}
--- ---
apiVersion: v1 apiVersion: v1
kind: Secret kind: Secret
metadata: metadata:
name: {{ $secretName }} name: {{ $secretName }}
namespace: {{ $envAll.Values.endpoints.openstack_metrics_exporter.namespace }}
type: Opaque type: Opaque
data: data:
{{- tuple "user" "internal" $envAll | include "helm-toolkit.snippets.keystone_secret_openrc" | indent 2 -}} {{- tuple $userClass "internal" $envAll | include "helm-toolkit.snippets.keystone_secret_openrc" | indent 2 -}}
{{- end }}
{{- end }} {{- end }}

View File

@ -14,23 +14,23 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/}} */}}
{{- if .Values.manifests.service_openstack_metrics_exporter }} {{- if .Values.manifests.service }}
{{- $envAll := . }} {{- $envAll := . }}
{{- $endpoint := $envAll.Values.endpoints.openstack_metrics_exporter }} {{- $endpoint := $envAll.Values.endpoints.prometheus_openstack_exporter }}
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: {{ tuple "openstack_metrics_exporter" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} name: {{ tuple "prometheus_openstack_exporter" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
labels: labels:
{{ tuple $envAll "openstack-exporter" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} {{ tuple $envAll "prometheus-openstack-exporter" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
annotations: annotations:
{{ tuple $endpoint | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }} {{ tuple $endpoint | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }}
spec: spec:
ports: ports:
- name: http - name: http
port: {{ .Values.network.openstack_metrics_exporter.port }} port: {{ tuple "prometheus_openstack_exporter" "internal" "exporter" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
targetPort: {{ .Values.network.openstack_metrics_exporter.port }} targetPort: {{ tuple "prometheus_openstack_exporter" "internal" "exporter" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
selector: selector:
{{ tuple $envAll "openstack-exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} {{ tuple $envAll "prometheus-openstack-exporter" "exporter" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
{{- end }} {{- end }}

View File

@ -12,17 +12,17 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# Default values for kube-state-metrics. # Default values for prometheus-openstack-exporter.
# This is a YAML-formatted file. # This is a YAML-formatted file.
# Declare variables to be passed into your templates. # Declare variables to be passed into your templates.
images: images:
tags: tags:
openstack_metrics_exporter: docker.io/rakeshpatnaik/prometheus-openstack-exporter:v0.1 prometheus_openstack_exporter: docker.io/rakeshpatnaik/prometheus-openstack-exporter:v0.1
helm_tests: docker.io/kolla/ubuntu-source-kolla-toolbox:3.0.3 helm_tests: docker.io/kolla/ubuntu-source-kolla-toolbox:3.0.3
pull_policy: IfNotPresent
dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.2.1 dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.2.1
image_repo_sync: docker.io/docker:17.07.0 image_repo_sync: docker.io/docker:17.07.0
ks_user: docker.io/kolla/ubuntu-source-heat-engine:3.0.3
pull_policy: IfNotPresent pull_policy: IfNotPresent
local_registry: local_registry:
active: false active: false
@ -42,11 +42,11 @@ pod:
topologyKey: topologyKey:
default: kubernetes.io/hostname default: kubernetes.io/hostname
mounts: mounts:
openstack_metrics_exporter: prometheus_openstack_exporter:
openstack_metrics_exporter: prometheus_openstack_exporter:
init_container: null init_container: null
replicas: replicas:
openstack_metrics_exporter: 1 prometheus_openstack_exporter: 1
lifecycle: lifecycle:
upgrades: upgrades:
revision_history: 3 revision_history: 3
@ -55,7 +55,7 @@ pod:
max_unavailable: 1 max_unavailable: 1
max_surge: 3 max_surge: 3
termination_grace_period: termination_grace_period:
openstack_metrics_exporter: prometheus_openstack_exporter:
timeout: 30 timeout: 30
resources: resources:
enabled: false enabled: false
@ -74,12 +74,25 @@ pod:
limits: limits:
memory: "1024Mi" memory: "1024Mi"
cpu: "2000m" cpu: "2000m"
ks_user:
secrets: requests:
identity: memory: "128Mi"
user: openstack-metrics-user cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
dependencies: dependencies:
ks_user:
services:
- service: identity
endpoint: internal
prometheus_openstack_exporter:
jobs:
- prometheus-openstack-exporter-ks-user
services:
- service: identity
endpoint: internal
image_repo_sync: image_repo_sync:
services: services:
- service: local_image_registry - service: local_image_registry
@ -88,18 +101,21 @@ dependencies:
conditional_dependencies: conditional_dependencies:
local_image_registry: local_image_registry:
jobs: jobs:
- openstack-metrics-exporter-image-repo-sync - prometheus-openstack-exporter-image-repo-sync
services: services:
- service: local_image_registry - service: local_image_registry
endpoint: node endpoint: node
conf: conf:
openstack_metrics_exporter: prometheus_openstack_exporter:
polling_interval_seconds: 30 OS_POLLING_INTERVAL: 30
timeout_seconds: 20 TIMEOUT_SECONDS: 20
retries: 1 OS_RETRIES: 1
os_cpu_oc_ratio: 1.5
os_ram_oc_ratio: 1.0 secrets:
identity:
admin: prometheus-openstack-exporter-keystone-admin
user: prometheus-openstack-exporter-keystone-user
endpoints: endpoints:
cluster_domain_suffix: cluster.local cluster_domain_suffix: cluster.local
@ -115,7 +131,7 @@ endpoints:
port: port:
registry: registry:
node: 5000 node: 5000
openstack_metrics_exporter: prometheus_openstack_exporter:
namespace: null namespace: null
hosts: hosts:
default: openstack-metrics default: openstack-metrics
@ -125,14 +141,24 @@ endpoints:
default: null default: null
scheme: scheme:
default: 'http' default: 'http'
port:
exporter:
default: 9103
scrape: true scrape: true
identity: identity:
name: keystone name: keystone
auth: auth:
admin:
region_name: RegionOne
username: admin
password: password
project_name: admin
user_domain_name: default
project_domain_name: default
user: user:
role: admin role: admin
region_name: RegionOne region_name: RegionOne
username: nova username: prometheus-openstack-exporter
password: password password: password
project_name: service project_name: service
user_domain_name: default user_domain_name: default
@ -152,17 +178,10 @@ endpoints:
api: api:
default: 80 default: 80
network:
openstack_metrics_exporter:
port: 9103
manifests: manifests:
configmap_bin: true configmap_bin: true
clusterrole: true
clusterrolebinding: true
deployment: true deployment: true
job_image_repo_sync: true job_image_repo_sync: true
rbac_entrypoint: true job_ks_user: true
service_openstack_metrics_exporter: true secret_keystone: true
serviceaccount: true service: true
openstack_metrics_user: true

View File

@ -145,6 +145,15 @@ charts:
enabled: false enabled: false
timeout: 300 timeout: 300
output: false output: false
values:
# NOTE(portdirect): Keystone Management is disabled here, as keystone is
# not deployed in the OSH infra gates.
manifests:
job_ks_user: false
dependencies:
prometheus_openstack_exporter:
jobs: null
services: null
grafana: grafana:
chart_name: grafana chart_name: grafana