如何选择基于 Kubernetes 的 PaaS?

作者 | Bram Dingelstad

译者 | 弯月,责编 | 郭芮

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

我们都遇到过这种情况:有人发现了一个bug,然而这不是一般的软件bug,甚至都不是通常意义上的bug,其本质上是人员的问题:盲目跟风的开发者。

一开始时这个bug很小,他只是在劝说团队采用新的技术,或者在项目里采用一个新的模块,但在不知不觉之间,到处都是奇怪的项目和天花乱坠的文档,声称只需要三步就能解决你的业务问题!然而,要想真的解决问题,似乎还需要花费更多的工夫。

我们都遇到过这种情况,而去年的类似情况之一就是一个名为Kubernetes的项目。有些公司和团队已经被Kubernetes淹没,有些公司还没有入坑。我处于中间地带,刚刚开始构建一个超级复杂的系统准备入坑。但在这之前,我想先介绍一下怎样在Kubernetes上部署一个简单的、类PaaS的平台。

寻找完美的类PaaS平台

从何处下手呢?一定有一个完美的方法,对不对?也许吧,我们先做一下搜索:

嗯……显然,k8s并不是PaaS。我想在PaaS之上构建PaaS,而不是把k8s当做PaaS使用。

那接下来该怎么办?先在HackerNews上研究一番吧!最后我找到了一篇不错的文章(https://hn.algolia.com/?dateRange=all&page=0&prefix=false&query=paas%20kubernetes&sort=byPopularity&type=story),还在GitHub上找到了一篇awesome-list(https://github.com/ramitsurana/awesome-kubernetes)。

经过一番仔细的搜索后,我列出了一些候选的项目:

  • Knative

  • OpenFaas Cloud

  • Convox

  • Garden

  • Rio

还有许多其他的替代项目,一些项目我曾经尝试过,一些项目并不是太活跃,一些项目显然是给大型企业用的。

我的情况

我的情况是怎样的?我们需要在一个基本的DigitalOcean droplet上运行一个电商网站,上面只有一个简单的Wordpress。尽管只需要一个简单的bash脚本就可以把网站建起来,还能在本地建一台测试用的服务器,但我想做一个工业标准的平台,而不是简单的脚本。写脚本很有趣,自己做部署栈也很方便,但遵循标准、不需要自己考虑工具的事情,才是我真正想要的。

我的需求

我想先在一台k3s的垃圾服务器上测试一下这些项目。k3s有一个反向代理,指向DigitalOcean上的droplet,而不是直接在互联网上公开。也就是说,这些项目必须支持本地部署(on-premise deployment)。

另一个需求是,该项目必须完全从k8s中抽象出来。也就是说,我不想处理大量的yaml文件也不想一直部署helm charts,我想从我自己的应用程序的方面来思考,只需要通过命令行就可以完成一切工作。

用一句话总结就是:我希望只要按一个按钮就能完成一切工作。

我们的应用程序有许多可动的部分,一部分仅是简单的脚本,一部分是大型应用程序,给游戏客户端提供通讯功能。不管是什么应用程序,我们的平台需要支持大量不同类型的应用程序。通常这意味着需要支持通过Dockerfile进行部署。

我们打算运行的绝大多数应用程序都是有状态的。例如,Wordpress需要一个地方来保存图片。许多应用程序内部的图片也需要存储。因此,应用程序需要某种形式的持久存储。

许多项目都很好,但好项目和伟大项目的区别就是社区和行业的接受度。使用一个在GitHub上只有三个用户的项目,跟自己写bash脚本没有区别。万一你搞坏了什么东西,或者需要什么帮助,一个活跃的社区将是你的依靠。

项目一览

Knative

Knative最初给我的体验棒极了!看了Knative之后,我发现我可以运行一个跟Google自家用的PaaS一样的平台。考虑到k8s就是Google做的,那么Knative项目肯定是完美的!不过安装要比想像的难了一点。似乎没有太简单的方法来安装,而无法简单地尝试,在未来可能是一个风险。也许只有我这样想,也许我应该更深入地研究一下Knative,不过由于这点原因,我把目光转向了下一个候选。

OpenFaaS Cloud

安装非常容易!很快我就能运行这个平台了。它能满足我的大部分要求,但似乎它更侧重于实现OpenFaaS,本身并不是一个完整的PaaS。我不太明白如何利用这个平台解决我们的问题。如果你使用的是耦合性更小的项目,或者有许多小功能,那OpenFaaS绝对是最佳选择!也许以后我可以看看看,但现在我已经决定看看下一个候选。

Convox

Convox看上去非常好!它是由几名前Heroku工程师在k8s的基础上构建的。我在DigitalOpen的k8s集群上迅速部署了一下。开发者的体验非常棒!但是,似乎该项目并不支持本地部署。而且,该项目的社区似乎并不大,只有一些早期的使用者。该项目不太出名,所以我还是选择了其他项目。

Garden

这个项目非常酷。我喜欢它,是因为它由是一个独立的小公司开发的非常有创意的解决方案。设置非常简单,他们的方法论也是由k8s得出的非常好的抽象,但该项目还可以在某种形式上允许你用传统的方式控制k8s,比如yaml文件等。我非常喜欢这个实现,而且它工作得很好!尽管我注意到命令行界面有些粗糙,但这毕竟是小问题,而且最终可能会被解决。

不过我还是决定看看下一个(也是最后一个)项目。

Rio

这个项目能满足我的所有需求。易用的命令行界面,不需要与k8s交互,使用Dockerfile进行部署。还有一长串其他平台未能实现或实现得不太好的功能。Rio从Rancher中派生而来,似乎从Rancher活跃的社区中得到了许多支持。

在我的垃圾服务器上设置Rio

我迅速地设置好了通向我的k3s实例的反向代理,然后开始设置Rio。

根据他们的GitHub上的快速上手指南,设置非常简单:

# Setting up the reverse proxy to k3s
ssh -nNTL 6443:localhost:6443 droplet &# Installing Rio
curl -sfL https://get.rio.io | sh -# Running the example project
rio run https://github.com/rancher/rio-demo

这就好了!我迫不及待地想看看我们已有的基础设施是否能够同样容易地迁移到这个平台上。

Rio的默认安装允许你使用他们的rDNS服务(位于on-rio.io),这一点非常酷,但我放在反向代理后面的垃圾服务器并不需要。我也没用过Linkerd,所以暂时先禁用了该功能。使用  rio install --disable-feature rdns,letsencrypt,linkerd 语句重新安装,就得到了我需要的结果。

下一步,使用kubectl安装自定义的ClusterDomain,这样我就可以使用on-rio.io之外的域名了。我最终安装了dnsmasq,设置了一个假的域名app.rio供应用程序使用。通过它可以很容易地在垃圾服务器上测试应用程序的连通性。

apiVersion: admin.rio.cattle.io/v1
kind: ClusterDomain
metadata:name: app.rio
spec:httpPort: 80

我还要想个办法从我的DigitalOcean droplot上连接到这个集群。我的方法是从垃圾服务器的80端口反向代理到droplet的8080端口上。Rio采用80端口安装Gloo的gateway-proxy。

最后一步,设置nginx配置指向Gloo的网关:

server {listen 80;server_name your.domain.name;location / {proxy_http_version 1.1;proxy_set_header Host $host;proxy_pass http://localhost:8080;}
}

此处的两个重点是proxy_http_version 1.1和proxy_set_header Host。

proxy_http_version非常重要,因为基于Envoy的Gloo并不支持在http__version 1.0上进行网管服务,只能使用1.1。否则会返回426 Upgrade Required错误。

Host头很重要,因为需要实现PublicDomain。添加PublicDomain时的重点是要匹配server_name或代理的Host头,否则Gloo无法识别要连接哪个服务。

rio domain register your.domain.name rio-demo

以上就是我探索基于Kubernetes的最合适的PaaS之旅。

感谢阅读!

原文:https://bram.dingelstad.xyz/blog/finding-the-right-paas-for-k8s/

本文为 CSDN 翻译,转载请注明来源出处。


推荐阅读

  • 一文带你认识keepalived,再带你通关LVS+Keepalived!

  • 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?

  • “谷歌杀手”发明者,科学天才 Wolfram

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

  • 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践

  • 5分钟!就能学会以太坊 JSON API 基础知识!

    真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TortoiseGit 推送本地仓库变动文件至远程仓库_入门试炼_06

文章目录1. 将本地仓库变动文件提交远程1. 将本地仓库变动文件提交远程 或者

JavaScript-获得和设置表单的值

文本框 text下拉框 单选框 radio多选框 checkbox隐藏域 hidden密码框 password… 表单的目的&#xff1a;提交信息 获得要提交的信息 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title…

Cloud Toolkit 部署应用到 EDAS Kubernetes 集群

1、在 IntelliJ IDEA 上单击 Cloud Toolkit 的图标&#xff0c;在下拉列表中选择 Deploy to EDAS -> EDAS for Kubernetes Application 2、在 Deploy to EDAS 对话框配置应用部署参数。 说明&#xff1a;如果您还没有在 EDAS 上创建应用&#xff0c;在对话框右上角单击 Cr…

架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦

来源 | 编程新说责编 | Carol头图 | CSDN 下载自视觉中国切身感受在这个世界上&#xff0c;最难看懂的文档&#xff0c;永远是同事写的需求文档。最难看懂的代码&#xff0c;永远是同事写的业务代码。我很纳闷&#xff0c;像Spring这样的官方英文文档&#xff0c;我看起来也不太…

20万天猫智慧门店背后的商业思考和技术重构

阿里妹导读&#xff1a;2016年&#xff0c;「新零售」被首次提出&#xff0c;在这些年里&#xff0c;无论是互联网公司、零售企业&#xff0c;还是像酒店、机场等这些服务型业态&#xff0c;都在积极探索新的零售模式。对于天猫这样一个服务了全球诸多品牌的平台来说&#xff0…

JavaScript-表单提交验证及前端密码MD5加密

表单提交方式一&#xff0c;按钮onclick绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- MD5 工具类 --><script src"https://cdn.bootcss.com/blueimp-…

Knative Eventing 之 Sequence 介绍

在处理数据时&#xff0c;往往会涉及到一个数据需要进行多次加工&#xff0c;这时候我们一般是通过Pipeline的方式进行处理。那么在Knative Eventing中是否也能支持对一个事件进行分步骤多次处理&#xff1f; 这个还真有。从 0.7 版本开始&#xff0c;Knative Eventing中提供了…

Linux基金会亚太区与开源中国达成战略合作 共同推动中国开源人才培养

北京时间2020年4月24日&#xff0c;Linux基金会亚太区&#xff08;LFAPAC&#xff09;与开源中国战略发布会暨LF开源软件大学联合启动仪式圆满落幕。发布会获得了多家业内知名企业的大力支持&#xff0c;邀请了50余家国内外新闻媒体参与直播报道。 会上&#xff0c;Linux基金会…

TortoiseGit 基础5部曲

文章目录1. 新增/修改文件2. 将工作区文件提交到本地仓库3. 更新最新版本项目到本地4. 将本地仓库中变动文件记录推送远程仓库5.登陆远程验证1. 新增/修改文件 新建VersionOfTheContrast.java文件&#xff0c;添加内容如下 2. 将工作区文件提交到本地仓库 3. 更新最新版本项…

即将发版!Apache Flink 1.9 版本有哪些新特性?

2019阿里云峰会上海开发者大会于7月24日盛大开幕&#xff0c;本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货&#xff0c;共同探讨前沿科技趋势。本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特&#xff08;鲁尼…

TortoiseGit 单文件版本对比_入门试炼_09

文章目录一、单文件版本数据模拟二、单文件版本对比2.1. 查询单文件提交记录2.2. 单文件版本之间差异对比案例场景&#xff1a; 依次提交5次&#xff0c;推送远程&#xff0c;同一个文件5个版本之间的相互对比 一、单文件版本数据模拟 (企业内部) TortoiseGit 基础5方针_入门试…

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

作者 | 张秋剑&#xff0c;天云数据上海副总经理责编 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近日&#xff0c;有传闻 PostgreSQL 会发布 13 版本&#xff0c;这是去年 9 月发布 12 版本之后&#xff0c;PG 社区紧锣密鼓…

那些年,我们见过的Java服务端乱象

导读 查尔斯狄更斯在《双城记》中写道&#xff1a;“这是一个最好的时代&#xff0c;也是一个最坏的时代。”移动互联网的快速发展&#xff0c;出现了许多新机遇&#xff0c;很多创业者伺机而动&#xff1b;随着行业竞争加剧&#xff0c;互联网红利逐渐消失&#xff0c;很多创…

看!闲鱼又开源了一个 Flutter 开发利器

阿里妹导读&#xff1a;随着 Flutter 这一框架的快速发展&#xff0c;有越来越多的业务开始使用 Flutter 来重构或新建其产品。但在我们的实践过程中发现&#xff0c;一方面 Flutter 开发效率高&#xff0c;性能优异&#xff0c;跨平台表现好&#xff0c;另一方面 Flutter 也面…

这些常见的分布式存储系统,你是否都了解?

来源 | 清平の乐来源 | CSDN博客&#xff0c;责编 | Carol头图 | CSDN 下载自视觉中国一、数据存储类型一般情况下&#xff0c;我们将存储分成了4种类型&#xff0c;基于本机的DAS和网络的NAS存储、SAN存储、对象存储。对象存储是SAN存储和NAS存储结合后的产物&#xff0c;汲取…

给软件工程师、数据科学家和数据工程师的面试指南:该做与不该做

亚马逊这样的公司有 14 项领导原则 。他们不想仅仅雇佣一个数据科学家或软件工程师。对于许多只进行一次或两次面试的面试者来说&#xff0c;这可能没有那么明显&#xff0c;因为你太专注于回答面试的技术部分。但是&#xff0c;在你进行技术面试时&#xff0c;我们希望提供一些…

限制在同一台电脑上只允许有一个用户登录

文章目录1. html 部分2. js部分3. 拦截器部分4. 认证授权部分5. 控制层部分6. 工具类实现流程: 1.从reqest域中获取现在登陆的新sessionId 2.根据登陆的用户名从reqest域中获取已经登陆的老sessionId 3.判断老sessionId是否存在和新旧sessionId是否是否一致 如果一直返回当前用…

FM算法介绍

概述 FM (Factorization Machine) 算法可进行回归和二分类预测&#xff0c;它的特点是考虑了特征之间的相互作用&#xff0c;是一种非线性模型&#xff0c;目前FM算法是推荐领域被验证的效果较好的推荐方案之一&#xff0c;在诸多电商、广告、直播厂商的推荐领域有广泛应用。 …

最新!Vicor 270V-28V DCM5614以96%效率提供1300W功率

近日Vicor 宣布推出隔离式稳压 270V-28V DC-DC 转换器 DCM5614&#xff0c;其采用 5.6 x 1.4 0.3 英寸 VIA™ 封装&#xff0c;额定输出功率为 1300W。据了解DCM5614 重量仅 178g&#xff0c;提供无与伦比的功率密度可达451W/in3 &#xff0c;支持功率密度、重量和效率都至关重…