作者 | 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 基础知识!

    真香,朕在看了!

如何选择基于 Kubernetes 的 PaaS?相关推荐

  1. 构建与定制:唯品会PaaS基于Kubernetes的实践

    主要工作内容包括:平台DevOps方案流程优化,持续部署,平台日志收集,Docker以及Kubernetes研究. 大家好,我是唯品会PaaS团队的王成昌,与大家分享一下PaaS在Kubernetes ...

  2. 企业为什么要使用基于Docker的PaaS/CaaS平台

    作者:精灵云 前言 早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本.而这几年--众所周知--真正把容器技术发扬光大的是 ...

  3. 基于Kubernetes 构建.NET Core 的技术体系

    很多公司技术支持岗位的工作,如配置域名,部署环境,修改复位配置,服务重启,扩容缩容,梳理和完善监控,根据开发的需要查找日志等工作,需要和开发进行大量的沟通,如什么是外网域名,什么是内网域名.A nam ...

  4. 基于Kubernetes 构建.NET Core技术中台

    今天下午在腾讯云+社区社区分享了<基于Kubernetes 构建.NET Core技术中台>,下面是演讲内容的文字实录. 我们为什么需要中台 我们现在处于企业信息化的新时代.为什么这样说呢 ...

  5. [基础服务] [kubernetes] KubeSphere 基于 Kubernetes (K8S)的安装

    简介 KubeSphere是个全栈的Kubernetes容器云PasS解决方案 1.KubeSphere是个容器云平台,即PaaS平台,而Kubernetes是个容器编排系统,二者不一样.而在DevO ...

  6. 基于Kubernetes、Docker的机器学习微服务系统设计——完整版

     内容提要 1 概述 2 系统介绍 2.1 功能全览 2.2 核心功能 3 系统架构 3.1 云化架构图 3.2 架构说明 4 云化部署 4.1 部署图 4.2 部署说明 4.3 部署实例 5 设计实 ...

  7. 基于 Kubernetes 的微服务项目设计与实现

    作者:xiaojiaqi 来源:https://github.com/xiaojiaqi/deploy-microservices-to-a-Kubernetes-cluster 随着互联网的发展,后 ...

  8. 如何基于Kubernetes构建完整的DevOps流水线

    前言 关于DevOps是一个很大的话题,它可能既涉及到公司的技术文化构建,也包括开发者技术能力的支持,这次技术干货分享主要是侧重于技术方面,就是如何用Kubernetes来服务好DevOps的流水线. ...

  9. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

最新文章

  1. 从Python到AI,这条路好走吗?
  2. Android Studio 第五十期 - 自定义TabLayout
  3. Python中的 // 与 / 的区别
  4. canvas系列教程03-柱状图项目1
  5. RK4程序c语言,matlab实现欧拉法和RK-4方法的数值计算
  6. 根据进程名判断该进程是否存在(C++)
  7. Netty工作笔记0044---Netty案例源码分析
  8. 手把手教你实现机器学习SVM算法
  9. 基于Dialog的MFC程序在启动时隐藏为托盘程序(三)
  10. python对日志处理的封装
  11. 网络蚂蚁背后的故事(转)
  12. idea配置阿里格式化模板+注释模板
  13. 一种基于RABC的软件系统权限管理设计
  14. c语言ans作用,ANS标准定义C语言是什么?
  15. Binary XML file line Error inflating class解决办法以及自定义view的基本实现
  16. 08-Linux账号管理学习
  17. 把手机当作电脑显示器指导参考
  18. 升级JFlash后无法连接JLINK问题处理
  19. 畅想物联网安全未来,几维安全让万物互联更安全
  20. 亲自下场对抗名创优品,阿里的焦虑感在发作?

热门文章

  1. linux安装python3.7的步骤_Linux 安装python3.7.3
  2. 一个显示器分两个屏幕_桌面改造计划2.0:一个显示器不够那就两个,桌面好物分享...
  3. sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类
  4. xtrabackup备份mysql5.7_【 xtrabackup】CentOS7.x上基于 MySQL 5.7.x的XtraBackup 安装与备份还原...
  5. 浙大29岁“粉色系”女博导获百万大奖!最爱少女粉的她,既是实验高手还是个“大厨”......
  6. 妙到巅峰的8个简洁数学证明(文科生都能看懂),隐隐触摸到一丝只属于神的智慧气息……...
  7. 珀尔:数据非常愚蠢,领会因果关系才是理解世界的关键
  8. 真正聪明的人从来不自己做PPT,看完这篇就放假吧!
  9. 数据结构实验之栈五:下一较大值(一)
  10. 开源微服务编排框架:Netflix Conductor