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:对比配置 → 有变化就更新,没变化基本不动

相关推荐
2023自学中15 分钟前
笔记本电脑 连接 手机WIFI,开发板网线连接笔记本,开发板 和 虚拟机 同时上网
linux·单片机·嵌入式硬件·tcp/ip
funnycoffee1236 小时前
linux系统DNS修改命令
linux·运维·服务器·linux dns
小哈里7 小时前
【工具】Linux远程开发核心工具,Git命令缩写与SSH常用命令
linux·git·ssh·工具·远程开发
hhzz7 小时前
利用Terraform格式模板文件创建和部署基本网络资源
阿里云·云原生·ros·terraform·资源编排
夏乌_Wx7 小时前
深入理解x86内存寻址:从8086实模式到IA-32段页式映射&Linux内核实现
linux
czxyvX7 小时前
012-Linux简易Shell编写
linux
@hdd8 小时前
生产环境最佳实践:资源管理、高可用与安全加固
安全·云原生·kubernetes
S-码农8 小时前
Linux 进程核心知识
linux
努力努力再努力wz8 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
袁小皮皮不皮8 小时前
数据通信20-IPv6基础
运维·服务器·网络·网络协议·智能路由器