生态

KEDA

k8s 默认只支持CPU和内存扩容(一般用CPU扩容),如果想要用自定义指标扩容,比如ActiveMQ, SQS,AWS CloudWatch, RabbitMQ等,那么就可以用 KEDA这个插件

K8S Serverless Function

Knative

只能部署Docker,不能部署自己的代码。只是服务启动方式,由 k8s Deployment, Service 变成了Knative Service 当没有请求的时候,容器可以是0,从而节省资源,有http请求的时候,再启动容器。Knative是基于事件驱动的,支持多种事件源

OpenFaaS

支持在K8s里直接部署代码(像AWS Lambda那样部署python),也支持部署Docker。项目比较成熟,社区比较活跃。但是功能相对来说比较少。 OpenFaaS上手比较简单,容易部署 提供了内置UI访问,可以查看管理和调用函数

Fission

项目相对来说没有那么活跃,可以直接在K8S里部署代码,也可以部署Docker。 不提供官方UI,主要通过 fission cli管理,也有第三方UI

Apache OpenWhisk

可以直接部署代码,也可以部署Docker。适合多云环境,支持复杂的事件驱动,虽然部署比较麻烦,但功能比较多,在需要比较复杂的FaaS平台下表现比较好 提供UI功能。 IBM Cloud的Function就是基于OpenWhisk实现的托管平台。

对比

特性
OpenFaaS
Fission
Apache OpenWhisk

简单易用性

事件驱动支持

基本支持

编程语言支持

多种

多种

多种

Kubernetes 集成

定制化容器支持

部署和运维复杂度

中等

中等

状态管理

不支持

不支持

支持

开发体验

简单直接

快速部署

完整功能

社区和文档

活跃,丰富

活跃,较丰富

活跃,丰富

TriggerMesh

主要是解决跨平台的trigger。 比如kafka作为事件源,监听队列里事件,然后将 AWS Lambda作为第一个事件目标,处理kafka消息,GCP Storage作为第二个事件目标,存储处理结果,slack作为第三个目标,发送处理完通知。

cilium

基于ebpf用于提供网络和安全功能的高性能网络层

Rook

存储解决方案的云原生存储编排器,支持各种存储后端,如 Ceph 和 NFS

Kubeflow

k8s下的机器学习平台

Tekton

Tekton主要负责构建docker镜像,在pipeline里进行单元测试、集成测试等,确保代码质量的可靠性。Tekton主要是在k8s环境使用。但tekton的作用可以理解为跟github action差不多

Flux

一个GitOps工具,主要是监控仓库变化,自动部署到后端

ArgoCD

和Flux类似,监控仓库变化,自动部署到后端

Kustomize

可以理解为k8s部署的 deployment.yaml, service.yaml 等文件的manifest管理工具,kustomization.yaml 里可以声明性的管理kubernetes资源配置。通过 base 和overlay的概念,可以定义一个基础配置,然后再为开发、测试和生产环境创建不同的overlay。和Helm不同,Kustomize 不是作为打包用的。 使用kustomize,比较适合比较复杂的项目,有多个团队共同维护,如果手动直接管理deployment.yaml,会出现部署一致性的问题,使用 kustomize 能保持其一致性。以及,如果平时删除了 deployment.yaml,如果直接kubectl apply -f ./folder/的方式,不会删除部署文件,但使用kustomize 就会删除那个部署了。

Helm

k8s 部署文件的打包,可以将 deployment.yaml,service.yaml 等模版化,这样做好helm Chart,给其他人部署的时候可以自定义一些参数 helm 使用的是 go模板引擎来实现模板化, values.yaml文件定义了默认参数,可以在命令行里指定参数来覆盖默认值 支持版本控制和回滚,依赖管理(chart中定义其他chart的依赖)

Traefik

可以作为 ingress gateway,也可以作为API网关。支持反向代理,负载均衡,自动服务发现(支持 k8s, docker, consul, etcd等)。 支持动态配置,无需重启和手动敢于,实时感知和响应后端服务的变化。 支持身份认证,速率限制,重定向和压缩

kong

kong 和 traefik 可以视为竞品关系。Traefik 更注重动态服务发现和配置,适合快速变化的微服务环境。Kong强调的是API管理和扩展功能,适合需要丰富插件以及复杂的API管理环境。 kong的插件比较多,traefik中间件功能比较强大,但插件比较少。 所以看起来如果在k8s里跑,比较适合 traefik,如果是EC2上网关,kong更适合。

Istio

service mesh,一般在前端应用可以用,后端比较复杂,除非特别熟悉这个,否则出问题不好查。

KubeEdge

华为云开源的,目前看社区很活跃(2024年6月份),在B站每周都有社区weekly meeting。 kubeEdge主要是将边缘计算引入到k8s里。

KubeSphere

是有青云科技开源的,支持 k8s 多租户管理,以及基于项目的隔离,配额管理,devops CICD Pipeline,日志管理,应用商店等。将一些企业级特性带到k8s里。

最后更新于