4

假设我有一个带有 configMap(或秘密)卷的 pod。ConfigMap(或机密)对象在 Pod 创建期间存在,但我在 pod 运行时删除了主服务器上的 configMap(或机密)对象。预期的行为是什么?它在任何地方都有记录吗?

正在运行的 pod 是否已终止?configMap(或秘密)文件是否已删除并且 pod 是否继续运行?

这是我能找到的关于更新的文档,没有提到任何关于删除的内容。

当卷中已经使用的 ConfigMap 被更新时,预计的键最终也会被更新。Kubelet 会在每次定期同步时检查挂载的 ConfigMap 是否新鲜。但是,它使用本地基于 ttl 的缓存来获取 ConfigMap 的当前值。这样一来,从 ConfigMap 更新到新的 key 投射到 pod 的总延迟可以达到 kubelet 同步周期 + kubelet 中 ConfigMaps 缓存的 ttl 时间。

4

1 回答 1

6

您运行的工作负载没有任何反应。一旦它们被 master(s) 上的 kube-scheduler 调度,然后由 node(s) 上的 kubelet 调度,ConfigMapsSecrets等就会存储在节点的本地文件系统中。默认是这样的:

# ConfigMaps
/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~configmap/configmapname/
# Secret
/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~secret/secret-token/

这些实际上最终被安装在容器中的某个位置,位于您在 pod 规范中指定的路径上。

当您在 Kubernetes 中删除对象时,它实际上会从其数据存储 (etcd) 中删除。假设您的 pod 出于某种原因需要重新启动,它们将无法重新启动。

简短的回答,您运行的工作负载没有任何反应,但如果您的 pod 需要重新启动,它们将无法重新启动。

于 2019-01-04T04:23:44.470 回答