DaemonSet 与 Job/CronJob
约 651 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › K8s › 工作负载(在新窗口打开) › DaemonSet 与 Job/CronJob
DaemonSet
DaemonSet 确保每个节点(或指定节点)上运行一个 Pod。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
tolerations: # 允许运行在 Master 节点
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd
image: fluent/fluentd:v1.16
volumeMounts:
- name: varlog
mountPath: /var/log
- name: dockerlogs
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: dockerlogs
hostPath:
path: /var/lib/docker/containers# 查看 DaemonSet
kubectl get daemonset -n kube-system
# 查看 DaemonSet 管理的 Pod(每个节点一个)
kubectl get pods -n kube-system -o wide | grep fluentd
# DaemonSet 也支持滚动更新
kubectl rollout status daemonset/fluentd -n kube-systemDaemonSet 典型场景
| 场景 | 示例 |
|---|---|
| 日志采集 | Fluentd、Filebeat、Logstash |
| 节点监控 | Prometheus Node Exporter、Datadog Agent |
| 网络代理 | Calico、Flannel(CNI 插件)、kube-proxy |
| 安全 Agent | 入侵检测、漏洞扫描 |
Job
Job 管理一次性任务,确保指定数量的 Pod 成功执行完毕。
apiVersion: batch/v1
kind: Job
metadata:
name: pi-job
spec:
template:
spec:
containers:
- name: pi
image: perl:latest
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4 # 失败重试次数# 创建 Job
kubectl apply -f job.yaml
# 查看 Job
kubectl get jobs
# 查看 Pod
kubectl get pods
# 查看任务输出
kubectl logs pi-job-xxxxx
# 删除 Job(也会删除其 Pod)
kubectl delete job pi-jobJob 参数
spec:
completions: 6 # 需要成功执行的总次数
parallelism: 2 # 并行执行的 Pod 数
activeDeadlineSeconds: 100 # 作业超时时间
backoffLimit: 4 # 失败重试次数
ttlSecondsAfterFinished: 3600 # 完成后的保留时间CronJob
CronJob 按定时计划创建 Job。
apiVersion: batch/v1
kind: CronJob
metadata:
name: db-backup
spec:
schedule: "0 2 * * *" # 每天凌晨 2 点
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: mysql:8.4
command:
- sh
- -c
- "mysqldump -h mysql -u root -p$MYSQL_ROOT_PASSWORD mydb > /backup/db-$(date +%Y%m%d).sql"
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
volumeMounts:
- name: backup
mountPath: /backup
restartPolicy: OnFailure
volumes:
- name: backup
persistentVolumeClaim:
claimName: backup-pvc
successfulJobsHistoryLimit: 3 # 保留成功记录数
failedJobsHistoryLimit: 1 # 保留失败记录数# 创建 CronJob
kubectl apply -f cronjob.yaml
# 查看
kubectl get cronjobs
kubectl get jobs
# 手动触发
kubectl create job --from=cronjob/db-backup manual-backup
# 暂停
kubectl patch cronjob db-backup -p '{"spec":{"suspend":true}}'Cron 语法
* * * * *
┬ ┬ ┬ ┬ ┬
│ │ │ │ └── 星期(0-7, 0/7=周日)
│ │ │ └──── 月(1-12)
│ │ └────── 日(1-31)
│ └──────── 时(0-23)
└────────── 分(0-59)小结
| 资源 | 用途 | Pod 数量 | 运行模式 |
|---|---|---|---|
| DaemonSet | 每个节点一个 Pod | 节点数 | 长期运行 |
| Job | 一次性任务 | 固定数 | 执行完退出 |
| CronJob | 定时任务 | 按计划 | 定时创建 Job |
- DaemonSet 适合日志/监控/网络 Agent,每个节点一份。
- Job 确保 Pod 成功执行指定次数,支持并行和重试。
- CronJob 基于 Cron 表达式定时创建 Job,适合定期备份/清理/报表。
上一节:StatefulSet 下一节:Service 基础
