在 node.js 中检查存储桶是不是准备就绪的最佳方法

Posted

技术标签:

【中文标题】在 node.js 中检查存储桶是不是准备就绪的最佳方法【英文标题】:Best way to check if a bucket is ready in node.js在 node.js 中检查存储桶是否准备就绪的最佳方法 【发布时间】:2018-07-26 12:05:35 【问题描述】:

我正在使用 gcsfuse 在容器中挂载一个卷,我需要它来启动我的 node.js 应用程序。

为了挂载卷,我使用 kubernetes 的生命周期钩子,但它不能确保它会在我的容器入口点之前执行。

我一直在考虑如何检查卷何时挂载,以及它是否下降。

为了检查它何时被挂载和卸载,我在/proc/mounts 中读取并搜索该卷的存在,并为其添加一个观察者以进行更改。

是否有更简单的方法来确保卷安装在 node.js、docker 或 kubernetes 中?

【问题讨论】:

【参考方案1】:

您可以在特权模式下运行此 dockerfile:

FROM ubuntu 
RUN echo "deb http://packages.cloud.google.com/apt gcsfuse-stretch main" | tee /etc/apt/sources.list.d/gcsfuse.list 
RUN apt-get update && apt install curl -y 
RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 
RUN apt-get update 
RUN apt-get install gcsfuse fuse -y 
RUN mkdir -p /mnt/tmp 
CMD gcsfuse [BUCKET NAME] /mnt/tmp && /bin/bash

这样你就可以确定在 pod 初始化时桶已经挂载了。

另一方面,我不推荐这种方法,因为 Google Cloud Storage [1] 有一个 Node.sj 库。

这是一个桶列表的例子:

// Imports the Google Cloud client library
const Storage = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

// Lists all buckets in the current project
storage
  .getBuckets()
  .then(results => 
    const buckets = results[0];

    console.log('Buckets:');
    buckets.forEach(bucket => 
      console.log(bucket.name);
    );
  )
  .catch(err => 
    console.error('ERROR:', err);
  );

[1]https://github.com/googleapis/nodejs-storage/tree/master/samples

【讨论】:

你是对的。我虽然将 gcs 作为标准文件系统处理会更容易,但事实并非如此。

以上是关于在 node.js 中检查存储桶是不是准备就绪的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

将存储在 S3 存储桶中的文件直接下载到 React 客户端,而不是通过 Node.js 服务器

硬件重置后如何检查英特尔实感设备是不是准备就绪?

如何在没有框架的情况下检查 DOM 是不是准备就绪?

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

从 node.js 将图像上传到 s3 存储桶

Windows 上的 Node.js 生产就绪了吗? [关闭]