教程:将应用程序部署到 minikube 集群
在本地运行 Kubernetes 对于原型开发、测试部署和学习 Kubernetes 工作流特别有用。 借助 WebStorm 中提供的 Docker 和 Kubernetes 支持,可以启动集群、部署资源并在 IDE 内检查应用程序。
开始之前
在开始之前,请确保已安装并配置以下内容:
启用必需插件
本教程使用的功能依赖于以下插件:
该插件在 WebStorm 中默认捆绑并启用。 如果相关功能不可用,请确保插件未被禁用。
按下 Ctrl+Alt+S 打开设置,然后选择 。
在 已安装 标签页,确保 Kubernetes 插件旁边的复选框已选中。
创建示例项目
让我们从一个简单的 Node.js Express 应用程序开始。 让该应用程序包含一个 hello_express.js 文件,返回 Hello World! 并在控制台输出 Example app listening on port 3000!。
使用 Node.js 创建一个空项目
请点击 新建项目 在 欢迎屏幕或从主菜单中选择 。
在打开的对话框中,在左侧窗格中选择 Node.js。
指定应用程序的位置及其名称,例如:
hello_world_docker。指定要使用的本地 Node.js 运行时。 接受建议的安装,或从列表中选择另一个,或者如果您的计算机尚未安装 Node.js,可点击 下载 进行安装。 详细了解 创建新的 Node.js 应用程序。

点击 创建。
填充应用程序
现在我们将为应用程序创建一个单独的文件夹,这将帮助我们稍后将本地文件夹映射到容器中的文件夹。
为此,请打开 项目 工具窗口 Alt+1 ,右键点击项目文件夹,从上下文菜单中选择 ,然后选择 。 在弹出对话框中,指定文件夹名称,例如: app 。

现在是时候创建一个 JavaScript 文件来存放应用程序的代码了。

在弹出的对话框中,指定文件名称,例如: hello_express.js 。

在编辑器中打开新创建的 hello_express.js 文件并输入以下代码:
const express = require('express'); const app = express(); app.get('/', function(req, res) { res.send('Hello World!') }); app.listen(3000,function() { console.log('Example app listening on port 3000!') });正如所预期的那样,
express引用无法解析,并被标记为错误。 但是,当您将鼠标悬停在引用上时,WebStorm 会建议进行快速修复。
当您点击 安装 'express' 链接时,
express将被添加到 package.json 文件中并安装。
在本地运行应用程序
让我们在本地运行应用程序,以确保其按预期工作。
打开 hello_express.js 文件,在编辑器选项卡中的任意位置右键点击,然后在上下文菜单中选择 。

运行 工具窗口已打开,显示
Example app listening on port 3000!。如果您在
http://localhost:3000地址打开浏览器,将会看到页面如预期那样显示 Hello World!。
容器化应用程序
在此步骤中,将应用程序打包为 Docker 镜像。 Kubernetes 稍后会将该镜像作为容器在 pod 中运行。
创建 Dockerfile
在项目文件夹的上下文菜单中,选择 ,然后选择 。

打开新创建的 Dockerfile ,并输入以下代码:
FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./app/ ./app/ CMD ["node","./app/hello_express.js"]此 Dockerfile 包含基于
node:22镜像从 Docker Hub 构建镜像的指令。当您从此镜像运行容器时,Docker 会将 /app/ 目录的内容复制到容器中的 /tmp/app/ 目录(在我们的示例中, /app/ 目录包含 hello_express.js 文件)。 package.json 文件将被复制到 /tmp/ 。
然后 Docker 将当前工作目录设置为 /tmp 并运行
node ./app/hello_express.js。 因此,容器日志中应显示Example app listening on port 3000!。
构建 Docker 镜像
在 项目 视图中,编辑器中打开 Dockerfile 。
编辑该文件:
更改
ENV RAILS_ENV="production" \ BUNDLE_DEPLOYMENT="1" \ BUNDLE_PATH="/usr/local/bundle" \ BUNDLE_WITHOUT="development"to
ENV RAILS_ENV="development" \ BUNDLE_PATH="/usr/local/bundle"更改
EXPOSE 80 CMD ["./bin/thrust", "./bin/rails", "server"]to
EXPOSE 3000 CMD ["./bin/rails", "server", "-b", "0.0.0.0", "-p", "3000"]
在 Dockerfile 内侧边栏中,点击
并选择 新建运行配置。

在 编辑运行配置 对话框中,在 镜像标记 字段中指定
hello-world-docker-app,在 容器名称 字段中指定hello-world-docker。 然后,点击 运行。
WebStorm 创建一个 Dockerfile 运行配置 ,该配置从 Dockerfile 构建一个镜像,然后基于该镜像运行一个容器。 要跟踪整个过程,请在 构建日志 选项卡中打开 服务 工具窗口。

