首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解放开发者!3款工具实现快速K8S开发

简介

时至今日,Kubernetes正在变得越来越重要,不仅仅是运维需要Kubernetes,在开发的世界里Kubernetes也不可或缺。因此能够熟练掌握Kubernetes知识会备受追捧。然而问题是,开发人员是否需要直接上手操作Kubernetes,他们是否必须完全了解Kubernetes。

规避这一问题的常见方法是通过提供一个平台或CI/CD流水线,将Kubernetes的复杂性从开发人员身上抽象出来,使开发人员更容易在Kubernetes内测试应用程序,而无需直接访问Kubernetes。

然而,允许开发人员直接访问Kubernetes,让他们直接在Kubernetes内部开发一些应用程序往往是有意义的,因为这样可以在一个非常接近生产的环境中工作。

这就出现了一个问题,即如何让开发人员使用Kubernetes工作,同时又不因其复杂性而使他们不堪重负。这个问题的答案可能是需要使用为Kubernetes而准备的开发者工具,例如DevSpace。在这篇文章中,我们将探讨开发人员如何使用DevSpace和Rancher来简化Kubernetes开发。

DevSpace: 使用Rancher轻松开发

DevSpace 是一款面向 Kubernetes 的客户端、开源的开发者工具。它可以:

  • 直接在 Kubernetes 内部构建、测试和调试应用程序
  • 通过更新正在运行的容器而不需要重建镜像或重启容器来进行热重载开发
  • 在团队内部以及在开发、暂存和生产中统一部署工作流程
  • 自动完成镜像构建和部署的重复性任务

DevSpace 作为开发者的客户端工具,是对 Rancher 的补充。开发者在 Rancher 内获得分配的项目,然后直接在 Kubernetes 内开发或测试应用。这使开发环境更接近生产环境,让开发人员在发布新功能时更有把握,相信一切都能够在生产环境中运行良好。

设置 DevSpace

