例如,我想运行我的node js应用程序。我可以创建Deployment并通过Service公开它。 为了使其保持运行,我需要部署MongoDB。它将创建自己的服务。 我可以给它提供静态服务名称,例如mongo.svc.cluster.local,并为Node.js应用程序对其进行硬编码。 Kubernetes将负责DNS等。
我不知道这是否是一个好习惯。但这不是那样。
我正在设法将标签围绕在标签上。我知道我可以将MongoDB服务标记为“ component:mongo”,但是我无法理解如何使用它来发现MongoDB主机名并将其作为env var传递到我的应用程序中。
有人可以向我解释吗?
答案 0 :(得分:2)
您应该始终使这些主机名可配置;通过环境变量最容易在Docker / Kubernetes世界中设置。考虑一下您正在描述的场景:
highest_turnout = data[0]
for county in data:
if (county.voters/county.population) > (highest_turnout.voters/highest_turnout.population):
highest_turnout = county
。const mongoose = require("mongoose");
mongoose.set('useFindAndModify', false); //was set due to DeprecationWarning: Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `useFindAndModify`
app.post("/delete", function(req, res){
let checkedItem = req.body.deleteItem;
if (!mongoose.Types.ObjectId.isValid(checkedItem)) {
checkedItem = checkedItem.replace(/\s/g, '');
}
Item.findByIdAndRemove(checkedItem, function(err) {
if (!err) {
console.log("Successfully Deleted " + checkedItem);
res.redirect("/");
}
});
});
。localhost:27017
,尤其是如果您认为数据库可能位于不同的命名空间中。几乎每种语言都提供了某种访问环境变量的方法(Node的mongodb:27017
,Python的mongodb.default.svc.cluster.local:27017
,Ruby的process.env
等),因此您可以使用一些默认值进行查找很有道理。
os.environ
在Kubernetes部署规范中,您可以将其明确设置为环境变量。
ENV
我不会担心让应用程序动态地尝试查找数据库。只需传递其位置作为配置即可。 (您不必考虑标签,除非告知服务的内容。)