क्रॉनजॉब के साथ स्वचालित कार्य चलाना

यह पेज दिखाता है कि कैसे Kubernetes CronJob ऑब्जेक्ट का उपयोग करके स्वचालित कार्य चलाए जाते हैं।

शुरू करने से पहले

  • आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:

क्रॉनजॉब बनाना

क्रॉन जॉब्स को एक कॉन्फ़िग फ़ाइल की आवश्यकता होती है। यहाँ एक क्रॉनजॉब के लिए मैनिफेस्ट है जो हर मिनट एक साधारण डेमो कार्य चलाता है:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

इस कमांड का उपयोग करके उदाहरण क्रॉनजॉब चलाएं:

kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml

आउटपुट इस तरह का होगा:

cronjob.batch/hello created

क्रॉनजॉब बनाने के बाद, इस कमांड का उपयोग करके इसकी स्थिति प्राप्त करें:

kubectl get cronjob hello

आउटपुट इस तरह का होगा:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          10s

जैसा कि आप कमांड के परिणामों से देख सकते हैं, क्रॉन जॉब ने अभी तक कोई जॉब शेड्यूल या चलाया नहीं है। लगभग एक मिनट में जॉब के बनने के लिए देखें:

kubectl get jobs --watch

आउटपुट इस तरह का होगा:

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s

अब आपने "hello" क्रॉन जॉब द्वारा शेड्यूल किया गया एक चलता हुआ जॉब देखा है। आप जॉब को देखना बंद कर सकते हैं और क्रॉन जॉब को फिर से देख सकते हैं यह देखने के लिए कि इसने जॉब को शेड्यूल किया:

kubectl get cronjob hello

आउटपुट इस तरह का होगा:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        50s             75s

आपको दिखाई देगा कि क्रॉन जॉब hello ने LAST SCHEDULE में निर्दिष्ट समय पर सफलतापूर्वक एक जॉब शेड्यूल किया। वर्तमान में 0 सक्रिय जॉब हैं, जिसका अर्थ है कि जॉब पूरा हो गया है या विफल हो गया है।

अब, पिछले शेड्यूल किए गए जॉब द्वारा बनाए गए पॉड्स को ढूंढें और एक पॉड का स्टैंडर्ड आउटपुट देखें।

# "hello-4111706356" को अपने सिस्टम में जॉब नाम से बदलें
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})

पॉड लॉग दिखाएं:

kubectl logs $pods

आउटपुट इस तरह का होगा:

Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster

क्रॉनजॉब हटाना

जब आपको क्रॉन जॉब की और आवश्यकता नहीं होती है, तो इसे kubectl delete cronjob <cronjob name> के साथ हटा दें:

kubectl delete cronjob hello

क्रॉन जॉब को हटाने से इसके द्वारा बनाए गए सभी जॉब और पॉड हट जाते हैं और यह अतिरिक्त जॉब बनाना बंद कर देता है। आप गारबेज कलेक्शन में जॉब हटाने के बारे में और पढ़ सकते हैं।