Skip to content

MODE=MANUAL and MANUAL_RUN_FOREVER=FALSE not working in 4.0.19 #290

@ruarkadi

Description

@ruarkadi

Summary

I am wrapping the docker-db-backup in a kubernetes cronjob yaml manifest with all the (supposedly) correct environment variables indicated in the README.md file for these cases. My goal is to have the system run its' jobs and exit.

However, it finished the very small backup and then just loops around to sleeping instead of existing. It appears as though the "persist" param in install/assets/dbbackup/template-dbbackup/run isn't set properly. Perhaps at this section:

if [[ "${MODE,,}" =~ "standalone" ]] || [ "${1,,}" = "manual" ] || [ "${1,,}" = "now" ]; then

Steps to reproduce

Create a CronJob with similar specs:

apiVersion: batch/v1
kind: CronJob
metadata:
  labels:
    app.kubernetes.io/component: mongodump
    app.kubernetes.io/instance: mongodb-gmfc-rkd
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: mongodb
    app.kubernetes.io/version: 7.0.3
    argocd.argoproj.io/instance: mongodb-gmfc-rkd
    helm.sh/chart: mongodb-14.3.0
  name: mongodb-mongodump
  namespace: mongodb
  resourceVersion: '7331833'
  uid: c10456d1-6646-4302-9e27-1a543c1b4ef5
spec:
  concurrencyPolicy: Replace
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app.kubernetes.io/component: mongodump
            app.kubernetes.io/instance: mongodb-gmfc-rkd
            app.kubernetes.io/managed-by: Helm
            app.kubernetes.io/name: mongodb
            app.kubernetes.io/version: 7.0.3
            helm.sh/chart: mongodb-14.3.0
        spec:
          containers:
            - env:
                - name: MODE
                  value: MANUAL
                - name: MANUAL_RUN_FOREVER
                  value: 'FALSE'
                - name: BACKUP_JOB_CONCURRENCY
                  value: '1'
                - name: CONTAINER_ENABLE_MONITORING
                  value: 'FALSE'
                - name: CONTAINER_ENABLE_SCHEDULING
                  value: 'FALSE'
                - name: CONTAINER_ENABLE_MESSAGING
                  value: 'FALSE'
                - name: CONTAINER_ENABLE_LOGROTATE
                  value: 'FALSE'
                - name: TIMEZONE
                  value: Etc/UTC
                - name: CONTAINER_NAME
                  value: mongodb-mongodump
                - name: DEFAULT_LOG_LEVEL
                  value: DEBUG
                - name: DEBUG_MODE
                  value: 'TRUE'
                - name: DEFAULT_COMPRESSION
                  value: GZ
                - name: DEFAULT_BACKUP_LOCATION
                  value: S3
                - name: DEFAULT_S3_BUCKET
                  value: XXXXXXXXXX
                - name: DEFAULT_S3_KEY_ID
                  value: >-
                    XXXXXXXXXXXXXXXXX
                - name: DEFAULT_S3_KEY_SECRET
                  value: XXXXXXXXXXXX
                - name: DEFAULT_S3_PATH
                  value: TEST/2023/11/21
                - name: DEFAULT_S3_REGION
                  value: us
                - name: DEFAULT_S3_HOST
                  value: storage.googleapis.com
                - name: DB01_TYPE
                  value: mongo
                - name: DB01_HOST
                  value: mongodb-headless
                - name: DB01_NAME
                  value: base_monitor
                - name: DB01_AUTH
                  value: admin
                - name: DB01_USER
                  value: test
                - name: DB01_PASS
                  valueFrom:
                    secretKeyRef:
                      key: mongodb-root-password
                      name: mongodb-secret-mongodb
              image: 'tiredofit/db-backup:4.0.19'
              imagePullPolicy: IfNotPresent
              name: mongodb-mongodump
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: OnFailure
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
  schedule: '*/30 * * * *'
  successfulJobsHistoryLimit: 3
  suspend: false

