用法定位
kubectl apply -f 的输入可以是单个文件、包含多个文档的单文件、一个目录,甚至标准输入或 URL。适用平台是 Kubernetes。把相关的几类对象写进一个文件(用 --- 分隔)便于成套管理,把清单按目录组织则便于整套应用;理清这几个入口的行为差异(顺序、递归、错误处理),能省掉大量重复命令,也能避免「应用了一半」的中间状态。
基本信息
| 适用平台 | Kubernetes,kubectl apply/create/delete 的 -f 参数 |
|---|---|
| 多文档分隔 | YAML 里用 --- 分隔多个对象 |
| 目录行为 | 默认只读取目录下第一层的 .yaml/.json 文件,--recursive 才递归 |
| 执行顺序 | 按文件名排序依次应用,同一文件的多个文档按书写顺序 |
典型使用场景
- 成套部署:把 Namespace、ConfigMap、Deployment、Service 写在一个文件里一起应用
- 目录化维护:按业务模块分目录,CI 里对单个目录执行 apply
- 模板生成后直接应用:用命令式 create 加 dry-run 输出 YAML,再用管道应用
- 从远端拉取清单:内部制品库或 Git 的原始文件地址直接 apply
- 灰度对比:把 base 与 patch 两个文件串起来应用,验证覆盖结果
多文档示例
多文档示例
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
LOG_LEVEL: info
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
# ... 其余字段批量应用
批量应用
kubectl apply -f ./manifests/ # 目录下第一层的清单全部应用
kubectl apply -f ./manifests/ --recursive # 连子目录一起应用
kubectl apply -f - < deploy.yaml # 从标准输入
kubectl apply -f https://example.com/app.yaml # 从 URL
kubectl create cm base --from-literal=K=V --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -f ./manifests/ --dry-run=server # 大批量改动前先服务端预检输入形式对照
| 形式 | 行为 | 注意 |
|---|---|---|
| 单文件多文档 | 按书写顺序逐个应用 | 中间一个文档语法错误会导致整批中断 |
| 目录 | 默认不递归,按文件名排序 | 依赖顺序敏感时拆批或合并文件 |
| 标准输入 | 流式读取,适合管道 | 无法重复应用,注意保留源文件 |
| URL | 拉取远端内容 | 网络受限环境容易失败,建议本地化 |
目录模式默认不递归(--recursive 可开);同一目录多个文件的应用顺序按文件名排序,注意依赖顺序时拆批或合并文件。
apply 是声明式语义:同一份清单重复执行结果一致;create 则在对象已存在时报错,批量场景应统一使用 apply。