1

问题是我想持久化某个服务的一个状态文件(服务生成的状态),而不是目录,以防服务重启时状态丢失,如何解决?

4

2 回答 2

1

如果它只是一个状态文件,您应该能够将其写入配置映射。请参阅将 ConfigMap 数据添加到卷。如果你有卷

volumes:
  - name: status
    configMap:
      name: status
      defaultMode: 420
      optional: true

在volumeMounts中

volumeMounts:
  - name: status
    mountPath: /var/service/status

那么你应该可以在里面写了。另请参阅 kube-dns 如何使用来自config-map的kube-dns-config挂载。kube-dns

于 2018-08-07T08:12:32.973 回答
0

您可以在 pod 规范中包含一个emptyDir 卷。这将创建一个与 pod 一样长的空目录,即使它已重新启动或迁移。

如果您的 pod 属于要更新的​​部署,这不一定能很好地发挥作用,因为部署的核心操作是创建新的 pod 并删除旧的 pod。在这种情况下,您需要一个持久的卷声明。这更复杂:它涉及拥有另一个 Kubernetes 对象,这意味着有一个地方来存储实际的卷。(例如,如果您在 AWS 上运行,则持久卷可能会由 EBS 卷支持。)对于简单的状态来说,这可能有点矫枉过正。

另一种选择是设置某种小型数据库(Redis很流行)并将状态存储在那里。现在您没有将状态存储在容器的文件系统中,并且您实际上并不关心 pod 是退出还是被删除。

还要考虑如果同时运行多个 pod 副本会发生什么。如果不出意外,由于部署的默认行为是创建新 pod,等待其运行状况检查通过,然后删除旧 pod,因此您通常可以使用同一个 pod 的两个并发副本结束。单个共享状态可能没有您想要的行为。

于 2018-08-07T13:58:15.400 回答