-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add resources for ope-notebook-culler cronjob #3
base: main
Are you sure you want to change the base?
Changes from 3 commits
d2bbdac
8a34990
d70cc73
69e730f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,43 @@ | |
|
||
This repository is a collection of useful scripts and tools for TAs and professors to manage students workloads. | ||
|
||
## get_url.py | ||
## Cronjobs | ||
|
||
### ope-notebook-culler | ||
|
||
This cronjob runs once every 24 hours at 7am, removing all notebooks & pvcs from the rhods-notebooks namespace. To add resources to the rhods-notebooks namespace: | ||
|
||
1. Ensure you are logged in to your OpenShift account via the CLI and you have access to rhods-notebooks namespace. | ||
2. Switch to rhods-notebooks namespace: | ||
``` | ||
oc project rhods-notebooks | ||
``` | ||
|
||
3. From cronjobs/ope-notebook-culler/ directory run: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The directory name has changed. |
||
``` | ||
oc apply -k . | ||
``` | ||
|
||
This will deploy all the necessary resources for the cronjob to run on the specified schedule. | ||
dystewart marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Alternatively, to run the script immediately: | ||
|
||
1. Ensure you followed the steps above | ||
2. Verify the cronjob ope-notebook-culler exists | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
``` | ||
oc get cronjob ope-notebook-culler | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The new cronjob name is nb-culler. So the comand should be changed to |
||
``` | ||
|
||
3. Run: | ||
``` | ||
kubectl create -n rhods-notebooks job --from=cronjob/ope-notebook-culler ope-notebook-culler | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same. |
||
``` | ||
|
||
This will trigger the cronjob to spawn a job manually. | ||
dystewart marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Scripts | ||
|
||
### get_url.py | ||
|
||
This script is used to retrieve the URL for a particular notebook associated with one student. To execute this script: | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
kind: CronJob | ||
apiVersion: batch/v1 | ||
metadata: | ||
name: nb-culler | ||
labels: | ||
component.opendatahub.io/name: nb-culler | ||
opendatahub.io/component: 'true' | ||
opendatahub.io/modified: 'false' | ||
spec: | ||
schedule: '0 7 * * *' | ||
startingDeadlineSeconds: 200 | ||
concurrencyPolicy: Replace | ||
suspend: false | ||
jobTemplate: | ||
metadata: | ||
labels: | ||
component.opendatahub.io/name: nb-culler | ||
opendatahub.io/component: 'true' | ||
spec: | ||
template: | ||
metadata: | ||
labels: | ||
component.opendatahub.io/name: nb-culler | ||
opendatahub.io/component: 'true' | ||
parent: nb-culler | ||
spec: | ||
restartPolicy: Never | ||
serviceAccountName: ope-notebook-culler | ||
schedulerName: default-scheduler | ||
terminationGracePeriodSeconds: 30 | ||
securityContext: {} | ||
containers: | ||
- name: oc-cli | ||
image: >- | ||
registry.redhat.io/openshift4/ose-cli@sha256:25fef269ac6e7491cb8340119a9b473acbeb53bc6970ad029fdaae59c3d0ca61 | ||
command: ["/bin/bash", "-c", "--"] | ||
args: | ||
- | | ||
#threshold to stop running notebooks. Currently set to 24 hours | ||
cutoff_time=86400 | ||
current_time=$(date +%s) | ||
notebooks=$(oc get notebooks -n ope-rhods-testing-1fef2f -o jsonpath='{range .items[?(@.status.containerState.running)]}{.metadata.name}{" "}{.metadata.namespace}{" "}{.status.containerState.running.startedAt}{"\n"}{end}') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should be rhods-notebooks rather than ope-rhods-testing-1fef2f |
||
if [ -z "$notebooks" ]; then | ||
echo "No running notebooks found" | ||
exit 0 | ||
fi | ||
# Loop through each notebook | ||
while read -r nb ns ts; do | ||
timestamp=$(date -d $ts +%s) | ||
difference=$((current_time - timestamp)) | ||
if [ $difference -gt $cutoff_time ]; then | ||
echo "$nb is more than 24 hours old, stopping the notebook" | ||
oc patch notebook $nb -n $ns --type merge -p '{"metadata":{"annotations":{"kubeflow-resource-stopped":"'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'"}}}' | ||
fi | ||
done <<< "$notebooks" | ||
resources: | ||
limits: | ||
memory: 800Mi | ||
requests: | ||
memory: 400Mi | ||
terminationMessagePath: /dev/termination-log | ||
terminationMessagePolicy: File | ||
imagePullPolicy: IfNotPresent | ||
serviceAccount: ope-notebook-culler | ||
dnsPolicy: ClusterFirst | ||
successfulJobsHistoryLimit: 7 | ||
failedJobsHistoryLimit: 7 | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
apiVersion: kustomize.config.k8s.io/v1beta1 | ||
kind: Kustomization | ||
resources: | ||
- cronjob.yaml | ||
- rolebinding.yaml | ||
- serviceaccount.yaml | ||
namespace: rhods-notebooks |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
kind: RoleBinding | ||
apiVersion: rbac.authorization.k8s.io/v1 | ||
metadata: | ||
name: nb-culler | ||
subjects: | ||
- kind: ServiceAccount | ||
name: nb-culler | ||
roleRef: | ||
apiGroup: rbac.authorization.k8s.io | ||
kind: ClusterRole | ||
name: edit |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
apiVersion: v1 | ||
kind: ServiceAccount | ||
metadata: | ||
name: ope-notebook-culler |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
FROM quay.io/operate-first/opf-toolbox:v0.8.0 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this Dockerfile still needed? |
||
RUN dnf -y update | ||
RUN dnf -y install jq | ||
WORKDIR /shell-scripts | ||
COPY src/* /shell-scripts | ||
CMD ["/bin/sh"] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#!/bin/bash | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this script being used anywhere? |
||
|
||
echo "Running ope-notebook-culler.sh..." | ||
|
||
#threshold to stop running notebooks. Currently set to 24 hours | ||
cutoff_time=86400 | ||
current_time=$(date +%s) | ||
notebooks=$(oc get notebooks -n ope-rhods-testing-1fef2f -o jsonpath='{range .items[?(@.status.containerState.running)]}{.metadata.name}{" "}{.metadata.namespace}{" "}{.status.containerState.running.startedAt}{"\n"}{end}') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same. Not ope-rhods-testing-1fef2f |
||
if [ -z "$notebooks" ]; then | ||
echo "No running notebooks found" | ||
exit 0 | ||
fi | ||
|
||
# Loop through each notebook | ||
while read -r nb ns ts; do | ||
timestamp=$(date -d $ts +%s) | ||
difference=$((current_time - timestamp)) | ||
if [ $difference -gt $cutoff_time ]; then | ||
echo "$nb is more than 24 hours old, stopping the notebook" | ||
oc patch notebook $nb -n $ns --type merge -p '{"metadata":{"annotations":{"kubeflow-resource-stopped":"'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'"}}}' | ||
fi | ||
done <<< "$notebooks" | ||
|
||
echo "ope-notebook-culler.sh run complete." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now we just shutdown notebooks and pvcs