Skip to content

kubectl apply - 声明式配置管理工具

命令简介

kubectl apply 是 Kubernetes 命令行工具中用于声明式配置管理的核心命令。它通过比对当前集群状态与配置文件描述的目标状态,自动计算并执行必要的变更操作(创建/更新/删除)。与 kubectl create 不同,apply 采用幂等操作方式,适合持续部署和 GitOps 工作流。

语法格式

bash
kubectl apply (-f FILENAME | -k DIRECTORY) [--dry-run=server|client|none] [flags]

选项

选项描述示例
-f filename指定 YAML/JSON 配置文件路径kubectl apply -f deployment.yaml
-k directory处理 kustomization.yaml 目录kubectl apply -k ./overlays/prod
--dry-run=server模拟执行(服务端校验)kubectl apply -f pod.yaml --dry-run=server
--prune自动清理已删除的资源kubectl apply -f . --prune -l app=nginx
--overwrite强制覆盖现有配置kubectl apply -f configmap.yaml --overwrite
--record在资源注解中记录命令kubectl apply -f service.yaml --record
-R递归处理目录kubectl apply -f configs/ -R
--server-side使用服务端应用逻辑kubectl apply -f daemonset.yaml --server-side

经典案例

bash
# 部署单个资源文件
kubectl apply -f nginx-deployment.yaml

# 部署整个目录下的配置文件
kubectl apply -f k8s-resources/

# 使用 Kustomize 部署
kubectl apply -k ./base

# 试运行验证配置
kubectl apply -f statefulset.yaml --dry-run=client -o yaml

# 带标签修剪的部署(删除不再存在的资源)
kubectl apply -f . --prune -l tier=backend

注意事项

  1. 资源标识:apply 通过 metadata.name + metadata.namespace + apiVersion + kind 唯一标识资源
  2. 合并策略:默认使用 strategic merge patch,复杂字段可能需明确指定 merge key
  3. 注解变化:每次 apply 会更新 kubectl.kubernetes.io/last-applied-configuration 注解
  4. 资源版本:冲突时需使用 kubectl apply --server-side 或手动解决版本冲突
  5. 权限控制:建议配合 RBAC 使用,避免过度授权 apply 操作