From ac9c7e1d24e0ecd231ed5749a4dc559b394a9b70 Mon Sep 17 00:00:00 2001 From: Angie Wang Date: Mon, 4 Mar 2019 12:23:48 -0500 Subject: [PATCH] Ceilometer chart: Add polling process with ipmi functionality This commit adds the ability to deploy a polling process with ipmi functionality to pull ipmi samples. Story: 2005019 Task: 29819 Signed-off-by: Angie Wang Change-Id: Ib61d65f9ab815faa0d750422ffb0e36406dd3ccd --- .../templates/bin/_ceilometer-ipmi.sh.tpl | 22 ++++ ceilometer/templates/daemonset-ipmi.yaml | 123 ++++++++++++++++++ ceilometer/values.yaml | 33 +++++ 3 files changed, 178 insertions(+) create mode 100644 ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl create mode 100644 ceilometer/templates/daemonset-ipmi.yaml diff --git a/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl b/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl new file mode 100644 index 0000000000..86d54aceaa --- /dev/null +++ b/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl @@ -0,0 +1,22 @@ +#!/bin/bash + +{{/* +Copyright 2019 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. +*/}} + +set -ex + +exec ceilometer-polling \ + --polling-namespaces ipmi \ + --config-file /etc/ceilometer/ceilometer.conf diff --git a/ceilometer/templates/daemonset-ipmi.yaml b/ceilometer/templates/daemonset-ipmi.yaml new file mode 100644 index 0000000000..15e58f302e --- /dev/null +++ b/ceilometer/templates/daemonset-ipmi.yaml @@ -0,0 +1,123 @@ +{{/* +Copyright 2019 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.daemonset_ipmi }} +{{- $envAll := . }} + +{{- $mounts_ceilometer_ipmi := .Values.pod.mounts.ceilometer_ipmi.ceilometer_ipmi }} +{{- $mounts_ceilometer_ipmi_init := .Values.pod.mounts.ceilometer_ipmi.init_container }} + +{{- $serviceAccountName := "ceilometer-ipmi" }} +{{ tuple $envAll "ipmi" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }} +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: ceilometer-ipmi + annotations: + {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }} + labels: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} +spec: + selector: + matchLabels: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 6 }} +{{ tuple $envAll "ipmi" | include "helm-toolkit.snippets.kubernetes_upgrades_daemonset" | indent 2 }} + template: + metadata: + labels: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} + annotations: +{{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" | indent 8 }} + configmap-bin-hash: {{ tuple "configmap-bin.yaml" . | include "helm-toolkit.utils.hash" }} + configmap-etc-hash: {{ tuple "configmap-etc.yaml" . | include "helm-toolkit.utils.hash" }} + spec: + serviceAccountName: {{ $serviceAccountName }} + affinity: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }} + hostNetwork: true + hostPID: true + dnsPolicy: ClusterFirstWithHostNet + nodeSelector: + {{ .Values.labels.ipmi.node_selector_key }}: {{ .Values.labels.ipmi.node_selector_value }} + initContainers: +{{ tuple $envAll "ipmi" $mounts_ceilometer_ipmi_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} + containers: + - name: ceilometer-ipmi +{{ tuple $envAll "ceilometer_ipmi" | include "helm-toolkit.snippets.image" | indent 10 }} +{{ tuple $envAll $envAll.Values.pod.resources.ipmi | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} + securityContext: + privileged: true + command: + - /tmp/ceilometer-ipmi.sh + volumeMounts: + - name: pod-etc-ceilometer + mountPath: /etc/ceilometer + - name: ceilometer-etc + mountPath: /etc/ceilometer/ceilometer.conf + subPath: ceilometer.conf + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/api_paste.ini + subPath: api_paste.ini + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/policy.json + subPath: policy.json + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/event_definitions.yaml + subPath: event_definitions.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/event_pipeline.yaml + subPath: event_pipeline.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/pipeline.yaml + subPath: pipeline.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/gnocchi_resources.yaml + subPath: gnocchi_resources.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/polling.yaml + subPath: polling.yaml + readOnly: true + - name: ceilometer-bin + mountPath: /tmp/ceilometer-ipmi.sh + subPath: ceilometer-ipmi.sh + readOnly: true + - name: ipmi-device + mountPath: {{ .Values.ipmi_device }} + readOnly: true +{{ if $mounts_ceilometer_ipmi.volumeMounts }}{{ toYaml $mounts_ceilometer_ipmi.volumeMounts | indent 12 }}{{ end }} + volumes: + - name: pod-etc-ceilometer + emptyDir: {} + - name: ceilometer-etc + secret: + secretName: ceilometer-etc + defaultMode: 0444 + - name: ceilometer-bin + configMap: + name: ceilometer-bin + defaultMode: 0555 + - name: ipmi-device + hostPath: + path: {{ .Values.ipmi_device }} +{{ if $mounts_ceilometer_ipmi.volumes }}{{ toYaml $mounts_ceilometer_ipmi.volumes | indent 8 }}{{ end }} +{{- end }} diff --git a/ceilometer/values.yaml b/ceilometer/values.yaml index d674e3cbb4..31d733a52d 100644 --- a/ceilometer/values.yaml +++ b/ceilometer/values.yaml @@ -29,6 +29,9 @@ labels: central: node_selector_key: openstack-control-plane node_selector_value: enabled + ipmi: + node_selector_key: openstack-node + node_selector_value: enabled collector: node_selector_key: openstack-control-plane node_selector_value: enabled @@ -56,6 +59,7 @@ images: ceilometer_central: docker.io/kolla/ubuntu-source-ceilometer-central:ocata ceilometer_collector: docker.io/kolla/ubuntu-source-ceilometer-collector:ocata ceilometer_compute: docker.io/kolla/ubuntu-source-ceilometer-compute:ocata + ceilometer_ipmi: docker.io/kolla/ubuntu-source-ceilometer-base:ocata ceilometer_notification: docker.io/kolla/ubuntu-source-ceilometer-notification:ocata dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 image_repo_sync: docker.io/docker:17.07.0 @@ -80,6 +84,8 @@ network: enabled: false port: 38777 +ipmi_device: /dev/ipmi0 + conf: ceilometer: DEFAULT: @@ -1500,6 +1506,22 @@ dependencies: service: mongodb - endpoint: internal service: metric + ipmi: + jobs: + - ceilometer-db-init-mongodb + - ceilometer-db-sync + - ceilometer-rabbit-init + - ceilometer-ks-user + - ceilometer-ks-endpoints + services: + - endpoint: internal + service: identity + - endpoint: internal + service: oslo_db + - endpoint: internal + service: mongodb + - endpoint: internal + service: metric collector: jobs: - ceilometer-db-init-mongodb @@ -1808,6 +1830,9 @@ pod: ceilometer_central: init_container: null ceilometer_central: + ceilometer_ipmi: + init_container: null + ceilometer_ipmi: ceilometer_collector: init_container: null ceilometer_collector: @@ -1876,6 +1901,13 @@ pod: limits: memory: "1024Mi" cpu: "2000m" + ipmi: + requests: + memory: "124Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "2000m" jobs: db_init: requests: @@ -1953,6 +1985,7 @@ manifests: deployment_central: true deployment_collector: true daemonset_compute: true + daemonset_ipmi: false deployment_notification: true ingress_api: true job_bootstrap: true