本文转自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/getting-started/initialize-project#choose-a-project

$ 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 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中的同步配置来同步所有的文件更改,这样你就可以在运行的容器中重启应用程序,而无需重建镜像或重新部署任何东西

$ 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 dev,devspace 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的开发团队来说,是一个十分理想的设置。

解放开发者!3款工具实现快速K8S开发的更多相关文章

  1. 10款 Mac 经典原型设计开发软件推荐

    在Mac上有大量强大的开发和设计工具,今天和大家推荐10款Mac上的经典原型设计开发工具,原型设计工具是开发者必备的一款工具,无论是网站开发还是移动APP开发,都需要在前期进行严格细致的原型设计,才能 ...

  2. 开发者如何利用工具快速开发出完美APP

    文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...

  3. iOS开发者必备的10款工具

    当前iOS和Android两大移动操作系统“二足鼎立”,几乎覆盖了市面上大部分的智能手机.相比Android,iOS开发适配更简单,且随着各种实用工具和Swift语言的出现,iOS开发门槛地降低,开发 ...

  4. 【Axure RP8.1】一款专业的快速原型设计工具

    Axure RP是一款专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prototyping(快速原型)的缩写.Axure RP是美国Axur ...

  5. Java开发者必备的六款工具

    每一位Java程序员都会有套工具来应对工作上的挑战.多年来,Java程序员使用软件来完成他们的工作.有很多工具对他们是有用的,不过对于初入行的人员来说,寻找合适的工具是困难的,并且是浪费时间的.而今天 ...

  6. 5款强大的Java Web开发工具

    1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...

  7. 15款很棒的 JavaScript 开发工具

    在开发中,借助得力的工具可以事半功倍.今天,我爱互联网向大家分享最新收集的15款非常有用的 javascript 开发工具. TestSwarm: Continious & Distribut ...

  8. Android开发者的四大工具

    1. Basic4Android Basic4Android是Android平台上一个简单而又强大的可视化快速应用开发工具,它可被用来开发和测试数据库通信,甚至可以被用来开发2D的即时游戏! 主要特性 ...

  9. 推荐15款最好的 Twitter Bootstrap 开发工具

    Twitter Bootstrap 自从2011年最初发布到网上后,迅速成为 Web 领域最流行的响应式前端开发框架之一,是网页设计的优秀实践.Twitter Bootstrap 框架包含了众多的预定 ...

随机推荐

  1. Docker数据卷Volume实现文件共享、数据迁移备份(三)

    数据卷volume功能特性 数据卷 是一个可供一个或多个容器使用的特殊目录,实现让容器中的一个目录和宿主机中的一个文件或者目录进行绑定.数据卷 是被设计用来持久化数据的对于数据卷你可以理解为NFS中的 ...

  2. hystrix文档翻译之插件

    插件 可以通过实现插件来改变Hystrix的行为.可以通过HystrixPlugins来注册自定义插件,这些插件会被应用到HystrixCommand,HystrixObservableCommand ...

  3. Mybatis是如何将Mapper接口注册到Spring IoC的

    1. 前言 有时候我们需要自行定义一些注解来标记某些特定功能的类并将它们注入Spring IoC容器.比较有代表性的就是Mybatis的Mapper接口.假如有一个新的需求让你也实现类似的功能你该如何 ...

  4. day55:django:cookie&session

    目录 1.Cookie 1.Cookie前戏 2.Cookie的引入 3.django中操作cookie 2.Session 1.cookie的局限性 2.session技术 3.django操作se ...

  5. phpStudy8.1.0.1配置子域名多网站

    版本 这里phpStudy版本为8.1.0.1: 步骤 假设域名为:domain.com:公网IP地址为:42.33.33.33 首先云解析中配置,添加子域名A记录直接指向你的公网IP: ep.dom ...

  6. python数据结构实现(栈和链栈)

    栈 class Stack: def __init__(self, limit: int 10): self.stack = [] self.limit = limit def __bool__(se ...

  7. Centos-yum软件包安装-yum

    yum 自动安装相关软件依赖,可以同时配置多个yum源,初始启动yum时候首先会缓存资源包到 /var/cache/yum目录下 yum确认 -y yum安装和卸载 install 安装,自动安装软件 ...

  8. Python-如何在一个for循环中迭代多个可迭代对象?

    案例: 某班学生期末考试成绩,语文.数学.英语分别存储在3个列表中,同时迭代三个列表.,计算每个学生的总分(并行) 某年级有4个班,某次英语成绩分别记录在4个列表中,依次迭代每个列表,统计全年级高于9 ...

  9. Java学习day06

    [方法]   [可以在不是main的方法中调用其他方法] [方法调用时的参数问题] [方法调用]    [上面定义了两个class,实际上不推荐] [递归调用]    [方法的返回值]   [retu ...

  10. 01 C语言基本介绍

    C语言特点 容易上手学习 结构化语言 执行效率高 处理的工作和活动偏底层 可以在多种计算机平台上编译(类似Java的跨平台) C语言历史 目前,C 语言是最广泛使用的系统程序设计语言之一 C 语言是最 ...