kubectl apply与kubectl create的区别

.create 是"第一次建",apply 是"按声明式配置创建/更新(可重复执行)"。当我们写 YAML 发布用 apply;临时建一个对象(比如 create configmap/secret)可以用 create。(测试)

很多人刚学 Kubernetes 的时候,会把 kubectl create 和 kubectl apply 当成"差不多的创建命令"。但真用起来你会发现,它俩的思路完全不一样:一个更像你在命令行里"下指令",另一个更像你把一份"标准答案"交给集群,让它一直照着执行。

那它们到底差在哪?

差在"你想让集群做一次动作",还是"你想让集群长期保持某个状态"。

先看 kubectl create。它的性格很直接:我现在就要创建一个资源。它只负责"第一次出生",不管"后续怎么长大"。

如果资源已经存在呢?

那它就会直接报错,最常见就是 AlreadyExists。这也决定了它更偏"命令式"------你告诉系统立刻做一件事,做过了就算完,不会帮你处理"已经有了怎么办"。

再看 kubectl apply。它更像"声明式管理":你给它一份 YAML,相当于告诉 Kubernetes------我希望资源长期保持成这个样子。

如果资源不存在会怎样?
apply 会创建。

如果资源已经存在呢?
apply 不会急着报错,而是会按 YAML 的期望状态去更新(本质是 patch)。所以它特别适合日常迭代:配置改了就更新,配置没变就保持原样,重复跑也不会出问题。

那什么时候用 create,什么时候用 apply?

如果你只是第一次快速把资源建出来,create -f xxx.yaml 很顺手。

如果你是要反复发布、反复调整配置(尤其是 CI/CD、上线迭代这种),apply -f xxx.yaml 更稳,因为它能"创建或更新",不会被"已经存在"卡住。

更新能力上,两者有什么明显差距?
create 本身不负责更新。你想改东西通常得换用 kubectl replace / kubectl patch / kubectl edit。
apply 则天生就是为"配置反复调整"准备的,很多时候我们把它当成"发布按钮",因为它可以反复执行,结果依然可控(幂等)。

例子:

比如你发一个 Deployment:

第一次你用 create 或 apply 都能成功。

第二次你再拿同一个文件跑:

  • create:资源已存在 → 直接报错

  • apply:对比配置 → 有变化就更新,没变化基本不动

相关推荐
Mr_韩1 小时前
子网路由实战:无需公网 IP,异地直接访问家庭内网全部设备
运维·网络·物联网·nas
星恒随风1 小时前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
yunwei371 小时前
eBPF 入门开发实践教程一:Hello World,基本框架和开发流程
linux·后端·性能优化
小雪崩1 小时前
嵌入式学习 day65:Linux驱动进阶——pinctrl 子系统和 platform 驱动框架
linux·学习·驱动
亚川楼宇自控系统数据中心厂家1 小时前
隧道智能照明:如何实现按需调光、节能又安全
运维
yichengerp2 小时前
国内中小电子工厂用哪个erp系统好?
大数据·运维·人工智能·云计算·制造
wixzjsh2 小时前
嵌入式Linux系统启动与内核驱动开发全解
linux·运维·驱动开发
字节跳动的猫2 小时前
LikeShop 商品评价体系二开:追评、晒图审核与评价标签筛选功能开发
运维·数据结构·数据库
晴天的雨.9922 小时前
【Linux】基础开发工具---软件包管理器
linux·运维·服务器
mi20062 小时前
不合规MAC地址导致通信故障
运维