连接至 minikube
现在你已有包含应用程序的 Docker 镜像,需要启动本地 Kubernetes 集群以进行部署。 我们将使用 minikube 直接在 WebStorm 上运行本地单节点 Kubernetes 集群。
使用 Docker 驱动程序启动 minikube
打开 终端 工具窗口:转到 或按 Alt+F12。
运行以下命令以启动本地 Kubernetes 集群,并让 minikube 使用 Docker 作为虚拟化驱动程序:
minikube start --driver=docker通过以下命令验证集群是否已启动并运行:
minikube status
使用 Docker 驱动程序时,minikube 集群会运行在 Docker 容器中,提供适合本地开发的轻量环境。
将 minikube 集群添加到 WebStorm
打开 Services工具窗口:转到 或按 Alt+8。
选择 Kubernetes 节点,点击 添加集群 按钮,然后从上下文菜单选择 来自默认目录。

在 添加集群 对话框中,选择 Minikube 并点击 添加集群。

添加的集群将在 服务 工具窗口中可用。
在 服务 工具窗口中,右键点击 minikube 集群并选择 连接集群。

此时,WebStorm 已连接到正在运行的 minikube 集群,并可以显示其 Kubernetes 资源。 可以在 服务 工具窗口里直接浏览命名空间、节点及其他集群对象。
部署应用程序
在本教程前面,你已经 本地构建了应用程序镜像。 但 minikube 集群无法自动访问本地 Docker daemon 中的镜像。 需要将镜像加载到 minikube 中后才能使用。
将 Docker 镜像加载到 minikube
打开 终端 工具窗口:转到 或按 Alt+F12。
运行以下命令,在 minikube 中构建容器镜像:
minikube image load <image tag>其中 <image tag> 为上面 运行/调试配置},{ 中指定的值。 在示例中应为:
minikube image load hello-world-docker-app通过运行以下命令验证
hello-world-docker-app镜像在集群中是否可用:minikube image ls | grep hello-world-docker-app输出中应会看到
docker.io/library/hello-world-docker-app:latest。
现在镜像已在 minikube 中可用,下一步是描述 Kubernetes 如何运行它。 接下来创建两个 Kubernetes 清单:
部署,有助于在 pod 中运行容器
服务,可将应用暴露以便可以从本机访问
创建部署清单
在 项目 工具窗口(Alt+1 )中,右键点击项目名称并选择 。

在 新建 Kubernetes 资源 对话框中,选择 部署 文件类型,将
hello-world-docker-deployment作为清单名称,并按 Enter。
如果出现提示,请同意将该文件添加到 Git。
用以下代码替换所生成文件的内容:
apiVersion: apps/v1 kind: Deployment metadata: name: hello-world-docker labels: app: hello-world-docker spec: replicas: 1 selector: matchLabels: app: hello-world-docker template: metadata: name: hello-world-docker labels: app: hello-world-docker spec: containers: - name: hello-world-docker image: hello-world-docker-app imagePullPolicy: IfNotPresent ports: - containerPort: 3000 protocol: TCP restartPolicy: Always在 悬浮工具栏 选择当前集群和命名空间,然后点击
Apply 以将变更应用到本地集群。

创建服务清单
在 项目 工具窗口(Alt+1 )中,右键点击项目名称并选择 。

在 新建 Kubernetes 资源 对话框中,选择 服务 文件类型,将
hello-world-docker-service作为清单名称,并按 Enter。
如果出现提示,请同意将该文件添加到 Git。
用以下代码替换所生成文件的内容:
apiVersion: v1 kind: Service metadata: name: hello-world-docker spec: selector: app: hello-world-docker ports: - protocol: TCP port: 3000 targetPort: 3000 type: NodePort在 悬浮工具栏 选择当前集群和命名空间,然后点击
Apply 以将变更应用到本地集群。
访问应用程序
在编辑器中打开 hello-world-docker-deployment.yaml 文件。
点击 转发端口 嵌入提示,位于
- containerPort: 3000属性旁边。
在 转发端口 对话框中,保留默认值并点击 前进。
在 hello-world-docker-deployment.yaml 文件中,点击 在浏览器中打开 嵌入提示。

WebStorm 会将你重定向到默认浏览器,可直接检查刚刚部署在本地 minikube 集群的应用程序。

你已学会如何使用 minikube 和 WebStorm 将 Node.js Express 应用程序部署到本地 Kubernetes 集群。 此方法可快速在本地测试和试验 Kubernetes,而无需远程集群。
后续步骤
通过以下主题学习如何使用 Kubernetes: