From fc76091261cb41fd56c8b5f4aadd7f0fab3c8091 Mon Sep 17 00:00:00 2001 From: Matthew Heler Date: Mon, 28 Jan 2019 13:41:19 -0600 Subject: [PATCH] [CEPH] Fixes for the OSD defrag cronjob Fix a naming issue with the cronjob's binary, and schedule the cron job to run every 15 minutes for the gates. Additonally check to to ensure we are only running on block devices. Also update the script to work with ceph-volume created devices. Change-Id: I8aedab0ac41c191ef39a08034fff3278027d7520 --- ceph-osd/templates/bin/utils/_defragOSDs.sh.tpl | 9 +++++---- ceph-osd/templates/cronjob-defragosds.yaml | 6 +++--- ceph-osd/values.yaml | 2 +- tools/deployment/multinode/030-ceph.sh | 15 ++++++++++++++- tools/deployment/osh-infra-logging/020-ceph.sh | 16 ++++++++++++++-- tools/deployment/tenant-ceph/030-ceph.sh | 14 ++++++++++++++ tools/deployment/tenant-ceph/040-tenant-ceph.sh | 14 ++++++++++++++ 7 files changed, 65 insertions(+), 11 deletions(-) diff --git a/ceph-osd/templates/bin/utils/_defragOSDs.sh.tpl b/ceph-osd/templates/bin/utils/_defragOSDs.sh.tpl index 1cb27a52c..6ea62ba19 100644 --- a/ceph-osd/templates/bin/utils/_defragOSDs.sh.tpl +++ b/ceph-osd/templates/bin/utils/_defragOSDs.sh.tpl @@ -31,14 +31,15 @@ if [ "x${ARG}" == "xcron" ]; then done fi -if [ "x${ARG}" == "xdefrag" ]; then +if [ "x${ARG}" == "xdefrag" ] && [ "x${STORAGE_TYPE%-*}" == "xblock" ]; then + OSD_DEVICE=$(readlink -f ${STORAGE_LOCATION}) + ODEV=$(echo ${OSD_DEVICE} | sed 's/[0-9]//g' | cut -f 3 -d '/') OSD_PATH=$(cat /proc/mounts | awk '/ceph-/{print $2}') - OSD_DEVICE=$(cat /proc/mounts | awk '/ceph-/{print $1}') OSD_STORE=$(cat ${OSD_PATH}/type) + DATA_PART=$(cat /proc/mounts | awk '/ceph-/{print $1}') - ODEV=$(echo "${OSD_DEVICE}" | sed 's/\(.*[^0-9]\)[0-9]*$/\1/' | awk -F'/' '{print $3}') ODEV_ROTATIONAL=$(cat /sys/block/${ODEV}/queue/rotational) - ODEV_SCHEDULER=$(cat /sys/block/${ODEV}/queue/scheduler) + ODEV_SCHEDULER=$(cat /sys/block/${ODEV}/queue/scheduler | tr -d '[]') # NOTE(supamatt): TODO implement bluestore defrag options once it's available upstream if [ "${ODEV_ROTATIONAL}" -eq "1" ] && [ "x${OSD_STORE}" == "xfilestore" ]; then diff --git a/ceph-osd/templates/cronjob-defragosds.yaml b/ceph-osd/templates/cronjob-defragosds.yaml index d75e6c053..f3e9363f2 100644 --- a/ceph-osd/templates/cronjob-defragosds.yaml +++ b/ceph-osd/templates/cronjob-defragosds.yaml @@ -84,12 +84,12 @@ spec: fieldPath: metadata.namespace - name: KUBECTL_PARAM value: {{ tuple $envAll "ceph" "ceph-defragosd" | include "helm-toolkit.snippets.kubernetes_kubectl_params" | indent 10 }} - command: ["/tmp/utils-defragosds.sh"] + command: ["/tmp/utils-defragOSDs.sh"] args: ["cron"] volumeMounts: - name: ceph-osd-bin - mountPath: /tmp/utils-defragosds.sh - subPath: utils-defragosds.sh + mountPath: /tmp/utils-defragOSDs.sh + subPath: utils-defragOSDs.sh readOnly: true restartPolicy: Never hostNetwork: true diff --git a/ceph-osd/values.yaml b/ceph-osd/values.yaml index dedb1f45f..062f32957 100644 --- a/ceph-osd/values.yaml +++ b/ceph-osd/values.yaml @@ -272,4 +272,4 @@ manifests: daemonset_osd: true job_image_repo_sync: true helm_tests: true - cronjob_defragosds: true + cronjob_defragosds: false diff --git a/tools/deployment/multinode/030-ceph.sh b/tools/deployment/multinode/030-ceph.sh index ee003710d..e5aebbcbf 100755 --- a/tools/deployment/multinode/030-ceph.sh +++ b/tools/deployment/multinode/030-ceph.sh @@ -74,9 +74,22 @@ conf: journal: type: directory location: /var/lib/openstack-helm/ceph/osd/journal-one - +jobs: + ceph_defragosds: + # Execute every 15 minutes for gates + cron: "*/15 * * * *" + history: + # Number of successful job to keep + successJob: 1 + # Number of failed job to keep + failJob: 1 + concurrency: + # Skip new job if previous job still active + execPolicy: Forbid + startingDeadlineSecs: 60 manifests: cronjob_checkPGs: true + cronjob_defragosds: true EOF for CHART in ceph-mon ceph-osd ceph-client ceph-provisioners; do diff --git a/tools/deployment/osh-infra-logging/020-ceph.sh b/tools/deployment/osh-infra-logging/020-ceph.sh index 407a054e0..f095ae383 100755 --- a/tools/deployment/osh-infra-logging/020-ceph.sh +++ b/tools/deployment/osh-infra-logging/020-ceph.sh @@ -166,15 +166,27 @@ conf: journal: type: directory location: /var/lib/openstack-helm/ceph/osd/journal-one - pod: replicas: mds: 1 mgr: 1 rgw: 1 - +jobs: + ceph_defragosds: + # Execute every 15 minutes for gates + cron: "*/15 * * * *" + history: + # Number of successful job to keep + successJob: 1 + # Number of failed job to keep + failJob: 1 + concurrency: + # Skip new job if previous job still active + execPolicy: Forbid + startingDeadlineSecs: 60 manifests: cronjob_checkPGs: true + cronjob_defragosds: true EOF for CHART in ceph-mon ceph-osd ceph-client ceph-provisioners; do diff --git a/tools/deployment/tenant-ceph/030-ceph.sh b/tools/deployment/tenant-ceph/030-ceph.sh index c1a2c8297..8a99bd0de 100755 --- a/tools/deployment/tenant-ceph/030-ceph.sh +++ b/tools/deployment/tenant-ceph/030-ceph.sh @@ -57,8 +57,22 @@ deployment: cephfs_provisioner: true client_secrets: false rgw_keystone_user_and_endpoints: false +jobs: + ceph_defragosds: + # Execute every 15 minutes for gates + cron: "*/15 * * * *" + history: + # Number of successful job to keep + successJob: 1 + # Number of failed job to keep + failJob: 1 + concurrency: + # Skip new job if previous job still active + execPolicy: Forbid + startingDeadlineSecs: 60 manifests: deployment_mds: false + cronjob_defragosds: true bootstrap: enabled: true conf: diff --git a/tools/deployment/tenant-ceph/040-tenant-ceph.sh b/tools/deployment/tenant-ceph/040-tenant-ceph.sh index a92b7b8e8..6f971994b 100755 --- a/tools/deployment/tenant-ceph/040-tenant-ceph.sh +++ b/tools/deployment/tenant-ceph/040-tenant-ceph.sh @@ -88,8 +88,22 @@ storageclass: admin_secret_namespace: tenant-ceph bootstrap: enabled: true +jobs: + ceph_defragosds: + # Execute every 15 minutes for gates + cron: "*/15 * * * *" + history: + # Number of successful job to keep + successJob: 1 + # Number of failed job to keep + failJob: 1 + concurrency: + # Skip new job if previous job still active + execPolicy: Forbid + startingDeadlineSecs: 60 manifests: deployment_mds: false + cronjob_defragosds: true ceph_mgr_modules_config: prometheus: server_port: 9284