Kubernetes控制器中DaemonSet與Job的使用教程
DaemonSet
1 什么是 DaemonSet
DaemonSet | Kubernetes
DaemonSet 確保全部(或者某些)節(jié)點(diǎn)上運(yùn)行一個 Pod 的副本。 當(dāng)有節(jié)點(diǎn)加入集群時, 也會為他們新增一個 Pod 。 當(dāng)有節(jié)點(diǎn)從集群移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創(chuàng)建的所有 Pod。
DaemonSet 的一些典型用法:
- 在每個節(jié)點(diǎn)上運(yùn)行集群守護(hù)進(jìn)程
- 在每個節(jié)點(diǎn)上運(yùn)行日志收集守護(hù)進(jìn)程
- 在每個節(jié)點(diǎn)上運(yùn)行監(jiān)控守護(hù)進(jìn)程
一種簡單的用法是為每種類型的守護(hù)進(jìn)程在所有的節(jié)點(diǎn)上都啟動一個 DaemonSet。 一個稍微復(fù)雜的用法是為同一種守護(hù)進(jìn)程部署多個 DaemonSet;每個具有不同的標(biāo)志, 并且對不同硬件類型具有不同的內(nèi)存、CPU 要求。
2 使用 DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.19
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
restartPolicy: AlwaysJob
1 什么是 Job
Job 會創(chuàng)建一個或者多個 Pod,并將繼續(xù)重試 Pod 的執(zhí)行,直到指定數(shù)量的 Pod 成功終止。 隨著 Pod 成功結(jié)束,Job 跟蹤記錄成功完成的 Pod 個數(shù)。 當(dāng)數(shù)量達(dá)到指定的成功個數(shù)閾值時,任務(wù)(即 Job)結(jié)束。 刪除 Job 的操作會清除所創(chuàng)建的全部 Pod。 掛起 Job 的操作會刪除 Job 的所有活躍 Pod,直到 Job 被再次恢復(fù)執(zhí)行。
一種簡單的使用場景下,你會創(chuàng)建一個 Job 對象以便以一種可靠的方式運(yùn)行某 Pod 直到完成。 當(dāng)?shù)谝粋€ Pod 失敗或者被刪除(比如因?yàn)楣?jié)點(diǎn)硬件失效或者重啟)時,Job 對象會啟動一個新的 Pod。
你也可以使用 Job 以并行的方式運(yùn)行多個 Pod。
2 使用 Job
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
# 當(dāng)前任務(wù)出現(xiàn)失敗 最大的重試次數(shù)
backoffLimit: 43 自動清理完成的 Job
完成的 Job 通常不需要留存在系統(tǒng)中。在系統(tǒng)中一直保留它們會給 API 服務(wù)器帶來額外的壓力。 如果 Job 由某種更高級別的控制器來管理,例如 CronJob, 則 Job 可以被 CronJob 基于特定的根據(jù)容量裁定的清理策略清理掉。
- 已完成 Job 的 TTL 機(jī)制
自動清理已完成 Job (狀態(tài)為 Complete 或 Failed )的另一種方式是使用由 TTL 控制器所提供的 TTL 機(jī)制。 通過設(shè)置 Job 的 .spec.ttlSecondsAfterFinished 字段,可以讓該控制器清理掉已結(jié)束的資源。TTL 控制器清理 Job 時,會級聯(lián)式地刪除 Job 對象。 換言之,它會刪除所有依賴的對象,包括 Pod 及 Job 本身。 注意,當(dāng) Job 被刪除時,系統(tǒng)會考慮其生命周期保障,例如其 Finalizers。
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-ttl
spec:
ttlSecondsAfterFinished: 100
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: NeverJob pi-with-ttl 在結(jié)束 100 秒之后,可以成為被自動刪除的對象。如果該字段設(shè)置為 0 ,Job 在結(jié)束之后立即成為可被自動刪除的對象。 如果該字段沒有設(shè)置,Job 不會在結(jié)束之后被 TTL 控制器自動清除。
控制器無法解決問題
- 如何為 Pod 提供網(wǎng)絡(luò)服務(wù)
- 如何實(shí)現(xiàn)多個 Pod 間負(fù)載均衡
到此這篇關(guān)于Kubernetes控制器中DaemonSet與Job的使用的文章就介紹到這了,更多相關(guān)Kubernetes控制器DaemonSet與Job使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過kubernetes部署nginx+php網(wǎng)站環(huán)境過程
本文詳細(xì)介紹了如何在Kubernetes中部署Nginx+PHP網(wǎng)站環(huán)境,包括環(huán)境準(zhǔn)備、部署步驟、Service、ConfigMap、Ingress等配置,并提供了具體的YAML文件示例和命令,通過這些步驟,可以實(shí)現(xiàn)高可用、可擴(kuò)展的Web服務(wù)2026-01-01
Kubernetes?DNS解析實(shí)戰(zhàn)過程
Kubernetes中,Pod需Ready狀態(tài)才會被CoreDNS解析,而Service創(chuàng)建時即添加記錄,當(dāng)服務(wù)依賴Pod解析時易引發(fā)啟動死循環(huán),通過設(shè)置Service的publishNotReadyAddresses為true,可解決此問題,允許未就緒Pod的IP立即被解析2025-09-09

