Pod scheduling in Openshift/Kubernetes

3/3/2020

I would like to apply a daily schedule to a pod so that it is created at 9 AM and destroyed at 9 PM.

I believe this is possible using two almost-identical CronJobs set with the appropriate schedules.

The Jobs create a pod that runs the following commands in the morning and evening respectively:

...
command: ["oc scale dc my-dc",  "--replicas=1"] # The command to execute in the pod
...
...
command: ["oc scale dc my-dc",  "--replicas=0"] # The command to execute in the pod
...

To execute these commands I'm planning to use this image since it comes with the Openshift CLI installed: https://hub.docker.com/r/ebits/openshift-client

Can anyone advise any recommendations to carry out this task? Are there any aspects I didn't consider?

Thanks

-- kungfubamba
cron
kubernetes-pod
openshift
schedule

1 Answer

3/6/2020

I'll share the method that worked for me.

The CronJob I wrote creates a container based on this image (remember to specify the Openshift version using the right tag) and runs the typical oc commands to login and scale the DC mentioned above.

The tricky part for me was to understand the correct syntax execute the commands in the container after creation.

Anyway, below I included the container definition I specified in the CronJob yaml file:

...
spec:
  containers:
    - name: oc-cli
      image: 'registry.access.redhat.com/openshift3/ose-cli:v3.11.153' # <===== SPECIFY YOUR OPENSHIFT VERSION
      command:
        - /bin/sh
        - '-c'
        - >-
          oc login https://<LOGIN URL>/
          --insecure-skip-tls-verify -u <LOGIN USERNAME> -p <LOGIN PASSWORD> ; oc scale
          dc/example --replicas=1 -n cronjob-test ;
...

Writing the password explicitly might be a problem so I added a Secret and made a reference to it in the same CronJob so that the secret data were part of the environment variables:

...
spec:
  containers:
    - name: oc-cli
      image: 'registry.access.redhat.com/openshift3/ose-cli:v3.11.153' # <===== SPECIFY YOUR OPENSHIFT VERSION
      command:
        - /bin/sh
        - '-c'
        - >-
          oc login $OC_URL --insecure-skip-tls-verify -u $OC_USER -p
          $OC_PASSWORD ; oc scale dc/example --replicas=5 -n
          cronjob-test ;
      env:
        - name: OC_USER
          valueFrom:
            secretKeyRef:
              name: oc-login-credentials
              key: username
        - name: OC_PASSWORD
          valueFrom:
            secretKeyRef:
              name: oc-login-credentials
              key: password
        - name: OC_URL
          valueFrom:
            secretKeyRef:
              name: oc-login-credentials
              key: url
...

Unfortunately, Red Hat's documentation on the matter is not very helpful as it only provides one example.

Kubernetes' docs were slightly more useful instead.

-- kungfubamba
Source: StackOverflow