溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

K8S Job的創(chuàng)建步驟

發(fā)布時間:2021-06-18 16:57:36 來源:億速云 閱讀:215 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“K8S Job的創(chuàng)建步驟”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Kubernetes jobs主要是針對短時和批量的工作負(fù)載。它是為了結(jié)束而運行的,而不是像deployment、replicasets、replication controllers和DaemonSets等其他對象那樣持續(xù)運行。

本文將介紹如何創(chuàng)建Kubernetes jobs和cronjobs,以及一些小技巧。

Kubernetes Jobs會一直運行到Job中指定的任務(wù)完成。也就是說,如果pods給出退出代碼0,那么Job就會退出。而在正常的Kubernetes中,無論退出代碼是什么,deployment對象在終止或出現(xiàn)錯誤時都會創(chuàng)建新的pod,以保持deployment的理想狀態(tài)。

在job運行過程中,如果托管pod的節(jié)點發(fā)生故障,Job pod將被自動重新安排到另一個節(jié)點。

???????Kubernetes Jobs用例

對于Kubernetes Jobs最好的用例實踐是:

  1. 批處理任務(wù):比如說你想每天運行一次批處理任務(wù),或者在指定日程中運行。它可能是像從存儲庫或數(shù)據(jù)庫中讀取文件那樣,將它們分配給一個服務(wù)來處理文件。

  2. 運維/ad-hoc任務(wù):比如你想要運行一個腳本/代碼,該腳本/代碼會運行一個數(shù)據(jù)庫清理活動,甚至備份一個Kubernetes集群。

如何創(chuàng)建Kubernetes Job?

在本例中,我們將使用Ubuntu 容器來運行一個帶有for循環(huán)的shell腳本,并根據(jù)你傳遞給容器的參數(shù)來呼應(yīng)消息。這個參數(shù)是一個數(shù)字,決定shell腳本循環(huán)應(yīng)該運行多少次。

例如,如果你傳遞了參數(shù)100,那么shell腳本將呼應(yīng)消息100次然后容器將會退出。

我們先從一個簡單設(shè)置的job開始。

Step1:使用自定義的Docker鏡像創(chuàng)建一個job.yaml文件,命令參數(shù)為100。100將會作為參數(shù)傳遞給docker ENTRYPOINT腳本。

apiVersion: batch/v1 
kind: Job 
metadata:     name: kubernetes-job-example   
  labels:         jobgroup: jobexample 
spec:     template:         metadata:             name: kubejob       
      labels:                 jobgroup: jobexample     
    spec:             containers:       
      - name: c         
        image: devopscube/kubernetes-job-demo:latest         
        args: ["100"]       
      restartPolicy: OnFailure

Step2 :使用kubectl創(chuàng)建一個job.yaml文件的job

kubectl apply -f job.yam

Step3:使用kubectl檢查job的狀態(tài)

kubectl get jobs

Step4:使用kubectl獲取pod列表

kubectl get po

Step5:使用kubectl獲取job pod 日志。使用你在輸出中看到的Pod名稱替換原本的Pod名稱。

kubectl logs kubernetes-job-example-bc7s9 -f

你應(yīng)該看到如下輸出:

K8S Job的創(chuàng)建步驟

并行運行多Job pods

當(dāng)一個job被部署后,你可以讓它在多個Pod上并行運行。例如,在一個job中如果你想要運行6個 pods,同時并行運行2個pods,你需要添加以下2個參數(shù)到你的job manifets中:

completions: 6parallelism: 2

以下是帶有那些參數(shù)的manifest:

apiVersion: batch/v1kind: Jobmetadata:  name: kubernetes-parallel-job  labels:    jobgroup: jobexamplespec:  completions: 5  parallelism: 2  template:    metadata:      name: kubernetes-parallel-job      labels:        jobgroup: jobexample    spec:      containers:  - name: c        image: devopscube/kubernetes-job-demo:latest        args: ["100"]      restartPolicy: OnFailure

為Kubernetes Job生成隨機名稱

你不能從一個job manifest文件中創(chuàng)建多個job,因為Kubernetes會報錯,說存在一個同名的job。為了規(guī)避這個問題,你可以在元數(shù)據(jù)中添加 generateName 名稱參數(shù)。

例如:

apiVersion: batch/v1kind: Jobmetadata:  generateName: kube-job-  labels:    jobgroup: jobexample

在上方示例中,每次你運行該manifest,job將以kube-job-作為前綴,后面跟著一個隨機字符串來創(chuàng)建。

如何創(chuàng)建Kubernetes CronJob

如果你想按照特定的時間表運行批處理job,例如,每2個小時運行一次。你可以用cron表達式創(chuàng)建一個Kubernetes cronjob。Job會按照你在job中提到的時間表自動啟動。

下面我們將介紹如何指定一個cron計劃,你可以使用crontab生成器(https://crontab-generator.org/)來生成自己的時間計劃。

schedule: "0,15,30,45 * * * *"

下圖顯示了Kubernetes cronjob schedule語法。

K8S Job的創(chuàng)建步驟

如果我們以cronjob的形式每15分鐘運行一次我們之前的job,manifest應(yīng)該如下所示。創(chuàng)建一個名為cron-job.yaml的文件,并復(fù)制以下manifest:

apiVersion: batch/v1beta1kind: CronJobmetadata:    name: kubernetes-cron-jobspec:  schedule: "0,15,30,45 * * * *"  jobTemplate:    spec:      template:        metadata:          labels:            app: cron-batch-job        spec:          restartPolicy: OnFailure          containers:  - name: kube-cron-job            image: devopscube/kubernetes-job-demo:latest            args: ["100"]

讓我們使用kubectl部署cronjob。

kubectl create -f cron-job.yaml

列出cronjobs:

kubectl get cronjobs

你可以列出cronjob pod并從處于運行狀態(tài)或完成狀態(tài)的pods中獲取日志來檢查Cronjob日志。

手動運行Kubernetes CronJob

在某些情況下,你可能希望以臨時的方式執(zhí)行cronjob。你可以通過從現(xiàn)有的cronjob創(chuàng)建一個job來實現(xiàn)。

例如,如果你想手動觸發(fā)一個cronjob,我們應(yīng)該這樣做:

kubectl create job --from=cronjob/kubernetes-cron-job manual-cron-job

--from=cronjob/kubernetes-cron-job將復(fù)制cronjob模板并創(chuàng)建一個名為manual-cron-job的job。

Kubernetes Job的關(guān)鍵參數(shù)

根據(jù)你的需求,你還可以使用kubernetes jobs/cronjobs的幾個關(guān)鍵參數(shù):

  1. failedJobHistoryLimit & successfulJobsHistoryLimit:根據(jù)你提供的保留數(shù)量刪除失敗和成功的job歷史記錄。當(dāng)你嘗試列出job時,這對于減少所有失敗的條目非常有用。例如:

  2. backoffLimit:如果你的Pod失敗,重試的總次數(shù)。

  3. activeDeadlineSeconds:如果你想對cronjob的運行時間進行硬性限制,可以使用此參數(shù)。例如,如果你想只運行1分鐘的cronjob,你可以將其設(shè)置為60。

“K8S Job的創(chuàng)建步驟”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

k8s
AI