我正在使用gcsfuse在容器中安装一个卷,我需要它来启动我的 node.js 应用程序。
为了挂载卷,我使用了kubernetes 的生命周期钩子,但它不能确保它会在我的容器的入口点之前执行。
我一直在考虑如何检查卷何时安装,以及它是否下降。
为了检查它何时安装和卸载,我阅读并搜索了卷的存在/proc/mounts
,并添加了一个观察者以进行更改。
有没有更简单的方法来确保卷安装在 node.js、docker 或 kubernetes 中?
我正在使用gcsfuse在容器中安装一个卷,我需要它来启动我的 node.js 应用程序。
为了挂载卷,我使用了kubernetes 的生命周期钩子,但它不能确保它会在我的容器的入口点之前执行。
我一直在考虑如何检查卷何时安装,以及它是否下降。
为了检查它何时安装和卸载,我阅读并搜索了卷的存在/proc/mounts
,并添加了一个观察者以进行更改。
有没有更简单的方法来确保卷安装在 node.js、docker 或 kubernetes 中?
您可以在特权模式下运行此 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