近年来,Kubernetes一直是很多人关注的焦点。事实上,一些公司已经发现了Kubernetes的大用处,但一些公司还没有发现它的价值,并在这个过程中“伤了自己”。对我来说,我就在中间。我正打算做类似的事情,我已经准备好踏上它了。在此之前,让我们看看如何在k8s上部署一个简单的类似PaaS的平台。1.寻找一个完美的类PaaS平台那么,我们从哪里开始呢?当然有一种简单的方法可以找到这样的东西,也许,让我们从简单的DuckDuckGo搜索开始吧。DuckDuckGo搜索没用显然,k8s不是PaaS。想基于k8s搭建一个PaaS,当然不是用来做PaaS的。然后,我们在HackerNews上搜索。第一个查询找到无效的文章。另外,我在GitHub上偶然发现了一个很棒的列表。https://github.com/ramitsurana/awesome-kubernetes在进行更广泛的搜索之后,我为我的用例列出了可能的候选者列表。KnativeOpenFaaSCloudConvoxGardenRio还有很多其他选择,有些我已经尝试过,有些适合大型企业。2.我的应用场景是在QuestVault中,我们在DigitalOceandroplet上安装一个简单的Wordpress来运行我们的电商网站。虽然部署可以通过运行一些简单的bash脚本并在本地运行测试/登台服务器的副本来实现,但我想构建一个基于行业技术的平台,而不是一些bash脚本。编写这些bash脚本很有趣,拥有自己的部署堆栈也很容易,但是,我希望QuestVault有一些“奢侈品”,一些我们不必担心使用哪些工具的标准。https://questvault.net/现在,我想在运行k3s的办公室垃圾服务器上测试这些项目。K3s有一个DigitalOceanDroplet的反向代理,无法在互联网上访问。这意味着该项目应该支持本地部署。https://k3s.io/我也希望完全抽象掉k8s。这意味着我不想一直处理太多的yaml或部署helm图表,我想更多地考虑应用程序并通过CLI来完成。简而言之:我想要的是,只需按下一个按钮即可。我们的应用程序有很多活动组件,有些只是简单的脚本,有些是为游戏客户端提供通信的大型应用程序。不管是什么,我们的平台都需要支持大量不同的应用程序类型。这通常意味着支持通过Dockerfile进行部署。我们计划运行的大多数应用程序都是有状态的。以Wordpress为例,我们需要一个存放图片的地方。我们还有很多需要存储的应用内照片拍摄。我们需要一种方法来为我们的应用程序提供某种形式的持久性。我喜欢很多项目,但区分好项目和优秀项目的是社区和行业采用情况。拥有自己的bash脚本与在GitHub上拥有一个拥有3个活跃用户的项目之间几乎没有区别。如果你搞砸了,或者出于任何原因需要一些建议,你会需要来自活跃社区的帮助。3.项目清单Knative简介我的Knative体验有了一个良好的开端!阅读之后,我很高兴了解到:我可以运行一个平台,Google在他们的平台内使用该平台进行他们自己的类似PaaS的部署。考虑到Google创建了k8s,这一定很合适!它的安装过程比预期的要困难得多。https://knative.dev/docs/install/any-kubernetes-cluster/似乎没有任何简单的方法来安装这个平台,而且,将来无法轻松使用它是一种风险。OpenFaaSCloud安装非常简单!我很快就启动并运行了平台。它满足了我的大部分需求,但是,它似乎更像是一种有趣的实现OpenFaas的方式,而不是完全成熟的PaaS替代方案。我不知道如何将我们的用例放在这个特定平台上。如果你使用的是一个耦合度比较低或者功能比较小的项目,这是一个不错的选择!ConvoxConvox看起来很棒!由几位前Heroku工程师在k8s上构建的平台。看起来很完美!我想尝试一下并立即开始将其部署在DigitalOceank8s集群上。很棒的开发体验!但是,他们似乎不支持该平台的本地版本。此外,除了一些早期采用者之外,该项目似乎没有一个非常大的社区。相比之下,这个项目不是很出名,我最终放弃了它并寻找另一个选择。花园这是一个非常酷的项目。我喜欢它,这是由一家小型独立公司开发的创新解决方案。它安装简单,它们的方法很好地抽象了k8s,但它们还允许您通过经典的k8s方式(如yaml文件)保持某种形式的控制。我真的很愿意使用它,而且效果很好!然而,我确实注意到它的一些CLI并不十分完善,但是,我认为这些都是小瑕疵,并不代表最终产品。里约热内卢项目符合所有条件。一个真正易于使用的CLI?是的。不再以任何方式与k8s交互?是的。使用Dockerfile部署?是的!它们还提供了大量其他平台没有实现或实现不佳的功能。来自Rancher的Rio似乎得到了他们活跃社区的大力支持。https://rancher.com/blog/2019/rio-revolutionizing-the-way-you-deploy-apps在垃圾服务器上设置我快速为k3s实例设置了一个反向代理并开始设置Rio。通过GitHub页面上的快速入门指南,该过程非常简单:#Settingupthereverseproxytok3sssh-nNTL6443:localhost:6443dropletInstallingRiocurl-sfLhttps://get.rio.io|sh-#Runningtheexampleprojectriorunhttps://github.com/rancher/rio-演示会做。我非常兴奋,想马上看看是否可以同样轻松地迁移现有的基础设施。Rio的默认安装允许您在rio.io上使用他们的rDNS服务,这很酷但不需要将我的垃圾服务器放在反向代理后面。我还没有使用Linkerd的经验,所以暂时禁用它。使用命令rioinstall--disable-featurerdns,letsencrypt,linkerd重新安装后,我得到了想要的结果。接下来,我通过kubectl安装了一个自定义ClusterDomain,这允许我使用除on-rio.io以外的其他域。最后,我安装了dnsmasq并创建了一个名为app.rio的虚假域,我的应用程序将在其中解析。这将使我能够轻松地测试与垃圾服务器上的应用程序的连接。apiVersion:admin.rio.cattle.io/v1kind:ClusterDomainmetadata:name:app.riospec:httpPort:80我仍然需要弄清楚如何从DigitalOceanDroplet连接到这个集群。我从垃圾服务器上的端口80反向代理到端口8080上的液滴。Rio在端口80上安装Gloo的网关代理。作为最后一步,我将nginx配置设置为指向Gloo网关:server{listen80;server_nameyour.domain.name;location/{proxy_http_version1.1;proxy_set_headerHost$host;proxy_passhttp://localhost:8080;}}这个有两点需要注意,proxy_http_version1.1和proxy_set_headerHost。proxy_http_version很重要,因为基于Envoy的Gloo在http_version1.0上不支持网关,仅在1.1上支持。否则,它会返回426UpgradeRequired错误。Host标头对于实现PublicDomain非常重要。需要注意的是,要添加一个PublicDomain,它必须匹配server_name或被代理的Host头,否则Gloo无法识别我正在尝试访问哪个服务。riodomainregisteryour.domain.namerio-demo这是我寻找最合适的KubernetesPaaS解决方案的冒险。
