解放开发者!3款工具实现快速K8S开发
本文转自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开发的更多相关文章
- 10款 Mac 经典原型设计开发软件推荐
在Mac上有大量强大的开发和设计工具,今天和大家推荐10款Mac上的经典原型设计开发工具,原型设计工具是开发者必备的一款工具,无论是网站开发还是移动APP开发,都需要在前期进行严格细致的原型设计,才能 ...
- 开发者如何利用工具快速开发出完美APP
文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...
- iOS开发者必备的10款工具
当前iOS和Android两大移动操作系统“二足鼎立”,几乎覆盖了市面上大部分的智能手机.相比Android,iOS开发适配更简单,且随着各种实用工具和Swift语言的出现,iOS开发门槛地降低,开发 ...
- 【Axure RP8.1】一款专业的快速原型设计工具
Axure RP是一款专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prototyping(快速原型)的缩写.Axure RP是美国Axur ...
- Java开发者必备的六款工具
每一位Java程序员都会有套工具来应对工作上的挑战.多年来,Java程序员使用软件来完成他们的工作.有很多工具对他们是有用的,不过对于初入行的人员来说,寻找合适的工具是困难的,并且是浪费时间的.而今天 ...
- 5款强大的Java Web开发工具
1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...
- 15款很棒的 JavaScript 开发工具
在开发中,借助得力的工具可以事半功倍.今天,我爱互联网向大家分享最新收集的15款非常有用的 javascript 开发工具. TestSwarm: Continious & Distribut ...
- Android开发者的四大工具
1. Basic4Android Basic4Android是Android平台上一个简单而又强大的可视化快速应用开发工具,它可被用来开发和测试数据库通信,甚至可以被用来开发2D的即时游戏! 主要特性 ...
- 推荐15款最好的 Twitter Bootstrap 开发工具
Twitter Bootstrap 自从2011年最初发布到网上后,迅速成为 Web 领域最流行的响应式前端开发框架之一,是网页设计的优秀实践.Twitter Bootstrap 框架包含了众多的预定 ...
随机推荐
- SpringBoot-03-配置之yaml语法学习
3. SpringBoot配置 3.1 yaml语法学习 配置文件 Springboot使用一个全局的配置文件,配置文件名称固定 spplication.properties 语法结构:key=val ...
- MIT 6.S081 xv6调试不完全指北
前言 今晚在实验室摸鱼做6.S081的Lab3 Allocator,并立下flag,改掉一个bug就拍死一只在身边飞的蚊子.在击杀8只蚊子拿到Legendary后仍然没能通过usertest,人已原地 ...
- PuTTY 连接 linux 服务器执行 make menuconfig 乱码问题解决
PuTTY 连接 linux 服务器执行 make menuconfig 时可能出现乱码,如下图所示: 有两个方法解决这个问题: 方法一: 修改 PuTTY 配置如下图所示: 方法二: 在 -/.ba ...
- Istio 运维实战系列(3):让人头大的『无头服务』-下
本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 失败的 Eur ...
- Linux软件管理常用命令和选项
rpm /var/lib/rpm:数据库目录 -ivh x:安装软件包x -Uvh x:升级或安装软件包x,如果没有安装x的旧版本,则安装x,否则删除x的旧版本后再安装x. -Fvh x:升级软件包x ...
- js undefined和null的判断
function isUndef(value ){ return value === undefined || value === null; }
- Windows下安装VScode,并使用,以及中文配置
转载:https://blog.csdn.net/x15011238662/article/details/85094006 首先明确一点,VScode是开发Go应用的基础编辑器,是Microsoft ...
- Java安全之Commons Collections1分析(二)
Java安全之Commons Collections1分析(二) 0x00 前言 续上篇文,继续调试cc链.在上篇文章调试的cc链其实并不是一个完整的链.只是使用了几个方法的的互相调用弹出一个计算器. ...
- Django ORM 引发的数据库 N+1 性能问题
背景描述 最近在使用 Django 时,发现当调用 api 后,在数据库同一个进程下的事务中,出现了大量的数据库查询语句.调查后发现,是由于 Django ORM 的机制所引起. Django Obj ...
- httpd之ab压力测试
安装软件 yum install -y httpd 参数说明:用法Usage: ab [options] [http[s]://]hostname[:port]/path用法:ab [选项] 地址 选 ...