将 Winston js 日志文件存储在 GKE 上

Store Winston js log files on GKE

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

我是 kubernetes 卷的新手,找不到合适的教程。

There are multiple options to do or follow, now first thing why you want store logs in files ?

您只需将日志推送到 GCP 的 stack driver 服务,您的日志将存储在那里,在这种情况下,无需使用任何卷或额外配置。

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

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

使用节点体积 :

在此容器中,将在 运行 所在的节点卷内创建日志文件。

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

缺点

  • 一旦节点在维护期间自动缩放或从 GKE 集群中移除,日志将被移除。
  • 容器可以随时调度到任何节点,或者日志序列可能会造成问题。

使用PVC盘:

  • 如果您将使用磁盘长期存储您的日志 大概 30-40 天就可以了。

  • 你在K8s中创建POD使用的volume,POD可以使用 此卷用于创建文件和存储,并且不会从中删除 那个磁盘,除非你这样做。

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

缺点

  • 如果您正在使用,则只有一个 POD(副本)可以连接 访问模式 ReadWriteOnce,如果您是 计划进行自动缩放或想要多个副本。

NFS 和 EFS

如果您打算在 K8s 中存储所有副本或 PODs 日志,则必须使用 ReadWriteMany 访问模式。

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

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

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

额外 :

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