Kubernetes Cronjob

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

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

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.