k8s Job 執(zhí)行一次性以及批處理任務(wù)使用場(chǎng)景案例
前言
Job 類型是 Kubernetes 資源對(duì)象之一,用于執(zhí)行一次性任務(wù)或批處理作業(yè)。
本文將介紹 Kubernetes 的 Job 與相關(guān)概念,幫助理解和使用 Kubernetes 中的 Job。
Job 是什么
Job 是一種 Kubernetes 資源對(duì)象,用于執(zhí)行一次性任務(wù)或批處理作業(yè)。
Job 可以控制 Pod 的數(shù)量,確保一定數(shù)量的 Pod 成功完成任務(wù)后停止并完成作業(yè)。
在 Kubernetes 中,Job 類型通常用于數(shù)據(jù)處理、備份和恢復(fù)操作等場(chǎng)景。
Job 的一些使用場(chǎng)景
- 數(shù)據(jù)導(dǎo)出和轉(zhuǎn)換:例如從數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù)到 CSV 文件、將圖片轉(zhuǎn)換為縮略圖等。
- 日志打包和壓縮:例如按時(shí)間段打包日志文件、將多個(gè)日志文件壓縮成一個(gè)文件等。
- 備份和恢復(fù)操作:例如備份數(shù)據(jù)庫(kù)、配置文件等,并將其存儲(chǔ)到云存儲(chǔ)服務(wù)中以便后續(xù)恢復(fù)。
- Batch 任務(wù):例如根據(jù)輸入?yún)?shù)計(jì)算機(jī)器學(xué)習(xí)模型的特征向量、數(shù)據(jù)預(yù)處理等。
Job 控制器
Job 控制器是 Kubernetes 中的一個(gè)組件,可以監(jiān)視 Job 對(duì)象的狀態(tài),并根據(jù)需要啟動(dòng)或停止 Pod。
Job 控制器接受用戶提交的 Job Spec,根據(jù)其定義的規(guī)則創(chuàng)建一定數(shù)量的 Pod,確保它們能夠執(zhí)行指定的任務(wù)。
當(dāng)所有 Pod 都成功完成任務(wù)后,Job 控制器會(huì)停止 Pod 并標(biāo)記 Job 為已完成。
Job Spec 格式定義
Job Spec 定義了 Job 對(duì)象的規(guī)格,包括任務(wù)名稱、鏡像、命令、參數(shù)等信息。以下是一個(gè)示例 Job Spec:
apiVersion: batch/v1 kind: Job metadata: name: example-job spec: template: spec: containers: - name: example-container image: example-image command: ["echo", "Hello, Kubernetes!"] restartPolicy: Never
在上述示例中,Job 名稱為 example-job,使用了一個(gè)名為 example-container 的容器,它運(yùn)行了一個(gè)名為 echo 的命令和參數(shù) Hello, Kubernetes!。該容器將從名為 example-image 的鏡像中獲取。
Job pod 自動(dòng)清理
在 Kubernetes 中,Job 控制器可以自動(dòng)清理已完成的 Pod。
默認(rèn)情況下,Job 控制器會(huì)在 Pod 成功完成任務(wù)并退出后自動(dòng)刪除 Pod。
如果 Pod 失敗,則控制器將根據(jù)重試限制進(jìn)行重試,并在達(dá)到最大限制后刪除 Pod。
暫停和重啟 Job
Job 對(duì)象支持暫停和繼續(xù)操作。通過(guò)修改 Job Spec 中的 .spec.suspend 字段可以實(shí)現(xiàn)暫停 Job,例如:
apiVersion: batch/v1 kind: Job metadata: name: example-job spec: suspend: true template: spec: containers: - name: example-container image: example-image command: ["echo", "Hello, Kubernetes!"] restartPolicy: Never
在上述示例中,將 .spec.suspend 設(shè)為 true 可以暫停 Job 執(zhí)行。用戶可以在需要時(shí)再次將其設(shè)置為 false,恢復(fù) Job 的執(zhí)行。
另外,用戶也可以通過(guò) kubectl 命令行工具來(lái)手動(dòng)暫停和恢復(fù) Job 的執(zhí)行。例如,要暫停一個(gè)名為 example-job 的 Job,可以運(yùn)行以下命令:
$ kubectl rollout pause job/example-job
注意:在暫停 Job 后,Job 將不會(huì)啟動(dòng)新的 Pod 或繼續(xù)未完成的任務(wù)。
案例講解
為了更好地理解 Kubernetes Job 資源對(duì)象,我們將通過(guò)一個(gè)實(shí)際案例來(lái)演示其用法。
假設(shè)有一個(gè)應(yīng)用程序需要從數(shù)據(jù)庫(kù)中導(dǎo)出一定數(shù)量的數(shù)據(jù),并將其轉(zhuǎn)換為 CSV 文件。由于該操作比較耗時(shí),因此需要使用 Job 對(duì)象來(lái)執(zhí)行此任務(wù)。
首先,我們需要定義一個(gè) Job Spec,包括容器鏡像、命令及其參數(shù)等信息。以下是一個(gè)示例 Job Spec:
apiVersion: batch/v1 kind: Job metadata: name: export-data-job spec: template: spec: containers: - name: export-data-container image: database-exporter:v1.0 command: ["./export.sh"] args: ["--count=1000", "--output=exported_data.csv"] restartPolicy: Never
在上述示例中,我們定義了一個(gè)名為 export-data-job 的 Job,使用了一個(gè)名為 export-data-container 的容器。
該容器基于鏡像 database-exporter:v1.0,并運(yùn)行了一個(gè)名為 export.sh 的腳本文件。該腳本將按照參數(shù) --count 指定的數(shù)量從數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù),并將其存儲(chǔ)為參數(shù) --output 指定的 CSV 文件。
接下來(lái),我們可以使用 kubectl apply 命令提交該 Job Spec,例如:
$ kubectl apply -f export-data-job.yaml
Kubernetes 將根據(jù)該 Spec 創(chuàng)建一個(gè) Job 對(duì)象,并啟動(dòng)一個(gè)或多個(gè) Pod 執(zhí)行任務(wù)。Job 控制器將監(jiān)視這些 Pod 的狀態(tài),并在所有 Pod 成功完成操作后停止它們。
使用 Job 的注意事項(xiàng)
在使用 Kubernetes Job 時(shí),需要注意以下幾點(diǎn):
- Job 對(duì)象適用于一次性任務(wù)或批處理作業(yè),不適用于長(zhǎng)時(shí)間運(yùn)行的服務(wù)。
- 需要確保 Job Spec 中定義的容器可以正常運(yùn)行,并有足夠的資源和權(quán)限執(zhí)行指定的操作。
- 在設(shè)計(jì) Job 時(shí),應(yīng)考慮 Pod 失敗和重試的情況,并設(shè)置合適的重試次數(shù)和間隔時(shí)間。
- 如果 Job 執(zhí)行時(shí)間過(guò)長(zhǎng),需要設(shè)置合適的 Pod 生命周期以避免過(guò)度消耗資源。
- 在使用 Job 控制器時(shí),應(yīng)確??刂破鞯陌姹竞?Kubernetes 版本兼容。在不同版本之間可能存在語(yǔ)法變更和行為差異。
總結(jié)
本文介紹了 Kubernetes 中的 Job 資源對(duì)象及其相關(guān)概念,包括 Job 類型、Job 控制器、Job Spec 格式、Job pod 自動(dòng)清理、暫停和重啟等內(nèi)容。
通過(guò)一個(gè)實(shí)際案例,我們演示了如何使用 Job 對(duì)象執(zhí)行一次性任務(wù)或批處理作業(yè)。最后,我們列舉了使用 Job 對(duì)象時(shí)需要注意的事項(xiàng)。
更多關(guān)于k8s Job 執(zhí)行一次性批處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- K8S?prometheus?operator監(jiān)控工作原理介紹
- 詳解k8s?NetworkPolicy?網(wǎng)絡(luò)策略是怎么樣的
- k8s?Service?實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡
- k8s?Ingress實(shí)現(xiàn)流量路由規(guī)則控制的定義格式類型
- kubeadm?init快速搭建k8s源碼解析
- K8S-ConfigMap實(shí)現(xiàn)應(yīng)用和配置分離詳解
- 帶你學(xué)會(huì)k8s?更高級(jí)的對(duì)象Deployment
- K8S?Operator部署及自定義詳解
相關(guān)文章
KVM虛擬化技術(shù)之virt-manager使用及KVM虛擬化平臺(tái)網(wǎng)絡(luò)模型介紹
這篇文章主要介紹了KVM虛擬化技術(shù)之virt-manager使用及KVM虛擬化平臺(tái)網(wǎng)絡(luò)模型介紹,需要的朋友可以參考下2016-10-10Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問控制
這篇文章主要為大家介紹了Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04理解k8s控制器DaemonSet創(chuàng)建及使用場(chǎng)景
這篇文章主要為大家介紹了k8s控制器DaemonSet創(chuàng)建及使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09k8s?pod和service網(wǎng)絡(luò)暴露詳解
這篇文章主要介紹了借助iptables的路由轉(zhuǎn)發(fā)功能,打通k8s集群內(nèi)的pod和service網(wǎng)絡(luò),與外部網(wǎng)絡(luò)聯(lián)通,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11k8s service使用詳解(云原生kubernetes)
這篇文章主要介紹了k8s service使用詳解(云原生kubernetes),一個(gè)Service可以看作一組提供相同服務(wù)的Pod的對(duì)外訪問接口,作用于哪些Pod是通過(guò)標(biāo)簽選擇器來(lái)定義的 ,Service是一個(gè)概念,主要作用的是節(jié)點(diǎn)上的kube-proxy服務(wù)進(jìn)程,本文結(jié)合示例代碼詳解,需要的朋友參考下2023-02-02kubernetes之statefulset搭建MySQL集群
這篇文章主要為大家介紹了kubernetes之statefulset搭建MySQL集群示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛功能
這篇文章主要介紹了玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛,本人準(zhǔn)備的服務(wù)器就是玩客云,只需運(yùn)行一些常用的?docker?容器就行,需要的朋友可以參考下2022-05-05k8s實(shí)現(xiàn)身份認(rèn)證策略及過(guò)程解析
這篇文章主要為大家介紹了k8s實(shí)現(xiàn)身份認(rèn)證策略及過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02