本文转自Rancher Labs
关注咱们,即可第一工夫获取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二进制文件,接下来,在一个曾经容器化的我的项目中通过运行devspace init创立一个新的我的项目。如果你当初手边没有一个能够用来进行试验的我的项目,你能够应用咱们的示例我的项目:

https://devspace.sh/cli/docs/...

$ 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部署和开发我的项目,看起来如下所示:

version: v1beta9# This section defines the images that should be builtimages:  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 orderdeployments:- 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 applicationdev:  # 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: trueprofiles:...

当初,你能够跨团队分享这个配置。它指定了如何在Kubernetes外部独立于本地设置开发应用程序。

要开始开发应用程序,你须要拜访一个Kubernetes集群或Rancher我的项目。最佳实际是为每个开发人员创立一个Rancher我的项目或者为一个共享集群内的开发者团队创立一个繁多我的项目。

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

应用DevSpace开发应用程序

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

  • 构建和部署你的应用程序
  • 流式传输在部署过程中部署的所有容器日志
  • 转发在devspace.yaml中的dev.ports指定的所有端口
  • 依据dev.sync中的同步配置来同步所有的文件更改,这样你就能够在运行的容器中重启应用程序,而无需重建镜像或重新部署任何货色
$ 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 轻松地将loft增加到Rancher。loft CLI也能够作为DevSpace的插件。

总 结

对于开发人员而言,纯熟上手应用Kubernetes并不简略,目前许多企业依然在致力寻找一种办法来形象Kubernetes的复杂性。这往往导致定制化的平台不足许多性能,限度了Kubernetes的后劲,并且是另一个保护累赘。

将DevSpace、Rancher和loft联合起来,让开发者能够间接拜访Kubernetes,并且只须要一个命令:devspace dev

Rancher非常善于创立和治理多个集群,DevSpace善于为开发者提供工具。将Rancher和DevSpace相结合是非常简略的,并且能够显著晋升开发人员的生产力。

此外,loft为开发团队提供了更多有用的性能,让开发者能够随时取得Kubernetes的工作环境,同时放弃低成本。将Rancher、DevSpace和loft这三个工具联合起来,对于应用Kubernetes的开发团队来说,是一个非常现实的设置。