自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

云原生之 K8S 系列:如何創(chuàng)建 Kubernetes job 和 Cronjobs 入門指南

云計(jì)算 云原生
解釋了如何創(chuàng)建kubernetes作業(yè)和cronjobs,以及它的基礎(chǔ)知識、用例和一些提示和技巧。

本kubernetes教程解釋了如何創(chuàng)建kubernetes作業(yè)和cronjobs,以及它的基礎(chǔ)知識、用例和一些提示和技巧。

什么是Kubernetes Job?

Kubernetes job和cronjob是Kubernetes對象,主要用于短期和批處理工作負(fù)載。

kubernetes作業(yè)對象基本上部署了一個pod,但它是為了完成而運(yùn)行的,而不是像deployment、replicasets、復(fù)制控制器和DaemonSets這樣的對象,它們是持續(xù)運(yùn)行的。

這意味著,作業(yè)將一直運(yùn)行,直到作業(yè)中指定的任務(wù)完成,如果pods給出退出代碼0,則作業(yè)將退出。該任務(wù)可以是shell腳本執(zhí)行、API調(diào)用或執(zhí)行數(shù)據(jù)轉(zhuǎn)換并將其上傳到云存儲的java python執(zhí)行。

然而,在正常的Kubernetes部署中,無論退出代碼如何,部署對象都會在終止或拋出錯誤時創(chuàng)建新的pod,以保持部署所需的狀態(tài)。

在作業(yè)運(yùn)行期間,如果承載pod的節(jié)點(diǎn)失敗,作業(yè)pod將自動重新調(diào)度到另一個節(jié)點(diǎn)。

Kubernetes Jobs和CronJobs用例

Kubernetes作業(yè)的最佳用例是:

  • 批處理:假設(shè)您希望每天運(yùn)行一次批處理任務(wù),或者在特定的計(jì)劃中運(yùn)行一次。它可以是從存儲或數(shù)據(jù)庫中讀取文件,并將其提供給服務(wù)以處理文件。
  • 操作/特別任務(wù):假設(shè)您想要運(yùn)行運(yùn)行數(shù)據(jù)庫清理活動的腳本/代碼,或者甚至備份kubernetes集群本身。

在我參與的一個項(xiàng)目中,我們將Kubernetes作業(yè)廣泛用于ETL工作負(fù)載。

如何創(chuàng)建Kubernetes作業(yè)

在這個例子中,我將使用一個Ubuntu容器,它運(yùn)行一個shell腳本,該腳本有一個for循環(huán),根據(jù)您傳遞給容器的參數(shù)回顯消息。參數(shù)應(yīng)該是一個數(shù)字,決定循環(huán)運(yùn)行的次數(shù)以回顯消息。

例如,如果傳遞100作為參數(shù),shell腳本將回顯消息100次,容器將退出。

你可以在這里查看Dockerfile和shell腳本-> kube-job-example Docker configs[1]

讓我們從一個簡單設(shè)置的作業(yè)開始。

步驟1:創(chuàng)建一個任務(wù)。使用我們自定義的Docker映像,以100作為命令參數(shù)。值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

步驟2:讓我們使用kubectl創(chuàng)建一個Job.yaml文件。Job部署在默認(rèn)名稱空間中。

kubectl apply -f job.yaml

步驟3:使用kubectl獲取Job的狀態(tài)。

kubectl get jobs

步驟4:現(xiàn)在,使用kubectl獲取pod列表。

kubectl get po

步驟5:您可以使用kubectl獲取Job pod日志。將pod名稱替換為您在輸出中看到的pod名稱。

kubectl logs kubernetes-job-example-bc7s9 -f

您應(yīng)該看到如下所示的輸出。

多個Job Pod和并行性

在部署作業(yè)時,您可以讓它在多個具有并行性的pod上運(yùn)行。

例如,在一個Job中,如果您希望并行運(yùn)行6個pod和2個pod,則需要將以下兩個參數(shù)添加到Job清單中。

completions: 6
parallelism: 2
  • completions: 6  指定 job 需要成功運(yùn)行 Pods 的次數(shù)為 6
  • parallelism: 3  指定 job 并發(fā)運(yùn)行 Pods 的數(shù)量為 3

下面是帶有這些參數(shù)的清單文件。

apiVersion: batch/v1
kind: Job
metadata:
  name: kubernetes-parallel-job
  labels:
    jobgroup: jobexample
spec:
  completions: 6
  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

并行pod處理的一個用例是消息隊(duì)列上的批處理操作。假設(shè)您有一個消息隊(duì)列,其中在每天的特定時間要處理數(shù)千條消息。

