如何开始使用 DevSpace 并快速开发 Kubernetes 应用程序

DevSpace是一款开源工具,可帮助开发人员快速将云原生应用部署到 Kubernetes 集群。它抽象了许多传统的 Kubernetes 复杂性,因此您可以重新编写代码。在这里插入图片描述

DevSpace 与平台无关,适用于从本地机器到流行的托管公共服务的集群。该工具是一个 CLI,可使用 Kubernetes API 自动执行操作。您无需在集群中安装任何东西即可使用 DevSpace。

Kubernetes 的现代开发实践

DevSpace 为基于 Kubernetes 的部署带来了现代应用程序编程体验的许多方面。它允许您在集群上运行开发环境,并支持自动热重载。当本地文件发生更改时,DevSpace 会使用新内容自动更新您的容器。

内置端口转发意味着您可以使用它localhost来访问您的部署。您无需在开发集群上打开端口或设置 HTTP Ingress,从而提供改进的开发人员体验和更高的安全性。

在这里插入图片描述

DevSpace 也有助于调试。它支持使用远程调试器工具设置断点,提供对云中容器化应用程序的实时检查。查看容器的日志或启动终端会话也很容易,而无需运行笨拙的 Kubectl 命令。

运行的 Web 界面localhost可让您监控正在运行的应用程序并与之交互。如果您更喜欢视觉体验,则可以完全退出终端。

安装开发空间

DevSpace 作为独立的二进制文件分发,可在 Windows、Mac 和 Linux 系统上运行。有几个安装选项可用。以下是下载适用于 Linux 的 DevSpace 并将 CLI 添加到您的路径的推荐命令:

dev
sudo install devspace /usr/local/bin

或者,您可以使用 Node 包管理器 npm 来安装和更新 DevSpace:

npm install -g devspace

devspace如果您已经安装了 npm,此命令将为您提供路径中的功能。

DevSpace 以KUBE_CONTEXT与 Kubectl 和 Helm 等其他生态系统工具相同的方式使用您的活动“ ”。设置KUBECONFIG为定义集群连接的 Kubectl 兼容配置文件:

export KUBECONFIG=/path/to/kubeconfig.yaml


# Uses $KUBECONFIG
devspace deploy

## 创建项目

使用 DevSpace 构建的第一步是初始化您的项目目录。这将创建一个devspace.yaml文件,其中包含存储库的 DevSpace 配置。

