作者 | 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平台或遭禁真香,朕在看了!

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

  1. 如何在Linux上部署一个简单的Django项目

    参考文章:https://blog.csdn.net/a249900679/article/details/51527200 1.首先,在根目录底下建一个目录,存放python3.6.3版本,linu ...

  2. aws eks_在带aws eks的kubernetes上部署带舵的破折号

    aws eks Today we are going to be talking about Deploying a Dash App on Kubernetes with a Helm Chart ...

  3. 在Kubernetes上部署和管理PostgreSQL

    目录 有哪些选项可用于部署PostgreSQL? 选项 01 - 从头开始​​创建部署配置 选项 02 - 使用helm chart 什么是Helm? Helm架构 Helm由三个主要概念组成 如何安 ...

  4. 如何在Kubernetes 上部署安装PHP + Nginx 多容器应用

    引言 Kubernetes是一个开源的容器编排系统.它允许你创建.更新和扩展容器,而无需担心停机. 要运行一个PHP应用程序,Nginx充当PHP-FPM的代理.将此设置打包到单个容器中可能是一个繁琐 ...

  5. 小程序动画从头开始_如何从头开始在Kubernetes上部署弹性Node.js应用程序

    小程序动画从头开始 视频 (Video) 描述 (Description) You may have heard the buzz around Kubernetes and noticed that ...

  6. 在一行上添加一个简单的if-then-else语句[重复]

    本文翻译自:Putting a simple if-then-else statement on one line [duplicate] Possible Duplicate: 可能重复: Pyth ...

  7. 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练

    文章目录 普通单卡训练-GPU 普通单卡训练-CPU 分布式训练-GPU 分布式训练-CPU 租GPU服务器相关 以下代码示例基于:在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练. 普 ...

  8. 在AWS上部署一个网站

    在AWS上部署一个网站 使用Elastic Beanstalk,用户就不必操心自己的操作系统或虚拟服务器,因为它在它们之上加了一个抽象层. 文章目录 在AWS上部署一个网站 前言 一.Elastic ...

  9. 一文教你如何在生产环境中在Kubernetes上部署Jaeger

    作者 |  Dotan Horovit 翻译 | 火火酱~ 责编 | 晋兆雨 出品 | CSDN云计算 日志.指标和跟踪是"可观察性"领域的三大支柱.最近几个月,随着OpenTel ...

最新文章

  1. (1)定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move() 这两个方法分别表示武器的攻击方式和移动方式。 (2)定义3个类:Tank,Fl
  2. Java进击C#——语法之多线程
  3. data vue 全部重新渲染_vue将data恢复到初始状态 重新渲染组件实例
  4. 修改chrome中HTML元素,自由更改网页中的任何内容:Hack this page
  5. 上司:我们为什么要使用企业云盘?
  6. JDK动态代理为什么必须要基于接口
  7. 小程序学习笔记(1)-基本了解
  8. 摩尔定律终结后 科技也许会向这3个方向前进
  9. 数据库课程设计:医院信息管理系统(pycharm+MySQL)
  10. Aspose.Total 企业案例:MiniTool 使用 Aspose.Total API 将文档预览、渲染和转换为 TIFF、PDF 等格式
  11. JUC笔记-同步器(AQS原理、ReentrantLock原理)
  12. 银耳椰椰——Alpha冲刺Day06
  13. ubuntu 校准时间_ubuntu server自动校正时间 | 学步园
  14. 斯坦福大学乔布斯演讲之后的感悟
  15. 找个免费的天气预报API真难a
  16. python websocket实时消息推送
  17. c语言打印n个连续的字符tzz,C/C++编程笔记:C语言实现连连看游戏,小白练手项目(源码分享)...
  18. Android Bluetooth HID实现详解
  19. StarUML3.0 的破解方法
  20. Oracle那些年那些事儿

热门文章

  1. oracle笔试题目及答案,Oracle 笔试题目带答案.doc
  2. two sum python_Python | Leetcode 之 Two Sum
  3. python免费网络采集_python网络数据采集7 采集一个网站所有的外链
  4. 引用另一模板的宏_生信人值得拥有的编程模板Shell
  5. 与「韦神」齐名,他35岁任教清华!18岁一战成名,数学界颜值巅峰
  6. 毕业了,就忘掉导师吧
  7. 高校老师因发消息爱打“???”被学生投诉,被学校撤职后反手上述获赔13万...
  8. 哈佛博士后入职街道办引关注,官方最新回应
  9. 让“学生看得明白” 复旦数学教授在无人教室录课程板书
  10. 6大设计原则之开闭原则