本文转自Rancher Labsnode
关注咱们,便可第一时间获取K8S教程哦docker
简 介
时至今日,Kubernetes正在变得愈来愈重要,不只仅是运维须要Kubernetes,在开发的世界里Kubernetes也不可或缺。所以可以熟练掌握Kubernetes知识会备受追捧。然而问题是,开发人员是否须要直接上手操做Kubernetes,他们是否必须彻底了解Kubernetes。
json
规避这一问题的常见方法是经过提供一个平台或CI/CD流水线,将Kubernetes的复杂性从开发人员身上抽象出来,使开发人员更容易在Kubernetes内测试应用程序,而无需直接访问Kubernetes。
安全
然而,容许开发人员直接访问Kubernetes,让他们直接在Kubernetes内部开发一些应用程序每每是有意义的,由于这样能够在一个很是接近生产的环境中工做。
服务器
这就出现了一个问题,即如何让开发人员使用Kubernetes工做,同时又不因其复杂性而使他们不堪重负。这个问题的答案多是须要使用为Kubernetes而准备的开发者工具,例如DevSpace。在这篇文章中,咱们将探讨开发人员如何使用DevSpace和Rancher来简化Kubernetes开发。
网络
DevSpace: 使用Rancher轻松开发
DevSpace是一款面向Kubernetes的客户端、开源的开发者工具。它能够:app
-
直接在Kubernetes内部构建、测试和调试应用程序运维
-
经过更新正在运行的容器而不须要重建镜像或重启容器来进行热重载开发ide
-
在团队内部以及在开发、暂存和生产中统一部署工做流程工具
- 自动完成镜像构建和部署的重复性任务
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的开发团队来讲,是一个十分理想的设置。