kubectl create和kubectl apply都可以生成k8s对象。那么两者有什么区别呢。根据官方文档可以得出如下区别:
kubectl create:
- 是祈使式命令,明确告诉k8s要创建的资源或者对象
- 首先删除集群中现有的资源,然后重新根据yaml文件生成新的资源对象
- yaml文件必须是完整的配置
- yaml文件中的所有字段都会被create
- 在没有改动yaml文件时,使用同一个yaml文件执行命令kubectl replace,将不会成功(fail掉),因为缺少相关改动信息。
kubectl apply
- 是声明式命令,apply不告诉k8s具体要干什么,而是kubectl根据yaml文件自动探测要做哪些操作,如果不存在则create,如果存在则对比差异,进行更新。
- 根据yaml文件中包含的字段,直接升级集群中的现有资源对象
- yaml文件可以不完整,只写需要修改的字段
- 只有要改动的字段才会被apply
- 在只改动了yaml文件中的某些声明时,而不是全部改动,你可以使用kubectl apply
create创建已存在资源会报错:Error from server (AlreadyExists)。
apply未修改的资源时会提示unchanged。