The manifest above is templated from the following helm template as an ExtraDeploy in bitnami mongodb chart:

            apiVersion: batch/v1
            kind: CronJob
            metadata:
              name: {{ include "mongodb.fullname" . }}-mongodump
              namespace: {{ include "mongodb.namespace" . | quote }}
              labels: {{- include "common.labels.standard" . | nindent 4 }}
                app.kubernetes.io/component: mongodump
                {{- if .Values.commonLabels }}
                {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
                {{- end }}
              {{- if .Values.commonAnnotations }}
              annotations:
                {{- if .Values.commonAnnotations }}
                {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
                {{- end }}
              {{- end }}
            spec:
              concurrencyPolicy: Replace
              schedule: '*/30 * * * *'
              jobTemplate:
                spec:
                  template:
                    metadata:
                      labels: {{- include "common.labels.standard" . | nindent 12 }}
                        app.kubernetes.io/component: mongodump
                        {{- if .Values.commonLabels }}
                        {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 12 }}
                        {{- end }}
                      {{- if or .Values.annotations .Values.commonAnnotations }}
                      annotations:
                        {{- if .Values.commonAnnotations }}
                        {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 12 }}
                        {{- end }}
                      {{- end }}
                    spec:
                      restartPolicy: OnFailure
                      containers:
                      - name: {{ include "mongodb.fullname" . }}-mongodump
                        image: "tiredofit/db-backup:4.0.19"
                        env:
                        - name: MODE
                          value: "MANUAL"
                        - name: MANUAL_RUN_FOREVER
                          value: "FALSE"
                        - name: BACKUP_JOB_CONCURRENCY
                          value: "1"
                        - name: CONTAINER_ENABLE_MONITORING
                          value: "FALSE"
                        - name: CONTAINER_ENABLE_SCHEDULING
                          value: "FALSE"
                        - name: CONTAINER_ENABLE_MESSAGING
                          value: "FALSE"
                        - name: CONTAINER_ENABLE_LOGROTATE
                          value: "FALSE"
                        - name: TIMEZONE
                          value: Etc/UTC
                        - name: CONTAINER_NAME
                          value: "{{ include "mongodb.fullname" . }}-mongodump"
                        - name: DEFAULT_LOG_LEVEL
                          value: DEBUG
                        - name: DEBUG_MODE
                          value: "TRUE"                        
                        - name: DEFAULT_COMPRESSION
                          value: GZ
                        - name: DEFAULT_BACKUP_LOCATION
                          value: S3
                        - name: DEFAULT_S3_BUCKET
                          value: test-bucket
                        - name: DEFAULT_S3_KEY_ID
                          value: "key"
                        - name: DEFAULT_S3_KEY_SECRET
                          value: "secret"
                        - name: DEFAULT_S3_PATH
                          value: {{ .Values.global.clusterName | upper }}/{{ now | date "2006/01/02" }}
                        - name: DEFAULT_S3_REGION
                          value: us
                        - name: DEFAULT_S3_HOST
                          value: storage.googleapis.com
                        - name: DB01_TYPE
                          value: mongo
                        - name: DB01_HOST
                          value: {{ include "mongodb.service.nameOverride" . }}
                        - name: DB01_NAME
                          value: test
                        - name: DB01_AUTH
                          value: admin
                        - name: DB01_USER
                          value: {{ .Values.auth.rootUser | quote }}
                        - name: DB01_PASS
                          valueFrom:
                            secretKeyRef:
                              name: {{ include "mongodb.secretName" . }}
                              key: mongodb-root-password

What is the expected correct behavior?

Have this bit of code working correctly:

    symlink_log
    cleanup_old_data

    if var_false "${persist}" ; then
        print_debug "Exiting due to manual mode"
        exit "${exitcode_backup}";

Relevant logs and/or screenshots

Debug log below

