在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!

作者 | Bram Dingelstad

译者 | 弯月 责编 |徐威龙

封图| CSDN下载于视觉中国

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

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

我们都遇到过这种情况,而去年的类似情况之一就是一个名为Kubernetes的项目。有些公司和团队已经被Kubernetes淹没,有些公司还没有入坑。我处于中间地带,刚刚开始构建一个超级复杂的系统准备入坑。

但在这之前,我想先介绍一下怎样在Kubernetes上部署一个简单的、类PaaS的平台。

寻找完美的类PaaS平台

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

DuckDuckGo搜索不会显示很多答案

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

那接下来该怎么办?先在HackerNews上研究一番吧!最后我找到了两篇不错的文章

https://hn.algolia.com/?dateRange=all&page=0&prefix=false&query=paas%20kubernetes&sort=byPopularity&type=story

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脚本没有区别。万一你搞坏了什么东西,或者需要什么帮助,一个活跃的社区将是你的依靠。

该选择哪个项目来帮助我实现目标?

1、Knative

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

2、OpenFaaS Cloud

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

3、Convox 

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

4、Garden

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

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

5、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/

 

同时,欢迎所有开发者扫描下方二维码填写《开发者与AI大调研》,只需2分钟,便可收获价值299元的「AI开发者万人大会」在线直播门票!

推荐阅读:从未如此简单:10分钟带你逆袭Kafka!大麦云原生边缘计算探索,让观众剧院看戏也能实现个性化华为集齐 AI 龙珠,“召唤神龙”为期不远互联网之父确诊新冠,一代传奇:任谷歌副总裁、NASA 访问科学家京东商城背后的AI技术能力揭秘 - 基于关键词自动生成摘要韩国新法案提出禁止加密资产抵押借贷,DeFi平台或遭禁真香,朕在看了!

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

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

相关文章

对话阿里敏捷教练 | 成功辅导过淘宝、闲鱼,他都是如何帮助团队

为了让大家对敏捷有更多的了解,小编特意采访了阿里巴巴高级技术专家、敏捷教练张燎原。他是如何看待敏捷、如何帮助团队落地敏捷的,作为研发团队的一员,我们可以从哪些地方着手敏捷,以下是对他的采访。 嘉宾简介:张燎原…

用Flink取代Spark Streaming!知乎实时数仓架构演进

