diff --git a/releasenotes/notes/senlin.yaml b/releasenotes/notes/senlin.yaml index 83915f715f..63dc190d13 100644 --- a/releasenotes/notes/senlin.yaml +++ b/releasenotes/notes/senlin.yaml @@ -5,4 +5,5 @@ senlin: - 0.2.0 Remove support for releases before T - 0.2.1 Use policies in yaml format - 0.2.2 Update htk requirements repo + - 0.2.3 Add conductor & health manager ... diff --git a/senlin/Chart.yaml b/senlin/Chart.yaml index ddebabc93c..fa851dca05 100644 --- a/senlin/Chart.yaml +++ b/senlin/Chart.yaml @@ -14,7 +14,7 @@ apiVersion: v1 appVersion: v1.0.0 description: OpenStack-Helm Senlin name: senlin -version: 0.2.2 +version: 0.2.3 home: https://docs.openstack.org/senlin/latest/ icon: https://www.openstack.org/themes/openstack/images/project-mascots/Senlin/OpenStack_Project_Senlin_vertical.png sources: diff --git a/senlin/templates/bin/_senlin-conductor.sh.tpl b/senlin/templates/bin/_senlin-conductor.sh.tpl new file mode 100644 index 0000000000..ea120a6bf3 --- /dev/null +++ b/senlin/templates/bin/_senlin-conductor.sh.tpl @@ -0,0 +1,19 @@ +#!/bin/bash + +{{/* +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 senlin-conductor \ + --config-file /etc/senlin/senlin.conf \ No newline at end of file diff --git a/senlin/templates/bin/_senlin-health-manager.sh.tpl b/senlin/templates/bin/_senlin-health-manager.sh.tpl new file mode 100644 index 0000000000..b19779a83d --- /dev/null +++ b/senlin/templates/bin/_senlin-health-manager.sh.tpl @@ -0,0 +1,19 @@ +#!/bin/bash + +{{/* +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 senlin-health-manager \ + --config-file /etc/senlin/senlin.conf \ No newline at end of file diff --git a/senlin/templates/configmap-bin.yaml b/senlin/templates/configmap-bin.yaml index 04de6e67d5..1236ddc9da 100644 --- a/senlin/templates/configmap-bin.yaml +++ b/senlin/templates/configmap-bin.yaml @@ -45,10 +45,14 @@ data: {{- include "helm-toolkit.scripts.keystone_user" . | indent 4 }} senlin-api.sh: | {{ tuple "bin/_senlin-api.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} + senlin-conductor.sh: | +{{ tuple "bin/_senlin-conductor.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} senlin-engine.sh: | {{ tuple "bin/_senlin-engine.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} senlin-engine-cleaner.sh: | {{ tuple "bin/_senlin-engine-cleaner.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} + senlin-health-manager.sh: | +{{ tuple "bin/_senlin-health-manager.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} rabbit-init.sh: | {{- include "helm-toolkit.scripts.rabbit_init" . | indent 4 }} {{- end }} diff --git a/senlin/templates/deployment-conductor.yaml b/senlin/templates/deployment-conductor.yaml new file mode 100644 index 0000000000..d60ada4937 --- /dev/null +++ b/senlin/templates/deployment-conductor.yaml @@ -0,0 +1,102 @@ +{{/* +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.deployment_conductor }} +{{- $envAll := . }} + +{{- $mounts_senlin_conductor := .Values.pod.mounts.senlin_conductor.senlin_conductor }} +{{- $mounts_senlin_conductor_init := .Values.pod.mounts.senlin_conductor.init_container }} + +{{- $serviceAccountName := "senlin-conductor" }} +{{ tuple $envAll "conductor" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: senlin-conductor + annotations: + {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }} + labels: +{{ tuple $envAll "senlin" "conductor" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} +spec: + replicas: {{ .Values.pod.replicas.conductor }} + selector: + matchLabels: +{{ tuple $envAll "senlin" "conductor" | 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 "senlin" "conductor" | 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 "senlin" "conductor" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }} + nodeSelector: + {{ .Values.labels.conductor.node_selector_key }}: {{ .Values.labels.conductor.node_selector_value }} + initContainers: +{{ tuple $envAll "conductor" $mounts_senlin_conductor_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} + containers: + - name: senlin-conductor +{{ tuple $envAll "senlin_conductor" | include "helm-toolkit.snippets.image" | indent 10 }} +{{ tuple $envAll $envAll.Values.pod.resources.conductor | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} + securityContext: + runAsUser: {{ .Values.pod.user.senlin.uid }} + command: + - /tmp/senlin-conductor.sh + volumeMounts: + - name: pod-tmp + mountPath: /tmp + - name: senlin-bin + mountPath: /tmp/senlin-conductor.sh + subPath: senlin-conductor.sh + readOnly: true + - name: pod-etc-senlin + mountPath: /etc/senlin + - name: senlin-etc + mountPath: /etc/senlin/senlin.conf + subPath: senlin.conf + readOnly: true + {{- if .Values.conf.senlin.DEFAULT.log_config_append }} + - name: senlin-etc + mountPath: {{ .Values.conf.senlin.DEFAULT.log_config_append }} + subPath: {{ base .Values.conf.senlin.DEFAULT.log_config_append }} + readOnly: true + {{- end }} + - name: senlin-etc + mountPath: /etc/senlin/policy.json + subPath: policy.json + readOnly: true +{{ if $mounts_senlin_conductor.volumeMounts }}{{ toYaml $mounts_senlin_conductor.volumeMounts | indent 12 }}{{ end }} + volumes: + - name: pod-tmp + emptyDir: {} + - name: pod-etc-senlin + emptyDir: {} + - name: pod-var-cache-senlin + emptyDir: {} + - name: senlin-bin + configMap: + name: senlin-bin + defaultMode: 0555 + - name: senlin-etc + secret: + secretName: senlin-etc + defaultMode: 0444 +{{ if $mounts_senlin_conductor.volumes }}{{ toYaml $mounts_senlin_conductor.volumes | indent 8 }}{{ end }} +{{- end }} \ No newline at end of file diff --git a/senlin/templates/deployment-health-manager.yaml b/senlin/templates/deployment-health-manager.yaml new file mode 100644 index 0000000000..e081c36544 --- /dev/null +++ b/senlin/templates/deployment-health-manager.yaml @@ -0,0 +1,102 @@ +{{/* +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.deployment_health_manager }} +{{- $envAll := . }} + +{{- $mounts_senlin_health_manager := .Values.pod.mounts.senlin_health_manager.senlin_health_manager }} +{{- $mounts_senlin_health_manager_init := .Values.pod.mounts.senlin_health_manager.init_container }} + +{{- $serviceAccountName := "senlin-health-manager" }} +{{ tuple $envAll "health_manager" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: senlin-health-manager + annotations: + {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }} + labels: +{{ tuple $envAll "senlin" "health_manager" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} +spec: + replicas: {{ .Values.pod.replicas.health_manager }} + selector: + matchLabels: +{{ tuple $envAll "senlin" "health_manager" | 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 "senlin" "health_manager" | 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 "senlin" "health_manager" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }} + nodeSelector: + {{ .Values.labels.health_manager.node_selector_key }}: {{ .Values.labels.health_manager.node_selector_value }} + initContainers: +{{ tuple $envAll "health_manager" $mounts_senlin_health_manager_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} + containers: + - name: senlin-health-manager +{{ tuple $envAll "senlin_health_manager" | include "helm-toolkit.snippets.image" | indent 10 }} +{{ tuple $envAll $envAll.Values.pod.resources.health_manager | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} + securityContext: + runAsUser: {{ .Values.pod.user.senlin.uid }} + command: + - /tmp/senlin-health-manager.sh + volumeMounts: + - name: pod-tmp + mountPath: /tmp + - name: senlin-bin + mountPath: /tmp/senlin-health-manager.sh + subPath: senlin-health-manager.sh + readOnly: true + - name: pod-etc-senlin + mountPath: /etc/senlin + - name: senlin-etc + mountPath: /etc/senlin/senlin.conf + subPath: senlin.conf + readOnly: true + {{- if .Values.conf.senlin.DEFAULT.log_config_append }} + - name: senlin-etc + mountPath: {{ .Values.conf.senlin.DEFAULT.log_config_append }} + subPath: {{ base .Values.conf.senlin.DEFAULT.log_config_append }} + readOnly: true + {{- end }} + - name: senlin-etc + mountPath: /etc/senlin/policy.json + subPath: policy.json + readOnly: true +{{ if $mounts_senlin_health_manager.volumeMounts }}{{ toYaml $mounts_senlin_health_manager.volumeMounts | indent 12 }}{{ end }} + volumes: + - name: pod-tmp + emptyDir: {} + - name: pod-etc-senlin + emptyDir: {} + - name: pod-var-cache-senlin + emptyDir: {} + - name: senlin-bin + configMap: + name: senlin-bin + defaultMode: 0555 + - name: senlin-etc + secret: + secretName: senlin-etc + defaultMode: 0444 +{{ if $mounts_senlin_health_manager.volumes }}{{ toYaml $mounts_senlin_health_manager.volumes | indent 8 }}{{ end }} +{{- end }} \ No newline at end of file diff --git a/senlin/values.yaml b/senlin/values.yaml index 3ad5e5bf5b..b99fe85463 100644 --- a/senlin/values.yaml +++ b/senlin/values.yaml @@ -20,9 +20,15 @@ labels: api: node_selector_key: openstack-control-plane node_selector_value: enabled + conductor: + node_selector_key: openstack-control-plane + node_selector_value: enabled engine: node_selector_key: openstack-control-plane node_selector_value: enabled + health_manager: + node_selector_key: openstack-control-plane + node_selector_value: enabled job: node_selector_key: openstack-control-plane node_selector_value: enabled @@ -44,8 +50,10 @@ images: ks_service: docker.io/openstackhelm/heat:ocata-ubuntu_xenial ks_endpoints: docker.io/openstackhelm/heat:ocata-ubuntu_xenial senlin_api: docker.io/openstackhelm/senlin:ocata-ubuntu_xenial + senlin_conductor: docker.io/openstackhelm/senlin:ocata-ubuntu_xenial senlin_engine: docker.io/openstackhelm/senlin:ocata-ubuntu_xenial senlin_engine_cleaner: docker.io/openstackhelm/senlin:ocata-ubuntu_xenial + senlin_health_manager: docker.io/openstackhelm/senlin:ocata-ubuntu_xenial dep_check: quay.io/airshipit/kubernetes-entrypoint:v1.0.0 image_repo_sync: docker.io/docker:17.07.0 pull_policy: "IfNotPresent" @@ -319,6 +327,28 @@ dependencies: service: oslo_db - endpoint: internal service: identity + conductor: + jobs: + - senlin-db-sync + - senlin-ks-user + - senlin-ks-endpoints + - senlin-rabbit-init + services: + - endpoint: internal + service: oslo_db + - endpoint: internal + service: identity + health_manager: + jobs: + - senlin-db-sync + - senlin-ks-user + - senlin-ks-endpoints + - senlin-rabbit-init + services: + - endpoint: internal + service: oslo_db + - endpoint: internal + service: identity ks_endpoints: jobs: - senlin-ks-service @@ -519,11 +549,21 @@ pod: senlin_api: volumeMounts: volumes: + senlin_conductor: + init_container: null + senlin_conductor: + volumeMounts: + volumes: senlin_engine: init_container: null senlin_engine: volumeMounts: volumes: + senlin_health_manager: + init_container: null + senlin_health_manager: + volumeMounts: + volumes: senlin_bootstrap: init_container: null senlin_bootstrap: @@ -545,7 +585,9 @@ pod: volumes: replicas: api: 1 + conductor: 1 engine: 1 + health_manager: 1 lifecycle: upgrades: deployments: @@ -569,6 +611,13 @@ pod: limits: memory: "1024Mi" cpu: "2000m" + conductor: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "2000m" engine: requests: memory: "128Mi" @@ -576,6 +625,13 @@ pod: limits: memory: "1024Mi" cpu: "2000m" + health_manager: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "2000m" jobs: bootstrap: requests: @@ -667,7 +723,9 @@ manifests: configmap_etc: true cron_job_engine_cleaner: true deployment_api: true + deployment_conductor: true deployment_engine: true + deployment_health_manager: true ingress_api: true job_bootstrap: true job_db_init: true