【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

评论

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

棒极了!可以让你Java程序快上180%以上的阿里性能优化笔记

Java架构追梦

Java 阿里巴巴 架构 面试 性能优化

还在使用NoSQL数据库?为IoT选择TSDB

数据库 大数据 时序数据库 tsdb 数据智能

揭秘Hologres如何支持超高QPS在线服务(点查)场景

阿里云大数据AI技术

解决智慧城市发展困扰:Web3D智慧环卫GIS系统

一只数据鲸鱼

GIS 数据可视化 智慧城市 智慧环卫

【等保知识】等保测评机构申请条件,所需资料以及流程

行云管家

等保 堡垒机 行云管家 等保测评

抖音快手短视频获客软件开发系统

丰富 TF Serving 生态,爱奇艺开源灵活高性能的推理系统 XGBoost Serving

爱奇艺技术产品团队

开源 优化 tensorflow serving 推理

模块三作业

燕燕 yen yen

架构训练营

记一次真实的JVM性能调优过程

北游学Java

Java JVM 性能调优

kafka日志存储以及清理机制

泽睿

kafak

存储大师班 | NFS 的诞生与成长

QingStor分布式存储

分布式存储 分布式文件存储 NAS NFS

Ipfs国家认可吗?国家对ipfs区块链是什么政策?

区块链 分布式存储 IPFS fil

Chaos Mesh 助力 Apache APISIX 提升稳定性

API7.ai 技术团队

lua 网关 APISIX Chaos Mesh

Android Flutter 多实例实践

网易云信

flutter 架构

区块链不是一个风口,而是一个时代

CECBC

多鲸资本发布《2021教育实时音视频行业报告》:拍乐云以质取胜做行业引领者

拍乐云Pano

细节分析Linux中五种IO模型和三种实现方式

Linux服务器开发

网络编程 epoll Linux服务器开发 Linux后台开发 IO模型

从零开始学习3D可视化之数据对接(3)

ThingJS数字孪生引擎

大前端 数据 物联网 可视化 数字孪生

6月热点:BML全新升级WebIDE编程环境,度目智能视频分析盒G1上新

百度大脑

人工智能 BML

可以同时管理公有云和私有云资源的软件哪个好?

行云管家

公有云 私有云 云管平台 云资源

《人这一辈子,都在为认知闭环买单》读后感---刘润

Changing Lin

技术解码 | 腾讯云SRT弱网优化

腾讯云音视频

百度AI寻人获评《新周刊》2021年度公益项目

百度大脑

人工智能 寻人

启动、内存、卡顿三大分析,用户体验就用它?

App

数字人民币如何普惠百姓?建行发布新金融数字便民计划

CECBC

从 Web 图标演进历史看最佳实践

百度Geek说

大前端

又一数据库高危漏洞爆出,数据安全如何有效保障?

华为云开发者联盟

redis 漏洞 GaussDB(for Redis) 开源Redis 数据库安全

Jar 组件自动化风险监测和升级实践

Qunar技术沙龙

安全 风险管理

网络研讨会|为什么在开发流程中应用静态代码分析工具?

鉴释

在线研讨会 静态代码分析

实战-使用 SSM 工具创建可动态扩容的存储池

学神来啦

Linux 运维 ssm Linux教程

上架一夜遭全网封杀!阿里大牛熬夜半年手码的Java面试指南太强了

白亦杨

Java 编程 程序员 架构师

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