```cpp
devspace init

系统将提示您选择您计划使用的部署例程。在将您的应用程序启动到集群中时,DevSpace 可以与 Kubectl、Helm 或 Kustomize 配合使用。

建议的QUICKSTART选项是一个特殊的图表,可让您定义应用程序的组件,例如前端 Web 服务器、后端 API 服务器和数据库,而不是提供手动创建的 Helm 图表或 Kubectl 清单。如果您正在构建具有传统结构的系统并且不想花时间创建自己的 Kubernetes 资源,请使用此选项。

按照提示为 DevSpace 提供 Dockerfile 的路径。您需要提供注册表身份验证和一些有关您的图像的基本信息,例如它侦听的端口。DevSpace 将自动生成一个随时可用的配置,让您运行devspace deploy以在 Kubernetes 上运行您的应用程序。

如果您不使用快速入门选项,则需要提供 Helm 图表或 Kubernetes 清单的路径。按照提示构建初始配置。退出设置向导后,您可以通过手动编辑devspace.yaml文件继续添加额外的图像和部署。

添加图像

DevSpace 项目是从一个或多个容器镜像构建的。要在项目中注册图像,请将其添加到文件中的images键下devspace.yaml:

images:
  app:
    image: example.com/example/image:latest
    dockerfile: ./Dockerfile
    build:
      disabled: true

该image字段定义图像标记名称。该dockerfile字段是可选的;设置后,它应该引用项目中图像的 Dockerfile 的路径。与Dockerfiles图像将自动被建立devspace build和devspace deploy命令,除非build.disabled是true在图像的配置。

图像并行构建以提高性能。该–build-sequential标志强制图像按照指定的顺序单独构建。构建完成后,DevSpace 将自动将每个映像推送到其各自的注册表。

除非 DevSpace 在其 Dockerfile 或其构建上下文中的文件中检测到更改,否则不会自动重建图像。您可以使用该–force-build标志强制重建所有已配置的映像。

添加部署

a 的第二部分devspace.yaml是您的deployments. 这些定义了将在您的集群中创建的资源。

deployments:
  - name: "helm chart"
    helm:
      chart:
        name: example/example-app
      values:
        VARIABLE_OVERRIDE: "new-value"
  - name: "kubectl manifests"
    kubectl:
      manifests:        - .kube/manifests

该文件定义了两个单独的部署,一个使用 Helm,另一个使用 Kubectl。当您运行 时devspace deploy,Helm 图表和您的 Kubectl 清单都将安装在您的集群中。

重复该deploy命令将更新您的部署。DevSpace 仅重新部署更改的组件,除非使用该–force-deploy标志。

由于 DevSpace 跨集群工作,因此将您的部署从开发提升到生产是更改KUBECONFIG环境变量并重新运行devspace deploy. 这为您提供了一个统一的机制来管理系统的多个独立部署。

使用配置文件

DevSpace 支持允许您修改devspace.yaml每个环境的部分的配置文件。每个命名的配置文件都可以替换、合并和修改配置文件中的字段。

配置文件本身也在您的devspace.yaml:

images:
  api-server:
    image: example.com/api-server:latest
  web-server:
    image: example.com/web-server:latest
  debug:
    image: example.com/debug-tool:latest# ... omittedprofiles:
  - name: production
    patches:
      - op: remove
        path: images.debug

通过将-p或–profile标志传递给 DevSpace 命令来激活配置文件。以下是使用production上面定义的配置文件启动部署的方法。部署将不包括debug图像,因为它已被配置文件的补丁之一删除。

devspace deploy --profile production

使用热重载

通过设置文件同步启用热重载功能:

dev:
  sync:
    - imageSelector: example.com/api-server:latest
      localSubPath: ./api/
      containerPath: /var/www/html
      excludePaths:        - vendor/

dev在您的 中添加密钥作为顶级字段devspace.yaml,然后用于sync在每个图像的基础上配置热重载。该imageSelector比赛图像标签应用热重载规则。从文件localSubPath在您的工作目录将被同步到containerPath在部署容器实例。

通过运行devspace dev或启动热重载会话devspace sync。在前者的命令启动所有DevSpace的开发环境功能,包括端口转发和实时日志流。

热重载默认替换现有容器中的文件。这类似于在使用本地容器实例时使用 Docker 卷和绑定挂载。在某些情况下,您可能希望在文件系统更改时启动新的 DevSpace 部署。这是通过单独的autoReload选项实现的:

images:
  api:
    image: example.com/api-server:latestdeployments:
  - name: api-deployment  # ... omitteddev:
  autoReload:
    paths:      - ./kernel/*
    images:      - example.com/api-server:latest
    deployments:      - api-deployment

api-deployment只要本地kernel目录中的文件发生更改,此示例就会重新部署。当您修改需要通过构建过程运行的文件以使它们对您的容器有用时,这是理想的选择。

转发端口

端口转发是通过dev.ports您的devspace.yaml. 还支持反向转发,让localhost容器中的地址映射到本地机器上的端口。

dev:
  ports:
    - imageSelector: example.com/api-server:latest
      forward:
        - port: 8080
          remotePort: 80
      reverseForward:
        - port: 9000
          remote: 9000

此示例localhost:8080在您的机器上设置转发到运行example.com/api-server映像的容器中的端口 80 。还有一个反向转发,它将容器内的流量引导localhost:9000回您机器上的端口 9000。

其他特性

除了此处介绍的功能外,DevSpace 还支持其他几个功能组,让您可以监控部署、与容器交互以及配置高级开发工作流:

自动终端启动让您每次运行devspace dev.

当您进入开发模式时,自动打开 URL 会在您的浏览器中启动网站和 Web 应用程序。

可配置的日志记录定义了哪些容器应该出现在开发模式日志流中。

自定义命令充当常用操作的快捷方式,帮助新团队成员与您的部署进行交互,而无需学习 Kubectl 中冗长的流程。

钩子在部署过程中运行命令,让您手动配置容器或将新部署记录到集中监控服务。

用户界面在开发模式下自动运行devspace dev,可以在浏览器中使用devspace ui.

DevSpace 还提供可以为系统添加更多功能的插件。插件 API 支持从远程 URL 或本地脚本安装,并促进新命令、钩子和变量。开发您自己的插件提供了一种标准化您在多个独立项目中使用 DevSpace 的方法。

CI/CD 管道中的部署

DevSpace 可以将生产部署作为CI/CD 管道的一部分进行处理。如果您在命令中包含显式选择器(例如标签),它会提供官方 Docker 映像并支持非交互式使用-l。

CI 管道内的部署可能如下所示:

echo $KUBECONFIG_CI_VARIABLE > /path/to/kubeconfig
export KUBECONFIG=/path/to/kubeconfig
devspace deploy --profile production --timeout 60 --wait --skip-build

这将使用productionDevSpace 配置文件部署您的应用程序。该–skip-build标志指示 DevSpace 不要构建您的图像。构建通常应该在管道的早期作为一个单独的阶段进行处理。

该–wait标志强制 DevSpace 等待在您的 中指定的 Pod 计数可用devspace.yaml,而不是在您运行命令后立即终止。这更适用于您希望确认工作负载处于活动状态的 CI 环境。允许 DevSpace 无需等待就退出可能意味着即使存在部署问题,您的管道也会被标记为成功。

结论

DevSpace 作为面向开发人员的 Kubernetes 部署工具,为关键操作提供有用的抽象,越来越受到关注。它减少了将容器启动到集群中所需的 YAML 数量,将其替换为定义、构建和启动映像的简单配置键和终端命令。
在这里插入图片描述

作为一种平台和环境无关的工具,DevSpace 使开发人员不必担心单个集群的独特特征。无论部署目标如何,整体体验都类似于在本地机器上构建传统系统。通过将概念映射回更普遍理解的开发实践,这有助于缓和 Kubernetes 的学习曲线。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mikes zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值