写点什么

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

  • 2020-10-17
  • 本文字数:3961 字

    阅读完需:约 13 分钟

解放开发者!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


$ 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(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开发


2020-10-17 10:003960

评论

发布
暂无评论
发现更多内容

低代码是开发的未来,还是只能解决边角问题的鸡肋?

引迈信息

前端 后端 低代码 JNPF

人工智能训练数据集:基础与发展

来自四九城儿

KubeVela:一场向应用交付标准的“冲锋”

RRLL

阿里云 数据湖 云原生 KubeVela 应用交付

【Python实战】Python采集度贴吧排行榜

BROKEN

三周年连更

人脸识别:城市公共交通

百度开发者中心

人工智能 人脸识别

c++单例模式的所有面经

linux大本营

设计模式 单例模式 C++

eBPF的发展演进---从石器时代到成为神(三)

统信软件

操作系统 Linux内核

对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda

亚马逊云科技 (Amazon Web Services)

百度与用友网络签署战略合作

百度开发者中心

智能制造 文心一言

appuploader 常规使用登录方法

雪奈椰子

YashanDB V22.2重磅发布!七大亮点带你了解新特性

YashanDB

数据库

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

阿里巴巴云原生

阿里云 云原生 生态合作

读《分布式商业》有感

后台技术汇

分布式 三周年连更

5.10版本linux内核的使用slub的kmem_cache_init函数解析

linux大本营

内存管理 Linux内核 slub slab

从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的

Zilliz

非结构化数据 Milvus 向量数据库

《雄安新区2022年大数据研究报告》发布

百度开发者中心

智慧城市

当生成式AI照进医疗,医患关系将何去何从?

白洞计划

医疗

云BI产品瓴羊Quick BI,为企业数字化转型保驾护航

巷子

数说热点|米哈游新作《崩坏:星穹铁道》今日公测,能否再现原神奇迹?

MobTech袤博科技

什么是文件传输,介绍文件传输的发展进程

镭速

ThingsBoard 前端项目内置部件开发

echeverra

thingsboard

有奖征文丨【玩转Cloud Studio】第二季来啦!

CODING DevOps

Cloud Studio 云端IDE 在线编程 有奖征文 活动推荐

c++17使用多线程编程的时候在编译时要怎么处理

linux大本营

多线程 C++

电子签赛道驶向深水区,法大大以数智化引领创新

ToB行业头条

极客时间「大师课·深度剖析 RocketMQ5.0」上线啦,欢迎免费领取!

Apache RocketMQ

云原生 消息队列

linux设置虚拟IP

linux大本营

Linux 网络 IP地址

使用tc+iptables对指定的socket进行限速

linux大本营

TCP socket 网络 iptables

spdk里是怎么运行nvmf-tgt的

linux大本营

spdk

用c语言写一个目录遍历程序

linux大本营

C语言 目录遍历

容量成本性能全都要有, Redis 容量版 PegaDB 设计与实践

百度开发者中心

云数据库 百度智能云

如何使用 SCP 和 Rsync 在 Linux 中传输文件

wljslmz

Linux 三周年连更

解放开发者!3款工具实现快速K8S开发_软件工程_Rancher_InfoQ精选文章