作者 | 知乎数据工程团队 “数据智能” (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务。从智能商业的角度来讲,数据的结果代表了用户的反…

Java-接口的定义与实现

// 接口都需要有实现类 public interface UserService {// 常量 默认是 public static final,一般不会再接口定义常量int AGE 99;// 接口中的所有定义的方法其实都是抽象的 public abstract // public abstract void run();void add(String name);void delete(S…

4 年 46 个版本,一文读懂 Spring Cloud 发展历史

作者 | 方剑责编 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本,到目前 2020 年 3 月发布 Hoxton.SR3 版本,已经历经了 4 年时间。这 4 年时间里…

让开发部署提速 8 倍,我参与贡献这款 IDE 插件的全过程

如何像参与开源那样,去参与一款 IDE 插件的设计? 作为一款 IDE 插件的使用者,我是否能决定下一个版本的功能? 自从产品经理银时小伙和他的开发小哥们在去年12月发布 Cloud Toolkit(一款 IDE 插件)以来&am…

这难道是原子、比特and供应链的新内涵?京东如是说……

本文为CSDN博主「L-JingJing」的原创文章 原文链接:https://blog.csdn.net/sch881226/article/details/105301572 从遍览采茶风光到感受入口醇香,如今我们真的可以做到高效追溯每一片茶叶的“记忆”了吗?答案显然是肯定的,据了解…

干货!看云原生时代阿里云的四个“最”

云原生已经成为 IT 领域最热的词之一。到底有多火,大家感受一下: 2015 年在旧金山召开的首届 KubeCon 只有 200 余参会者,而今年第二次在中国举办的KubeCon迎来了3000现场观众,遍布全球的线上关注开者则更是不计其数。Gartner最近…

深入解读 Knative Eventing 0.7 版本新特性

前言 Knative Eventing 0.7 版本已经于 6 月 26 号正式发布。本次发布主要围绕重构 Channel 特性展开。本篇文章重点解读了这些特性,并且以此展望一下 Knative Eventing 后续版本的发展。 新特性 重构 Channel 作为 Eventing v0.7 版本最大的特性, 重…

Java-异常01 Error和Exception

异常 捕获异常 https://www.bilibili.com/video/BV12J41137hu?p77&spm_id_frompageDriver

OpenKruise - 云原生应用自动化引擎正式开源

在本次 KubeCon 上,阿里云将为全球用户分享阿里巴巴超大规模云原生落地实践、云原生前沿技术与应用包括OpenKruise 开源项目、开放云原生应用中心(Cloud Native App Hub),同时将重磅发布边缘容器、云原生应用管理与交付体系等产品…

过去15年间,到底是什么真正推动了云计算的革命?

来源 | Ohad Maislish译者 | 孙薇 责编 | 徐威龙封图| CSDN下载于视觉中国虚拟机的兴起我还记得,我第一次听说虚拟机是在2002年,我们需要一种能够在Windows OS上运行Linux的方法。当头一次看到在VMware Workstation上运行的虚拟机时,我非常震…

支付宝的商业与技术创新双轮驱动 创造数字时代普惠金融“奇迹”

2019年6月28日,在中国国际软件博览会上,蚂蚁金服金融科技产品技术总监杨冰发表主题演讲,分享了蚂蚁金服在过去的十多年里,是如何通过商业创新与技术创新的双轮驱动,创造出数字时代的普惠金融“奇迹”。 蚂蚁金服金融科…

Java-异常02 捕获和抛出异常

ArithmeticException 算术异常 public class Test {public static void main(String[] args) {int a 1;int b 0;try { // try监控区域System.out.println(a/b);} catch (ArithmeticException e){System.out.println("程序出现异常,变量B不能为0");} fi…

基于Tablestore Tunnel的数据复制实战

前言 数据复制主要指通过互联的网络在多台机器上保存相同数据的副本,通过数据复制方案,人们通常希望达到以下目的:1)使数据在地理位置上更接近用户,进而降低访问延迟;2)当部分组件出现故障时&a…

今天,我要教妹子学会Spring:Aware、异步编程、计划任务

来源 | 沉默王二教妹子学 Spring,没见过这么放肆的标题吧?作者我有一个漂亮如花的妹妹(见封面图,别问我怎么又变了?还不能一天做个梦了?),她叫什么呢?我想聪明的读者能猜…

Java-异常03 自定义异常

// 自定义的异常类 public class MyException extends Exception{// 传递数字 > 10private int detail;public MyException(int a) {this.detail a;}// toString: 异常的打印信息Overridepublic String toString() {return "MyException{" detail };} }public …

SLS机器学习最佳实战:批量时序异常检测

0.文章系列链接 SLS机器学习介绍(01):时序统计建模SLS机器学习介绍(02):时序聚类建模SLS机器学习介绍(03):时序异常检测建模SLS机器学习介绍(04)…

一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?

来源 | 程序员乔戈里 封图| CSDN下载于视觉中国有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms),按照下文的方…

浅析基于 Serverless 的前后端一体化框架

概述 Serverless 是一种“无服务器架构”模式,它无需关心程序运行环境、资源及数量,只需要将精力聚焦到业务逻辑上的技术。基于 Serverless 开发 web 应用,架构师总是试图把传统的解决方案移植到 Serverless 上,虽然可以做到既拥…

Java-总结

常用类 集合框架 IO流 多线程 网络编程 GUI 注解与反射 https://www.bilibili.com/video/BV12J41137hu?p80