26

Kubernetes 附带一个ConfigMap调用coredns,可让您指定 DNS 设置。我想通过添加以下内容来修改或修补此配置的一小部分:

apiVersion: v1
kind: ConfigMap
data:
  upstreamNameservers: |
    ["1.1.1.1", "1.0.0.1"]

我知道我可以kubectrl edit用来编辑coredns ConfigMap是否有某种方法可以获取仅包含我要插入或更新的设置的上述文件,并将其合并到现有的之上或修补ConfigMap

这样做的原因是我希望我的部署可以使用 CI/CD 重复。因此,即使我在全新的 Kubernetes 集群上运行 Helm 图表,也会应用上述设置。

4

4 回答 4

35

这会将相同的补丁应用于该单个字段:

kubectl patch configmap/coredns \
  -n kube-system \
  --type merge \
  -p '{"data":{"upstreamNameservers":"[\"1.1.1.1\", \"1.0.0.1\"]"}}'
于 2019-02-08T23:41:16.007 回答
4

你应该尝试这样的事情:

kubectl get cm some-config -o yaml | run 'sed' commands to make updates | kubectl create cm some-config -o yaml --dry-run | kubectl apply -f - 
于 2019-02-07T10:51:07.577 回答
3

您可以使用 vi 编辑它,如下所示:

    kubectl edit cm -n kube-system coredns 

或者您可以导出它以应用任何更改,kubectl get cm -n kube-system -o yaml --export然后使用kubectl apply -f fileName.yaml应用您的更改

于 2019-02-07T11:19:58.743 回答
0

由于 ConfigMaps 用于将配置文件挂载到 Pod,这似乎就是您要寻找的。如果底层 ConfigMap 或 Secret 被修改,容器内的 ConfigMap 会自动更新。

您可以指定 configMap 位置:

configMapVolume(mountPath: '/etc/mount3', configMapName: 'my-config'),

更新:

好的,我想这并不能解决您的问题。我想到的另一件事是kubectl create configmap使用管道,kubectl replace 所以整个命令看起来像这样:

kubectl create configmap NAME --from-file file.name -o yaml --dry-run | kubectl replace -f -

请注意,这会替换整个文件,因此也replace应该可以工作。

于 2019-02-07T16:58:11.633 回答