如何在自己的机器上使用Kubernetes“播放”?实现这一目标的一种方法可能是K3D!
本教程将显示如何在WSL2上运行的Ubuntu机器内的本地kubernetes上运行应用程序!
先决条件
首先,我们需要安装:
- Node.js
- Docker
- K3D
- kubectl
- Visual Studio Code(或其他代码编辑器)
另外,您需要在Docker Hub中拥有一个帐户。
创建node.js api
第一步是创建我们的API。让我们创建一个文件夹并初始化一个node.js project:
下一步是使用以下命令安装express:
npm i express
现在打开Visual Studio代码或其他代码编辑器,并创建一个名为src
的文件夹,并在下面的图中使用称为index.js
的文件:
让我们编写一些代码来创建一个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
指令,并添加我们的指令以执行应用程序:
在命令行中,只需键入npm start
即可打开浏览器并使用url http://localhost:8087/api/v1/test
访问应用程序。
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 run -it --rm -p 8087:8087 rodrigoluisfaria/new-api:1.0.0
启动容器后,您可以打开浏览器并测试是否可以访问应用程序:
最后一步是将此图像放入我们的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
。
为了测试群集,您可以运行一些命令:
kubectl cluster-info
kubectl get nodes
kubectl get pods --all-namespaces
Kubernetes
现在,让我们创建一个名为k8s
和三个文件的文件夹:
- deployment.yaml -Deployment
- service.yaml -Service
- intress.yaml -Ingress
在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
结果是这样:
最后一步是测试!打开浏览器并检查您的应用程序是否正在运行:
我希望本教程很有帮助,如果您有任何评论或问题,您可以在此处或我的电子邮件rodrigolfsi@gmail.com发表评论。