Diese Anleitung dient zunächst als private Informationssammlung zum Thema „Kubernetes Cronjob“. Die Schritte müssen noch verifiziert werden, sobald dies noch nicht geschehen ist, siehe diesen Text.
Kubernetes Cronjob
Ein CronJob in Kubernetes wird verwendet, um wiederkehrende Aufgaben zu festgelegten Zeiten auszuführen. CronJob erstellt die Pods, die die eigentliche Arbeit erledigen sollen.
Hier ist ein Cronjob-Beispiel von der offiziellen Kubenetes-Seite (Kubernetes.io):
1. Cronjob erstellen
cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/2 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hallo aus dem Kubernetes-Cluster
restartPolicy: OnFailure
schedule: "*/2 * * * *" - bedeutet, dass der Cronjob alle zwei Minuten ausgeführt wird.
Minuten (0-59 )
|
Stunden (0-23)
|
Tagen (1-31)
|
Monate (1-12)
|
Wochentage
|
*
|
*
|
*
|
*
|
*
|
2. Cronjob starten
kubectl apply -f cronjob.yaml
3. So können Sie überprüfen, ob der Cronjob ausgeführt wird:
kubectl get cronjob hello
4. Mit der unteren Befehlskette können Sie die Jobs überwachen:
kubectl get jobs -w
5. So können Sie überprüfen, ob der Cronjob ausgeführt wurde:
Pod suchen: kubectl get pods
Logs abfragen: kubectl logs hello-28316544-pgbv8
Notwendige Berechtigung
Standardmäßig haben Pods, die von CronJobs erstellt werden, keine Berechtigungen, andere Ressourcen im Cluster zu ändern. Wenn ein CronJob z.B. versucht, ein Deployment zu aktualisieren, benötigt er bestimmte Berechtigungen, andernfalls wird der CronJob fehlschlagen.
Aus diesem Grund ist es notwendig, neben der Erstellung des CronJobs auch die entsprechenden Berechtigungen (Permissions) im Cluster zu definieren und zu vergeben. Dazu werden Rollen (Roles) und Rollenbindungen (RoleBindings) erstellt, die festlegen, welche Aktionen der CronJob ausführen darf.
rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
namespace: anatoli-test
name: update-image-role
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "patch"]
rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: update-image-rolebinding
namespace: anatoli-test
subjects:
- kind: ServiceAccount
name: default
namespace: anatoli-test
roleRef:
kind: Role
name: update-image-role
apiGroup: rbac.authorization.k8s.io
Cronjobs löschen
Alle aktive Cronjobs finden:
kubectl get cronjobs --all-namespaces
oder in einem spezifischen Namespace suchen:
kubectl get cronjobs -n <namespace>
Cronjob in einem bestimmten Namespace löschen:
kubectl delete cronjob <cronjob-name> -n <namespace>
Cronjob "hello" in dem default-Namespace löschen:
kubectl delete cronjob hello -n default
Automatische Jobs-Bereinigung
Die folgenden Parameter im CronJob Manifest können die abgeschlossenen oder fehlgeschlagenen CronJobs bereinigen:
successfulJobsHistoryLimit - wie viele abgeschlossene Jobs behalten werden (z.B. 0)
failedJobsHistoryLimit - wie viele fehlgeschlagene Jobs behalten werden