0
点赞
收藏
分享

微信扫一扫

kubectl create configmap` 指令的核心区别在于 **如何定义 ConfigMap 中的键(Key)

这两段 kubectl create configmap 指令的核心区别在于 如何定义 ConfigMap 中的键(Key)。以下是详细对比:

第一段指令

kubectl create configmap game-config-3 \
  --from-file=game3=configure-pod-container/configmap/game.properties

行为解析:

  • game3=... 表示 显式指定键名game3
  • 文件 configure-pod-container/configmap/game.properties 的内容会成为键 game3 的值。
  • 最终效果
    ConfigMap game-config-3 中包含一个键值对:
    game3: <文件内容>

第二段指令

kubectl create configmap game-config-3 \
  --from-file=configure-pod-container/configmap/game.properties

行为解析:

  • 未显式指定键名,Kubectl 会 自动使用文件名作为键名
  • 由于文件名为 game.properties,因此键名默认为 game.properties
  • 最终效果
    ConfigMap game-config-3 中包含一个键值对:
    game.properties: <文件内容>

📌 关键区别总结

特性 第一段指令 第二段指令
键名来源 显式指定为 game3 自动使用文件名 game.properties
生成的键名 game3 game.properties
适用场景 需要自定义简洁的键名(如环境变量) 快速创建且保留原始文件名结构
后续引用方式 $(GAME3){{ .Values.game3 }} $(GAME_PROPERTIES){{ .Values.game.properties }}

💡 典型应用场景

  1. 使用第一段指令的场景

    • 希望键名更简洁(如 game3),便于在 Deployment/StatefulSet 中通过环境变量或命令行参数引用。
    • 避免长文件名(如 game.properties)带来的冗余。
    • 示例:容器内可通过 ${GAME3} 直接读取配置。
  2. 使用第二段指令的场景

    • 快速创建 ConfigMap,无需关心键名设计。
    • 保留文件名语义化信息(如 application.yml, database.cnf)。
    • 适合一次性导入多个配置文件的场景(配合通配符 *)。

⚠️ 注意事项

  • 如果多次执行相同命令且不添加 --dry-run=client--save-config,后者会覆盖前者。
  • 若需同时添加多个文件,可重复 --from-file 参数或使用通配符(如 --from-file=config/*.properties)。

🔍 验证差异的方法

执行以下命令查看生成的 ConfigMap 内容:

# 查看第一段指令创建的 ConfigMap
kubectl get configmap game-config-3 -o jsonpath='{.data}'
# 输出应包含 "game3": "..."

# 查看第二段指令创建的 ConfigMap
kubectl get configmap game-config-3 -o jsonpath='{.data}'
# 输出应包含 "game.properties": "..."
举报

相关推荐

0 条评论