env command output from within the container:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=mongodb-mongodump-28342770-xtphc
FLUENTBIT_VERSION=2.2.0
S6_OVERLAY_VERSION=3.1.6.2
YQ_VERSION=v4.35.2
ZABBIX_VERSION=6.4.8
DOAS_VERSION=v6.8.2
DEBUG_MODE=TRUE
TIMEZONE=Etc/UTC
CONTAINER_ENABLE_SCHEDULING=FALSE
CONTAINER_SCHEDULING_BACKEND=cron
CONTAINER_ENABLE_MESSAGING=FALSE
CONTAINER_MESSAGING_BACKEND=msmtp
CONTAINER_ENABLE_MONITORING=FALSE
CONTAINER_MONITORING_BACKEND=zabbix
CONTAINER_ENABLE_LOGSHIPPING=FALSE
S6_GLOBAL_PATH=/command:/usr/bin:/bin:/usr/sbin:sbin:/usr/local/bin:/usr/local/sbin
S6_KEEP_ENV=1
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
IMAGE_NAME=tiredofit/db-backup
IMAGE_REPO_URL=https://github.com/tiredofit/docker-db-backup/
INFLUX1_CLIENT_VERSION=1.8.0
INFLUX2_CLIENT_VERSION=2.7.3
MSODBC_VERSION=18.3.2.1-1
MSSQL_VERSION=18.3.1.1-1
AWS_CLI_VERSION=1.29.78
DEFAULT_S3_KEY_SECRET=KEY_SECRET
DEFAULT_S3_PATH=TEST/2023/11/21
DEFAULT_S3_REGION=us
MODE=MANUAL
BACKUP_JOB_CONCURRENCY=1
DEFAULT_BACKUP_LOCATION=S3
DEFAULT_S3_BUCKET=testbucket
DB01_TYPE=mongo
DB01_HOST=mongodb-headless
DB01_USER=csr
MANUAL_RUN_FOREVER=FALSE
CONTAINER_ENABLE_LOGROTATE=FALSE
DEFAULT_LOG_LEVEL=DEBUG
DEFAULT_S3_KEY_ID=KEY_ID
DEFAULT_S3_HOST=storage.googleapis.com
CONTAINER_NAME=mongodb-mongodump
DEFAULT_COMPRESSION=GZ
DB01_PASS=dummypass
DB01_NAME=base_monitor
DB01_AUTH=admin
MONGO_EXPRESS_GMFC_RKD_PORT=tcp://10.43.74.157:8081
MONGO_EXPRESS_GMFC_RKD_PORT_8081_TCP_PROTO=tcp
MONGO_EXPRESS_GMFC_RKD_PORT_8081_TCP_ADDR=10.43.74.157
MONGODB_METRICS_SERVICE_HOST=10.43.215.128
MONGODB_METRICS_SERVICE_PORT=9216
MONGODB_METRICS_PORT_9216_TCP=tcp://10.43.215.128:9216
KUBERNETES_SERVICE_HOST=10.43.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.43.0.1
MONGO_EXPRESS_GMFC_RKD_PORT_8081_TCP_PORT=8081
MONGODB_METRICS_PORT_9216_TCP_PROTO=tcp
MONGODB_METRICS_PORT_9216_TCP_ADDR=10.43.215.128
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
MONGO_EXPRESS_GMFC_RKD_SERVICE_PORT_HTTP=8081
MONGODB_METRICS_SERVICE_PORT_HTTP_METRICS=9216
KUBERNETES_PORT_443_TCP=tcp://10.43.0.1:443
KUBERNETES_PORT=tcp://10.43.0.1:443
MONGO_EXPRESS_GMFC_RKD_SERVICE_HOST=10.43.74.157
MONGO_EXPRESS_GMFC_RKD_SERVICE_PORT=8081
MONGO_EXPRESS_GMFC_RKD_PORT_8081_TCP=tcp://10.43.74.157:8081
MONGODB_METRICS_PORT=tcp://10.43.215.128:9216
MONGODB_METRICS_PORT_9216_TCP_PORT=9216
KUBERNETES_SERVICE_PORT_HTTPS=443
TERM=xterm
HOME=/root

Environment

This is a K3S cluster running version: v1.26.6+k3s1
I have added this CronJob as part of the bitnami mongodb chart version: mongodb-14.3.0
It is deployed using ArgoCD version: v2.8.3+77556d9

  • Image version / tag: 4.0.19
  • Host OS: Ubuntu 20.04
Any logs | docker-compose.yml

Possible fixes

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions