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

2020 年 10 月 17 日

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

评论

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

一个简单的物联网设备接入网关高可用方案

凸出

Java nginx Netty

多线程为了同个资源打起架来了,该如何让他们安定?

小林coding

并发编程 多线程 操作系统 计算机基础

智能标注原理揭秘,一文读懂人工智能如何解决标注难题

百度大脑

人工智能 深度学习 百度 AI 百度大脑

【API进阶之路】因为不会创建云服务器,我被实习生摆了一道

华为云开发者社区

虚拟机 服务器 API 华为云 API接口管理

阿里云高级技术专家李晓成:面向5G的云网一体及云原生应用实践

巨侠说

字节跳动李本超:一年成为 Committer,我与 Flink 社区的故事

Apache Flink

flink

[POJ 1001] Exponentiation JAVA解题报告

一直AC一直爽

算法 刷题 POJ ACM

你的个人博客网站该上线了!

北漂码农有话说

三分钟热度的干劲

落曦

JAVA算法

Bruce Duan

排序算法 Java算法

又被逼着优化代码,这次我干掉了出入参 Log日志

程序员内点事

Java

密码学的随机性与区块链随机数

CECBC区块链专委会

LeetCode 题解:122. 买卖股票的最佳时机 II,JavaScript,一遍循环,详细注释

Lee Chen

前端进阶训练营

kubernetes 集群升级,备份,故障恢复(kubeadm)

小小文

Kubernetes 群集安装 故障 kubeadm

[POJ 1000] A+B Problem 经典水题 JAVA解题报告

一直AC一直爽

POJ OJ ACM 水题

面向进化的软件架构

星际行者

软件架构 进化

第七周作业

andy

极客大学

架构师训练营」第 7 周作业

edd

极客大学架构师训练营

程序员开启社交和打造影响力的最佳方式

非著名程序员

程序员 提升认知 写作 程序员成长 社交

【源码系列】Spring Cloud Gateway

Alex🐒

源码 SpringCloud Gateway

BIGO | Likee深度推荐模型的特征工程优化

DT极客

Fastjson到了说再见的时候了

YourBatman

Jackson Fastjson JSON库

饿了么4年 + 阿里2年:研发路上的一些总结与思考

程序员生活志

阿里 饿了么 经验总结

天府之国迎来数字经济发展高地新契机

CECBC区块链专委会

数字货币 区块链技术 应用落地 人才政策产业

常见的emit实现AOP demo

八苦-瞿昙

随笔 随笔杂谈 aop

提速数字化!区块链加速应用落地,新制造与服务不断推出

CECBC区块链专委会

一千万个身份证号在java中需要多少内存

华宇法律科技

string heap memory Java Virtual Machine

存储性能加速引擎之预读

焱融科技

Linux sds 焱融科技 分布式存储 预读

【小白学YOLO】一文带你学YOLOv1 Testing

华为云开发者社区

人工智能 算法 图像识别 什么是多线程

Python好找工作吗?

cdhqyj

数据分析师 ”痛“ 谁能了解

松子(李博源)

数据分析 数据产品经理 数据产品 数据模型

订阅 每周精要 查看样刊

你将获得:资深编辑编译的全球 IT 要闻,InfoQ 出品的课程和线下活动报名通道,一线技术专家撰写的实操技术案例

微信扫码关注,即刻订阅

Milvus Community Conf 2020

Milvus Community Conf 2020

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