使用K3D在kubernetes local上运行node.js api
#node #docker #kubernetes #k3d

如何在自己的机器上使用Kubernetes“播放”?实现这一目标的一种方法可能是K3D

本教程将显示如何在WSL2上运行的Ubuntu机器内的本地kubernetes上运行应用程序!

先决条件

首先,我们需要安装:

另外,您需要在Docker Hub中拥有一个帐户。

创建node.js api

第一步是创建我们的API。让我们创建一个文件夹并初始化一个node.js project:

Node initialization

下一步是使用以下命令安装express

npm i express

现在打开Visual Studio代码或其他代码编辑器,并创建一个名为src的文件夹,并在下面的图中使用称为index.js的文件:

Application structure

让我们编写一些代码来创建一个API,该API在路径http://localhost:8087/api/v1/test中用Hello World响应:

const express = require('express')
const app = express()

app.get('/api/v1/test', (req, res) => {
    res.send('Hello World')
})

app.listen(8087, () => console.log('Server started on port 8087'))

现在,让我们更改package.json文件以删除默认情况下创建的test指令,并添加我们的指令以执行应用程序:

package.json file

在命令行中,只需键入npm start即可打开浏览器并使用url http://localhost:8087/api/v1/test访问应用程序。

Application running

Docker图像

为了在Kubernetes中执行我们的应用程序,我们应该创建应用程序的图像。在本教程中,我们将创建一个docker映像。

第一步是在项目的根部创建一个名为Dockerfile的文件,并在下面添加此内容:

FROM node:18-alpine

WORKDIR /app

COPY package*json ./

RUN npm i

COPY ./src ./src

CMD ["npm", "start"]

现在我们应该使用build命令来生成图像:

docker build -t rodrigoluisfaria/new-api:1.0.0 .

在上面的命令中,您应该在Docker Hub中用用户名替换rodrigoluisfaria

如果命令成功执行,则可以使用命令docker images检查生成的图像:

docker images command

为了测试生成的图像,我们可以运行下面的命令以执行容器:

docker run -it --rm -p 8087:8087 rodrigoluisfaria/new-api:1.0.0

启动容器后,您可以打开浏览器并测试是否可以访问应用程序:

running application on Docker

最后一步是将此图像放入我们的Docker Hub存储库中。在页面上的Docker Hub创建一个名为new-api的新存储库,并执行以下命令:

docker push rodrigoluisfaria/new-api:1.0.0

记住用Docker Hub中的用户名替换rodrigoluisfaria

集群Kubernetes -K3D

现在让我们使用K3D创建我们的群集!
为此,您只需要执行命令:

k3d cluster create -p "8087:80@loadbalancer" my-cluster

在此命令中,您启动一​​个群集并揭示其端口8087

Creating cluster Kubernetes

为了测试群集,您可以运行一些命令:

kubectl cluster-info
kubectl get nodes
kubectl get pods --all-namespaces

Cluster info

Kubernetes

现在,让我们创建一个名为k8s和三个文件的文件夹:

deployment.yaml文件中放置内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: rodrigoluisfaria/new-api:1.0.0
          ports:
            - containerPort: 8087

service.yaml文件中放置内容:

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
  - port: 8087
    targetPort: 8087

ingress.yaml文件中放置内容:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 8087

现在让我们运行一个kubectl命令来创建这些资源:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

要验证可以执行以下命令的资源:

kubectl get deployments
kubectl get services
kubectl get ingress

结果是这样:

kubectl commands

最后一步是测试!打开浏览器并检查您的应用程序是否正在运行:

Application

我希望本教程很有帮助,如果您有任何评论或问题,您可以在此处或我的电子邮件rodrigolfsi@gmail.com发表评论。