news 2026/8/8 15:56:21

K8S之创建cm指令create和 apply的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
K8S之创建cm指令create和 apply的区别

这两种命令都是用来创建或更新 ConfigMap 的,但它们的工作原理、适用场景和行为模式有本质区别。简单来说,create --from-file是从现有配置文件直接生成一个 ConfigMap,而apply -f是向 Kubernetes声明并应用一个期望的资源配置状态

下面这张表清晰地展示了两者的核心差异:

特性维度kubectl create cm --from-file(命令式命令)kubectl apply -f(声明式对象配置)
核心理念“做什么”:执行一个具体的创建动作。“要什么”:声明资源的最终期望状态。
配置来源本地文件系统的配置文件(.properties,.txt,.conf等)。YAML/JSON 格式的 Kubernetes 资源定义清单。
操作性质命令式:直接下达创建指令。声明式:系统根据你的描述去确保状态一致。
幂等性非幂等:如果资源已存在,会报错AlreadyExists幂等:可以反复执行,用于创建或更新。
更新方式无法直接更新,通常需要先deletecreate,或使用replace可直接更新:修改 YAML 文件后再次apply即可。
版本控制友好度较低。命令本身不记录,需要额外保存生成命令或使用的源文件。极高。YAML 文件本身就是配置的版本记录。

📝 详细解析与使用场景

1.kubectl create configmap --from-file
这种方式适用于快速从现有的、独立的配置文件(如应用打包目录里的配置文件)生成 ConfigMap。

  • 常见用法

    bash

    # 从单个文件创建,key 默认为文件名 “app.properties” kubectl create cm cube-config --from-file=./config/app.properties # 从单个文件创建,并自定义 key 名 kubectl create cm cube-config --from-file=my-app-config=./config/app.properties # 从一个目录下的所有文件创建 kubectl create cm cube-config --from-file=./config/ # 混合创建:同时来自文件和字面值 kubectl create cm cube-config \ --from-file=./config/app.properties \ --from-literal=environment=production
  • 典型场景:在开发或 CI/CD 流水线中,你有一个现成的application.properties,想直接把它放入集群作为配置使用,这时用--from-file非常快捷。

2.kubectl apply -f
这种方式是Kubernetes 声明式管理的核心。你首先需要编写一个描述 ConfigMap 资源完整状态的 YAML 文件。

  • YAML 文件示例 (correct-cube-config.yaml):

    yaml

    apiVersion: v1 kind: ConfigMap metadata: name: cube-config namespace: default # 可指定命名空间 data: # 方式1:直接嵌入多行文本 (使用 |) app.properties: | server.port=8080 database.host=mysql logging.level=INFO # 方式2:直接定义键值对 environment: production version: "1.0" # 方式3:嵌入另一个文件的单行内容 some-key: this is a single line value
  • 典型操作流程

    bash

    # 1. 首次创建 kubectl apply -f correct-cube-config.yaml # 2. 修改 correct-cube-config.yaml 文件内容后,再次执行以更新 kubectl apply -f correct-cube-config.yaml # 3. 查看 apply 记录的历史配置 kubectl rollout history configmap/cube-config

💡 如何选择与转换

  • 选择建议

    • 对于一次性、临时的、或配置与源码分离管理的情况,create --from-file很方便。

    • 对于生产环境、需要版本控制、持续维护和团队协作的配置,apply -f配合 YAML 文件是唯一推荐的方式。

  • 两者转换:你可以很容易地将一种方式生成的 ConfigMap 转换为另一种方式所需的格式。

    bash

    # 将集群中已有的 `cube-config` 导出为声明式的 YAML 文件,这正是 `apply` 所需的。 kubectl get cm cube-config -o yaml > cube-config.yaml # 将本地配置文件转换为一个用于 `apply` 的 YAML 模板 # 这里利用 `kubectl create` 的 dry-run 和 yaml 输出功能 kubectl create cm cube-config --from-file=./config/app.properties --dry-run=client -o yaml > cube-config-template.yaml

📊 总结与最佳实践

简而言之,create是一个一次性命令,而apply是一个持续管理流程

在现代 Kubernetes 的 GitOps 实践中,几乎总是使用kubectl apply -f(或其背后的工具如kustomize,helm) 配合 YAML 文件。这种方式能将所有基础设施配置代码化,便于审查、回滚和自动化,是实现可靠运维的基石。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 15:52:58

消息队列真仙:我的道念支持最终一致性

瑶池圣地,飞升台。九天罡风如刀,撕扯着白玉砌成的古老平台。万丈雷云在头顶凝聚,电蛇狂舞,酝酿着最后一重、也是最凶险的“九霄寂灭神雷”。台下,瑶池众仙娥、各方观礼道友,皆屏息凝神,目光聚焦…

作者头像 李华
网站建设 2026/8/7 23:02:24

Spring Boot项目推送Gitee全流程(进阶)

对于国内的Java开发者而言,将Spring Boot项目托管到Gitee是一个常见且高效的选择。本文将以IntelliJ IDEA为开发环境,手把手带你完成从项目初始化到代码成功推送的全过程,并澄清关键概念、解释核心命令,助你彻底掌握。 一、核心概…

作者头像 李华
网站建设 2026/8/7 14:28:27

Java毕设项目:基于Springboot大学校园自习室教室座位预约网站设计与实现基于springboot高校自习室预约系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/8/7 22:09:40

JAVA打造同城羽馆预约,一键畅享运动

利用 JAVA 开发同城羽毛球馆预约系统,可以结合 高并发处理、实时交互、多端适配 等特性,打造一个 “一键预约、智能匹配、全流程数字化” 的运动服务平台,让用户轻松畅享羽毛球运动的乐趣。以下是具体实现方案与核心功能设计:一、…

作者头像 李华
网站建设 2026/8/7 14:58:17

经验贴 | 科学制定招聘需求与预算:HR 必看的逻辑与实操要点

招聘是企业补充人才、保障发展的核心环节,而科学制定招聘需求与预算则是招聘工作高效落地的前提。不少 HR 在实际工作中会陷入 “需求模糊导致招聘偏差”“预算失控造成资源浪费” 的困境,既影响招聘效率,也难以匹配业务发展诉求。本文结合实…

作者头像 李华
网站建设 2026/8/7 22:07:37

经验贴 | AI 面试评估系统怎么用?HR 高效识人实操指南

在企业招聘中,HR 常面临简历筛选效率低、面试评估主观化、优质人才流失快等难题。尤其是大规模校招或社招时,海量候选人让招聘团队不堪重负,传统面试评估方式难以保证公平性和准确性。AI 面试评估系统作为智能化招聘的核心工具,通…

作者头像 李华