教程:将应用程序部署到 minikube 集群
在本地运行 Kubernetes 对于原型开发、测试部署和学习 Kubernetes 工作流非常有用。 借助 RubyMine 中提供的 Docker 和 Kubernetes 支持,可以启动集群、部署资源并在不离开 IDE 的情况下检查应用程序。
开始之前
在开始之前,请确保已安装并配置以下内容:
启用必需插件
本教程使用的功能依赖于以下插件:
默认情况下,该插件在 RubyMine 中已捆绑并启用。 如果相关功能不可用,请确保没有禁用该插件。
按 Ctrl+Alt+S 打开设置,然后选择 。
打开 已安装 选项卡,找到所需插件,并在插件名称旁选择复选框以启用它们。
创建一个 Rails 应用程序
若要从头开始创建一个 Rails 应用,请执行以下操作:
运行 RubyMine 并点击 新建项目 在 欢迎界面。

在 新建项目 对话框中,左侧窗格 项目类型 组的 Rails 组 Ruby on Rails 中选择 应用程序 ,并指定以下设置:
指定以下设置:

名称 :为项目指定一个名称(在我们的示例中为 rails-helloworld)。
Location :指定您希望创建项目的目录路径。 默认情况下,RubyMine 会创建一个与项目同名的目录。
解释器 :选择您希望在项目中使用的 Ruby 解释器。
Rails 版本 :选择您希望在项目中使用的 Rails 版本。 如果所选解释器中未安装 Rails gem 或缺少所需的 Rails 版本,请单击字段中的
。 等待 RubyMine 下载所有可用的 Rails 版本,然后从下拉列表中选择所需版本。 点击 确定 继续。

如果所选版本尚未安装,RubyMine 会在创建项目时安装它。
额外选项 :在 额外选项 字段中提供用于项目创建的额外 Rails 选项。
例如,您可以指定通常用于附加到
rails new命令的 参数:--skip-tests跳过测试文件的创建,--skip-action-mailer跳过 Action Mailer 文件,--skip-action-cable跳过 Action Cable 文件,等等。要获取与所用 Rails 版本兼容的 Rails 选项的完整列表,请运行
rails new --help命令。
点击 创建 关闭 新建项目 对话框。
RubyMine 创建一个新的 Rails 应用程序,安装 Gemfile 中提到的 gem 依赖项,并安装项目 package.json 文件中提到的 JavaScript 依赖项。 您可以在 Run 工具窗口中看到此过程。

安装所有依赖项后,您可以在左侧的 Project 工具窗口(Alt+1 )中查看项目结构。 在右侧,RubyMine 会自动在编辑器中打开主要的项目文件。

如果您的操作系统中安装了 Git,生成一个新的 Rails 应用程序时也会初始化一个 Git 仓库。 您可以从 版本控制 部分学习如何在 RubyMine 中使用版本控制系统。
现在我们有一个运行正常的 Rails 应用。 要查看其效果,您需要启动一个 web 服务器。 执行以下步骤来完成此操作:
单击右上角的 运行 图标。
RubyMine 将展示准备运行应用程序的过程。

在浏览器中打开 http://127.0.0.1:3000 ,即可查看 Rails 的默认信息页面。

将应用程序容器化
在此步进中,将已构建的应用程序打包为 Docker 镜像。 Kubernetes 稍后会在 pod 中将该镜像作为容器运行。
构建 Docker 镜像
从 Project 视图,在编辑器中打开 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 内侧边栏中,点击
并选择 新建运行配置。
在 编辑运行配置 对话框中,在 图像标签 字段中指定
rails-minikube-app,在 容器名称 字段中指定rails-minikube。 然后,点击 运行。
RubyMine 创建一个 Dockerfile 运行配置 ,该配置从 Dockerfile 构建一个镜像,然后基于该镜像运行一个容器。 要跟踪全部过程,请在 日志 选项卡中打开 服务 工具窗口。
连接到 minikube
现在已有包含应用程序的 Docker 镜像,需要启动本地 Kubernetes 集群以进行部署。 我们将使用 minikube 在 RubyMine 上直接运行本地单节点 Kubernetes 集群。
使用 Docker 驱动启动 minikube
打开 终端 工具窗口:前往 或按 Alt+F12。
运行以下命令以启动本地 Kubernetes 集群,并指定 minikube 使用 Docker 作为虚拟化驱动程序:
minikube start --driver=docker使用此命令验证集群是否成功启动并运行:
minikube status
使用 Docker 驱动会在 Docker 容器内运行 minikube 集群,提供适合本地开发的轻量级环境。
将 minikube 集群添加到 RubyMine
打开 Services工具窗口:转到 或按 Alt+8。
选择 Kubernetes 节点,点击 添加集群 按钮,然后在上下文菜单中选择 来自默认目录。

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

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

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

在 新建 Kubernetes 资源 对话框中,选择 部署 文件类型,输入清单名称,然后按 Enter。

如收到提示,请同意将文件添加至 Git。
请将生成的文件内容替换为以下代码:
apiVersion: apps/v1 kind: Deployment metadata: name: rails-minikube labels: app: rails-minikube spec: replicas: 1 selector: matchLabels: app: rails-minikube template: metadata: name: rails-minikube labels: app: rails-minikube spec: containers: - name: rails-minikube image: rails-minikube-app imagePullPolicy: IfNotPresent ports: - containerPort: 3000 protocol: TCP restartPolicy: Always在 浮动工具栏 上,选择当前集群与命名空间,然后点击
Apply 将更改部署到本地集群。
创建服务清单
在 Project 工具窗口(Alt+1 )中,右键点击项目名称并选择 。

在 新建 Kubernetes 资源 对话框中,选择 服务 文件类型,输入清单名称,然后按 Enter。
如收到提示,请同意将文件添加至 Git。
请将生成的文件内容替换为以下代码:
apiVersion: v1 kind: Service metadata: name: rails-minikube spec: selector: app: rails-minikube ports: - protocol: TCP port: 3000 targetPort: 3000 type: NodePort在 浮动工具栏 上,选择当前集群与命名空间,然后点击
Apply 将更改部署到本地集群。
访问应用程序
在编辑器中打开文件。
点击 转发端口 属性旁的嵌入提示,在
- containerPort: 8080旁边。在 转发端口 对话框中,保留默认值并点击 前进。
在文件中,点击 在浏览器中打开 嵌入提示。
您已学会如何使用 minikube 和 RubyMine 将 Rails 应用程序部署到本地 Kubernetes 集群。 这种方法无需远程集群即可启用本地的 Kubernetes 快速测试与实验。
后续步骤
可通过以下主题学习 Kubernetes 的相关操作: