一、Job 核心要点
-
用途:确保指定数量的 Pod 成功终止(完成),适用于一次性任务(如计算、批处理)。
-
失败重试 :Pod 失败时会自动重试,直到达到
backoffLimit或成功次数要求。 -
关键参数:
-
completions:需要成功完成的 Pod 数量。 -
parallelism:并发运行的 Pod 数量。 -
backoffLimit:最大失败重试次数(默认6次)。 -
activeDeadlineSeconds:Job 最长运行时间,超时则终止。 -
ttlSecondsAfterFinished:Job 完成后自动清理的等待时间。
-
-
重启策略:
-
Never:Pod 失败后,Job 控制器会启动新 Pod。 -
OnFailure:Pod 留在原节点,仅重启容器。
-
-
删除行为:删除 Job 会清除其创建的所有 Pod。
二、CronJob 核心要点
-
用途:基于时间表(Cron 表达式)周期性地创建 Job,适用于定时任务(如备份、报告)。
-
关键参数:
-
schedule:Cron 格式调度时间,如"* * * * *"表示每分钟。 -
jobTemplate:定义每次触发时要创建的 Job 模板。 -
successfulJobsHistoryLimit:保留已完成 Job 的历史数量(默认3)。
-
-
重启策略 :通常设为
OnFailure,避免重复创建 Pod。 -
注意:CronJob 本身不执行任务,只负责按计划创建 Job。
三、实践验证
-
Job 生命周期 :
Pending → ContainerCreating → Running → Completed,完成后 Pod 保留一段时间(由ttlSecondsAfterFinished控制)后自动清理。 -
CronJob 运行 :每分钟创建一个 Job,Job 再创建 Pod 执行命令(如输出时间+Hello信息),Pod 状态变为
Completed,历史 Job 保留限定数量。
四、配置模板重点
-
镜像拉取策略 :
imagePullPolicy: IfNotPresent(优先使用本地镜像)。 -
私有仓库 :可通过
imagePullSecrets配置拉取密钥。 -
命名空间 :建议显式指定
namespace,避免默认冲突。
一、NetworkPolicy 是啥?
简单说,它就是 Kubernetes 里的"防火墙规则" 。你可以用它来控制哪些 Pod 可以跟哪些 Pod 说话,或者禁止某些通信。
比如:你不想让"前端"Pod 直接访问"数据库"Pod,只让"后端"Pod 去访问,就可以用它来限制。
二、它是怎么工作的?
-
先给 Pod 打上标签(比如
app: backend)。 -
然后写一个规则:入站(Ingress) 允许谁进来,出站(Egress) 允许出去找谁。
-
规则里可以指定:允许的 IP 段、端口、协议(TCP/UDP),或者只允许某个命名空间里的 Pod。
三、几个常见例子(大白话版)
1. 只允许同一个项目(命名空间)内的 Pod 互聊
- 比如你有个
myappPod,只允许同命名空间下打了project: myproject标签的 Pod 访问它,其他命名空间的不行。
2. 禁止 Pod 访问外部网络
- 比如某个敏感 Pod 只能跟集群内的其他 Pod 通信,不能上网,也不能访问外部服务。
3. 只允许访问特定端口
- 比如前端 Pod 只接受 80 端口的 TCP 流量和 53 端口的 UDP 流量,其他端口一律拒绝。
4. 限制只有本命名空间的 Pod 才能访问
- 比如你有个 Pod 叫
alpine,只允许同一个命名空间内的 Pod 访问它,其他命名空间的 Pod 没门。
5. 既能访问同命名空间的 Pod,又能上网,但不能访问其他命名空间
-
比如
alpinePod:-
可以跟同命名空间的 Pod 聊天 ✅
-
可以上百度、谷歌 ✅
-
不能访问别的命名空间的 Pod ❌
-
注意:要上网得先放行 DNS(53 端口),并且要排除集群内部的 IP 段,不然会误拦。
-
四、高级玩法(了解一下就行)
-
策略继承:可以定义父策略、子策略,子策略会继承父策略的规则。
-
更灵活的标签匹配:不只是"等于",还可以用"属于某几个值之一"这类条件来选 Pod。
一句话总结:NetworkPolicy 就是 Kubernetes 里控制 Pod 之间、Pod 和外部之间能不能通信的一套规则,帮你把网络权限管得死死的,提升安全性。