💨 将 Javascript 应用部署到 Kubernetes 的最快方法🌬️✨
TL;DR
在本教程中,您将学习如何在 Kubernetes(一个容器编排平台☸️)上部署您的第一个 javascript 应用程序。
我们将使用Minikube ✨在 Kubernetes 本地部署一个简单的express服务器,该服务器返回一个示例 JSON 对象。
先决条件📜:
- Docker:用于容器化应用程序。🐋
- Minikube:用于在本地运行 Kubernetes。☸️
Odigos - 开源分布式追踪
无需编写任何代码,即可同时监控所有应用!
使用唯一能够在所有应用中生成分布式跟踪的平台,简化 OpenTelemetry 的复杂性。
我们真的才刚刚开始。
让我们开始设置吧🚀
我们将首先使用以下命令初始化我们的项目:
npm init -y
这将使用 📝 文件初始化一个NodeJS项目,package.json
该文件跟踪我们安装的依赖项。
安装 Express.js 框架
npm install express
现在,package.json
依赖项对象内部应该看起来像这样。✅
"dependencies": {
"express": "^4.18.2"
}
现在,在项目的根目录创建一个index.js
文件并添加以下代码行。🚀
// 👇🏻 Initialize express.
const express = require("express");
const app = express();
const port = 3000;
// 👇🏻 Return a sample JSON object with a message property on the root path.
app.get("/", (req, res) => {
res.json({
message: "Hello from Odigos!",
});
});
// 👇🏻 Listen on port 3000.
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
我们需要在 中添加一个脚本package.json
来运行应用程序。将其添加到 的脚本对象中package.json
。
"scripts": {
"dev": "node index.js"
},
现在,为了检查我们的应用程序是否正常运行,请使用运行服务器npm run dev
并通过 CLI 或浏览器发出获取请求localhost:3000
。✨
如果您使用的是 CLI,请确保已安装cURL。✅
curl http://localhost:3000
你应该会看到类似这样的内容。👇🏻
Ctrl + C
现在,你可以简单地使用🚫停止正在运行的 Express 服务器
我们的示例应用程序已经准备好了!🎉现在,让我们将其容器化并推送到 Kubernetes。🐳☸️
将应用程序容器化
我们将使用Docker来容器化我们的应用程序。
在项目的根目录中,创建一个名为 的新文件Dockerfile
。
💡 确保名称完全相同。否则,您需要显式传递
-f
标志来指定Dockerfile
路径。
# Uses node as the base image
FROM node:21-alpine
# Sets up our working directory as /app inside the container.
WORKDIR /app
# Copyies package json files.
COPY package.json package-lock.json ./
# Installs the dependencies from the package.json
RUN npm install --production
# Copies current directory files into the docker environment
COPY . .
# Expose port 3000 as our server uses it.
EXPOSE 3000
# Finally runs the server.
CMD ["node", "index.js"]
现在,我们需要构建⚒️这个容器才能实际使用它并将其推送到 Kubernetes。
运行此命令来构建Dockerfile
。
🚨 如果您在 Windows 上运行它,请确保 Docker Desktop 正在运行。
// 👇🏻 We are tagging our image name to express-server
docker build -t express-server .
现在,是时候运行容器了。🏃🏻♂️💨
docker run -dp 127.0.0.1:3000:3000 express-server
💡 我们在后台运行我们的容器,容器端口 3000 映射到我们的计算机端口 3000。
再次运行以下命令,您应该看到与之前相同的结果。✅
curl http://localhost:3000
注意:这次应用程序不像以前那样在我们的计算机上运行。相反,它在容器内运行。🤯
在 Kubernetes 中部署
如前所述,我们将使用 Minikube 在本地计算机中创建编排环境,并使用kubectl
命令与 Kubernetes 进行交互。😄
启动 Minikube:🚀
minikube start
由于我们将使用本地容器而不是从 docker hub 中提取它们,因此请运行以下命令。✨
eval $(minikube docker-env)
docker build -t express-server .
eval $(minikube docker-env)
:它用于将您的终端指向docker-cli
minikube 内的 Docker 引擎。
🚨 注意,我们许多人使用 Fish 作为我们的 shell,因此对于 fish,相应的命令将是
eval (minikube docker-env)
现在,在项目根目录中创建一个嵌套文件夹k8/deployment
,并在部署文件夹内创建一个名为 的新文件,deployment.yaml
其内容如下。
在此文件中,我们将管理容器的部署。👇🏻
# 👇🏻 /k8/deployment/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: express-deployment
spec:
selector:
matchLabels:
app: express-svr
template:
metadata:
labels:
app: express-svr
spec:
containers:
- name: express-svr
image: express-server
imagePullPolicy: Never # Make sure to set it to Never, or else it will pull from the docker hub and fail.
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 3000
最后,运行此命令以应用我们刚刚创建的部署配置deployment.yaml
。✨
kubectl apply -f .\k8\deployment\deployment.yaml
现在,如果我们查看正在运行的 Pod,我们可以看到 Pod 已成功创建。🎉
要查看我们创建的 pod 的日志,运行后kubectl logs <pod_name>
我们应该会看到以下内容。
这样,我们的express-server
就成功部署在本地 Kubernetes 上了。😎
这就是本文的内容,我们成功地将我们的应用程序容器化并将其部署到 Kubernetes。
本文的源代码可以在这里找到
https://github.com/keyval-dev/blog/tree/main/js-on-k8s
非常感谢你的阅读!🎉🫡
文章来源:https://dev.to/odigos/the-fastest-way-to-deploy-your-javascript-app-to-kubernetes-2j33