【问题标题】:How to merge/update kubernetes configMaps with added or removed data?如何使用添加或删除的数据合并/更新 kubernetes configMaps?
【发布时间】:2021-04-06 22:42:25
【问题描述】:

我有一个包含 JSON 数据的现有 configMap。数据可以是 JSON 格式允许的任何内容 - 数组、对象、字符串、整数等。 例如:

{
   "channels": ["10", "20", "30"],
   "settings": "off",
   "expiry": 100,
   "metadata": {
      "name": "test",
      "action": "update"
   } 
}

现在我想用更新的数据更新 configMap。 问题是我不想更新任何值,而只是添加或删除新数据中已添加或删除的任何字段。 这样做的原因是这些值是默认值,并且可能已经在 configMap 中由其他 pod/服务更新。 因此,例如,如果新数据包含以下 JSON 数据(已删除过期字段并更改了某些值):

{
   "channels": ["10", "20", "30", "100", "10000"],
   "settings": "on",
   "metadata": {
      "name": "test",
      "action": "delete"
   } 
}

然后我希望 configMap 更新为如下所示:

{
   "channels": ["10", "20", "30"],
   "settings": "off",
   "metadata": {
      "name": "test",
      "action": "update"
   } 
}

因此值保持原样,但删除了“到期”字段。

我正在使用 ansible 来部署 kubernetes 资源,但我对其他可以帮助我实现所需的工具/脚本持开放态度。

提前致谢

【问题讨论】:

    标签: json kubernetes ansible configmap


    【解决方案1】:

    Kubernetes 不支持此功能。正如你所说,数据是 JSON 编码的,它是一个字符串。 ConfigMap(和 Secrets)只理解字符串,不理解任何类型的嵌套数据。这就是为什么您必须在存储之前对其进行编码。您需要获取数据、对其进行解码、进行更改,然后在 API 中进行编码和更新/修补。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2022-07-21
      • 2018-02-16
      • 2020-03-09
      • 2013-04-06
      相关资源
      最近更新 更多