kubectl apply与kubectl create的区别

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

很多人刚学 Kubernetes 的时候,会把 kubectl createkubectl 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:

第一次你用 createapply 都能成功。

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

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

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

相关推荐
M158227690552 小时前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器
誰能久伴不乏2 小时前
【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环
linux·c++·qt
bjxiaxueliang3 小时前
一文解决蓝牙连接难题:Ubuntu命令行蓝牙强制配对
linux·ubuntu·蓝牙连接命令
浪客灿心3 小时前
Linux库制作与原理
linux·运维·服务器
成为你的宁宁3 小时前
【Linux Swap 交换分区:定义、作用与操作指南】
linux·交换分区
Dontla3 小时前
Vite代理 vs Nginx代理(开发环境用Vite,生产环境用Nginx)
运维·nginx
运维小欣4 小时前
博睿数据:以Agentic AI驱动智能运维未来
运维·人工智能
Ha_To4 小时前
2026.1.28 docker安装
运维·docker·容器
祁鱼鱼鱼鱼鱼4 小时前
rhce-shell条件测试
linux·运维