首先需要下载 DevSpace 二进制文件( https://devspace.sh/cli/docs/getting-started/installation ),接下来,在一个已经容器化的项目中通过运行 devspace init 创建一个新的项目。如果你现在手边没有一个可以用来进行试验的项目,你可以使用我们的示例项目:

https://devspace.sh/cli/docs/getting-started/initialize-project#choose-a-project

代码语言:javascript
复制
$ devspace init

     ____              ____
    |  _ \  _____   __/ ___| _ __   __ _  ___ ___
    | | | |/ _ \ \ / /\___ \| '_ \ / _` |/ __/ _ \
    | |_| |  __/\ V /  ___) | |_) | (_| | (_|  __/
    |____/ \___| \_/  |____/| .__/ \__,_|\___\___|
                            |_|


? How do you want to initialize this project?
 Use the Dockerfile in ./Dockerfile

? Which registry do you want to use for storing your Docker images?
 Use hub.docker.com => you are logged in as devspacecloud

? Which image name do you want to use on Docker Hub? devspacecloud/quickstart

? Which port is your application listening on? (Enter to skip) 8080

[done] √ Project successfully initialized

在你回答了几个关于应该被初始化的项目的问题之后,DevSpace 将为你创建一个devspace.yaml。这个文件包含了如何使用 DevSpace 部署和开发项目,看起来如下所示:

代码语言:javascript
复制
version: v1beta9
# This section defines the images that should be built
images:
  app:
    image: devspacecloud/quickstart
    preferSyncOverRebuild: true
    # this option tells devspace to automatically wrap the Dockerfile entrypoint in memory
    # with a small restart helper script so that the process can be easily restarted from within the
    # container.
    injectRestartHelper: true
# Defines an array of everything (component, Helm chart, Kubernetes maninfests)
# that will be deployed with DevSpace in the specified order
deployments:
- name: quickstart
  helm:
    # Uses a special helm chart provided by devspace to complement projects that don't have an own
    # helm chart
    componentChart: true
    values:
      containers:
      - image: devspacecloud/quickstart
      service:
        ports:
        - port: 8080
# Configuration that will be used for developing the application
dev:
  # Port forward certain ports from the application to the local computer
  ports:
  - imageName: app
    forward:
    - port: 8080
  # Hot reload changes instead of rebuilding the complete docker image all the time
  sync:
  - imageName: app
    # This tells devspace to restart the container after a file was synced into it
    onUpload:
      restartContainer: true
profiles:
...

现在,你可以跨团队分享这个配置。它指定了如何在 Kubernetes 内部独立于本地设置开发应用程序。

要开始开发应用程序,你需要访问一个 Kubernetes 集群或 Rancher 项目。最佳实践是为每个开发人员创建一个 Rancher 项目或者为一个共享集群内的开发者团队创建一个单一项目。

为了在不同项目和命名空间之间确保简单的隔离,使用常见的 Kubernetes 资源,如 Resource Quotas、网络策略、Pod 安全策略和 Limit Ranges 等。

使用 DevSpace 开发应用程序

运行命令devspace.dev来开启开发流程。这将起到以下作用:

  • 构建和部署你的应用程序
  • 流式传输在部署过程中部署的所有容器日志
  • 转发在 devspace.yaml 中的 dev.ports 指定的所有端口
  • 根据 dev.sync 中的同步配置来同步所有的文件更改,这样你就可以在运行的容器中重启应用程序,而无需重建镜像或重新部署任何东西
代码语言:javascript
复制
$ devspace dev -n test
[info]   Using kube context 'docker-desktop'
[info]   Using namespace 'test'
[done] √ Created namespace: test
[info]   Building image 'myusername/devspace:C5992q4' with engine 'docker'
Step 1/7 : FROM node:13.12-alpine
...
[done] √ Done processing image 'myusername/devspace'
[done] √ Deployed helm chart (Release revision: 0)
[done] √ Successfully deployed quickstart with helm
[done] √ Port forwarding started on 3000:3000
[done] √ Sync started on /devspace/examples/quickstart <-> . (Pod: test/quickstart-5d7f4d8fd-w95cx)

#########################################################
[info]   DevSpace UI available at: http://localhost:8090
#########################################################

[info]   Starting log streaming for containers that use images defined in devspace.yaml

[quickstart]
[quickstart] > node-js-sample@0.0.1 start /app
[quickstart] > nodemon index.js
[quickstart]
[quickstart] [nodemon] 1.19.4
[quickstart] [nodemon] to restart at any time, enter `rs`
[quickstart] [nodemon] watching dir(s): *.*
[quickstart] [nodemon] watching extensions: js,mjs,json
[quickstart] [nodemon] starting `node index.js`
[quickstart] Example app listening on port 3000!

本地修改文件后,文件会同步到容器中。容器重启后无需通过 Docker 完全重建,大大加快了开发进程。

然后 DevSpace 会启动一个本地 UI,你可以访问和检查创建的 pod。这简化了与 Kubernetes 的交互,特别是对于不熟悉 kubectl 的用户。

除了devspace devdevspace deploy命令可以用于打包和部署应用程序,而不需要热重载、端口转发或日志流。DevSpace 提供了许多自定义功能,以根据你的用例和设置调整其行为,包括:

  • 依赖项 ,可以让你开发和部署依赖于其他项目的项目
  • Profiles ,可以在一个devspace.yaml中进行多种配置
  • 允许指定动态配置值的 变量
  • 允许为项目配置自定义命令的 命令
  • 可以在特定的 DevSpace 事件上执行某些功能的 Hooks
  • 自动为 devspace 命令添加标志(flag)的 环境变量
  • 扩展 DevSpace 和其命令的 插件

DevSpace 标准化和简化了开发人员与 Kubernetes 的交互方式的同时,Rancher 在服务器端管理着开发者如何在 Kubernetes 内部工作。Rancher 可以让你启动开发集群并将它们分到不同的项目中,在这些项目中开发团队可以一起工作和测试。

Resource Quotas 项目除了常见的 Kubernetes 隔离资源外,还可以在资源方面约束团队,让团队在共享 Kubernetes 集群中得到公平的使用。共享 Kubernetes 集群可以减少基础设施的开销并且可以直接在 Kubernetes 内部进行有效开发。

再为快速开发添砖加瓦:loft

loft 是另一个很有用的工具,它可以在开发过程中添加一些比较方便的功能,包括:

  • 虚拟集群,比“真实的”集群成本更低,并且可以在数秒内创建并再次清理,而且功能比简单的命名空间更强大
  • 在共享集群中为开发人员提供命名空间的自助服务(self-service)
  • 睡眠模式,在一定时间不活动后,将命名空间置于睡眠状态,以节省计算成本

你可以通过安装 loft helm chart( https://loft.sh/docs/getting-started/setup )轻松地将 loft 添加到 Rancher。loft CLI 也可以作为 DevSpace 的插件。

总结

对于开发人员而言,熟练上手使用 Kubernetes 并不简单,目前许多企业仍然在努力寻找一种方法来抽象 Kubernetes 的复杂性。这往往导致定制化的平台缺乏许多功能,限制了 Kubernetes 的潜力,并且是另一个维护负担。

将 DevSpace、Rancher 和 loft 结合起来,让开发者可以直接访问 Kubernetes,并且只需要一个命令:devspace dev

Rancher 十分擅长创建和管理多个集群,DevSpace 擅长为开发者提供工具。将 Rancher 和 DevSpace 相结合是十分简单的,并且可以显著提升开发人员的生产力。

此外,loft 为开发团队提供了更多有用的功能,让开发者可以随时获得 Kubernetes 的工作环境,同时保持低成本。将 Rancher、DevSpace 和 loft 这三个工具结合起来,对于使用 Kubernetes 的开发团队来说,是一个十分理想的设置。

本文转载自公众号 RancherLabs(ID:RancherLabs)。

原文链接

解放开发者!3 款工具实现快速 K8S 开发

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/BixGUKSC2oi5VhrE93Ex
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券