1

我正在使用 winston js 进行节点 js 应用程序日志记录。我正在 GKE 上部署我的 dockerized 应用程序,并希望将我的文件存储在容器之外。我应该在哪里存储这些文件以及应该安装什么路径。

我对 kubernetes 卷很陌生,找不到合适的教程。

4

1 回答 1

0

有多个选项要做或遵循,现在首先为什么要将日志存储在文件中?

您可以将日志推送到 GCP 的堆栈驱动程序服务,您的日志将存储在那里,在这种情况下,无需使用任何卷或额外的配置。

堆栈驱动程序日志记录是托管服务,您可以搜索日志并从所有容器推送日志。这样,您的服务将是无状态的,您无需为部署配置卷。由于容器或 POD 在集群内运行是无状态的,因此您也可以轻松扩展应用程序。

不过,如果您打算使用该卷,则有很多选项,如下所述:

使用节点体积

在此容器中,将在其运行的 Node 卷内创建日志文件。

示例:https ://kubernetes.io/docs/concepts/storage/volumes/#hostpath

缺点

  • 一旦节点在维护期间自动扩展或从 GKE 集群中删除,日志就会被删除。
  • 容器可以随时调度到任何节点,否则日志序列可能会产生问题。

使用 PVC 磁盘:

  • 如果您将使用磁盘将日志存储很长时间(例如 30-40 天),它将起作用。

  • 您在 K8s 中创建 POD 将使用的卷,POD 可以使用此卷来创建文件和存储,除非您这样做,否则它不会从该磁盘中删除。

示例:https ://cloud.google.com/kubernetes-engine/docs/concepts/persistent-volumes

缺点

  • 如果您使用的是ReadWriteOnce访问模式,则只有一个 POD(副本)可以与之连接,如果您打算进行自动缩放或想要多个副本,这可能会产生问题。

NFS 和 EFS

如果您计划将所有副本或 POD 日志存储在 K8s 中,则必须使用 ReadWriteMany 访问模式。

对于ReadWriteMany选项,您可以使用任何NFS服务或GCP EFS服务。

在这种情况下,您的所有 POD 都将写入单卷 NFS 或 EFS 系统,并且日志将保存在那里,但需要额外的配置。

示例:https ://medium.com/@Sushil_Kumar/readwritemany-persistent-volumes-in-google-kubernetes-engine-a0b93e203180

额外

最好的选择是将日志推送到堆栈驱动程序,而无需在许多日志配置期间,您可以在那里管理保留期。只需开始从应用程序容器推送日志,您就可以无缝扩展副本。

于 2022-01-15T22:02:32.020 回答