您可以將消息處理代碼作為具有并行性的Job運(yùn)行,以加快處理速度。盡管所有pod使用相同的消息處理代碼,但每個pod將處理來自隊(duì)列的不同消息。

生成Kubernetes Job的隨機(jī)名稱

你不能使用單一的Job清單文件創(chuàng)建多個Job。Kubernetes 會拋出一個錯誤,指出已經(jīng)存在同名的 Job。

為了解決這個問題,你可以在元數(shù)據(jù)中添加 generateName參數(shù)。例如:

apiVersion: batch/v1
kind: Job
metadata:
  generateName: kube-job-
  labels:
    jobgroup: jobexample

在上述示例中,每次運(yùn)行該清單時,都會創(chuàng)建一個名稱以 kube-job- 為前綴,后跟隨機(jī)字符串的 Job。

如何創(chuàng)建 Kubernetes CronJob

如果你想在特定時間表上運(yùn)行批處理任務(wù),例如每兩小時一次,你可以使用cron表達(dá)式創(chuàng)建一個Kubernetes CronJob。該任務(wù)將按照你在Job中指定的時間表自動啟動。

以下是如何指定cron時間表。你可以使用crontab生成器來生成你自己的時間表。

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

下圖顯示了 Kubernetes CronJob 的調(diào)度語法。

如果我們要將之前的Job作為CronJob每15分鐘運(yùn)行一次,可以使用以下清單。創(chuàng)建一個名為cron-job.yaml的文件,并復(fù)制以下清單內(nèi)容。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
    name: kubernetes-cron-job
spec:
  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

列出cronjob:

kubectl get cronjobs

要檢查Cronjob日志,您可以列出Cronjob pod,并從處于運(yùn)行狀態(tài)的pod或已完成的pod中獲取日志。

手動運(yùn)行Kubernetes CronJob

在某些情況下,您可能希望以臨時方式執(zhí)行cronjob。您可以通過從現(xiàn)有的cronjob創(chuàng)建一個作業(yè)來實(shí)現(xiàn)這一點(diǎ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的作業(yè)。

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

還有一些關(guān)鍵參數(shù)可以根據(jù)需要用于kubernetes Job/cronjobs。讓我們各看一看:

  • failedJobHistoryLimit和successfulJobsHistoryLimit:根據(jù)您提供的保留數(shù)刪除失敗和成功的作業(yè)歷史記錄。當(dāng)您嘗試列出作業(yè)時,這對于減少所有失敗的條目非常有用。例如:failedJobHistoryLimit: 5 successfulJobsHistoryLimit: 10
  • backoffLimit:如果您的pod失敗,重試的總次數(shù)。
  • activedeadlinesseconds:如果您想要指定cronjob運(yùn)行時間的硬限制,可以使用此參數(shù)。例如,如果您只想運(yùn)行cronjob一分鐘,則可以將其設(shè)置為60。

總結(jié)

Kubernetes Job和CronJob是處理批處理任務(wù)和周期性任務(wù)的強(qiáng)大工具。通過定義相應(yīng)的YAML文件,并使用kubectl命令創(chuàng)建和管理這些任務(wù),可以輕松實(shí)現(xiàn)復(fù)雜的任務(wù)調(diào)度和執(zhí)行。希望這篇指南能幫助你快速上手Kubernetes Job和CronJob,提升你的容器編排能力。

Reference:

[1]kube-job-example Docker configs: https://github.com/devopscube/Kubernetes-jobs-example/tree/master/Docker

責(zé)任編輯:趙寧寧 來源: 攻城獅成長日記
相關(guān)推薦

2024-06-12 13:21:06

2024-06-06 09:19:09

2024-06-18 13:22:42

Nginx云原生Kubernetes

2024-09-26 09:50:07

2022-04-07 10:17:18

云原生服務(wù)器優(yōu)化

2023-03-07 07:56:37

Sqoopk8s底層

2025-01-03 08:08:56

2022-09-05 08:26:29

Kubernetes標(biāo)簽

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2022-07-18 18:48:32

Kubernetes云原生

2023-03-06 07:19:50

2021-04-25 10:26:58

云計(jì)算云原生

2024-06-26 00:22:35

2020-05-12 10:20:39

K8s kubernetes中間件

2020-12-22 07:42:05

云原生開源項(xiàng)目k8s

2023-09-06 08:12:04

k8s云原生

2022-11-08 08:55:31

2022-10-14 07:42:50

LuceneHTTPWeb

2023-03-03 07:54:21

2019-08-14 23:52:51

Kubernetes網(wǎng)關(guān)API
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號