前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubeless 架构设计 | 玩转 Kubeless

Kubeless 架构设计 | 玩转 Kubeless

原创
作者头像
donghui
修改2021-01-15 17:06:33
9830
修改2021-01-15 17:06:33
举报
文章被收录于专栏:donghui的博客donghui的博客

Kubeless 是 Kubernetes 原生的 Serverless 框架。

本文将介绍 Kubeless 架构设计。

Kubeless 三个核心概念

Kubeless 有三个核心概念,分别是:

  • Functions(函数)
  • Triggers(触发器) 
  • Runtime(运行时)

函数表示的是要被执行的代码。除了代码,它还包括运行时的依赖项以及构建指令等元数据信息。函数有独立的生命周期。函数支持以下方法:

  • Deploy(部署):部署函数实例。这个步骤可能涉及构建函数镜像或者重用预先生成的镜像,并将其部署到集群中。
  • Execute(执行):直接调用函数,不通过任何事件源。
  • Get(获取):返回函数元数据和规格。
  • Update(更新):修改函数元数据和规格。
  • Delete(删除):删除函数,并从集群中清理为该函数配置的所有资源。
  • List(列表):显示函数及其元数据的列表。
  • Logs(日志):返回函数生成的日志。

触发器表示的是关联到函数的事件源。当事件源中发生事件时,Kubeless 将确保最多调用一次关联的函数。触发器可以与单个函数关联,也可以与多个函数关联,具体取决于事件源类型。它们与函数的生命周期是脱钩的。触发器支持以下方法:

  • Create(创建):创建一个新的触发器,其中包含事件源和相关函数的详细信息。
  • Update(更新):修改触发器规格。
  • Delete(删除):删除触发器,并清理为触发器配置的所有资源。
  • List(列表):显示触发器及其规格的列表。

目前 Kubeless 官方支持5种触发器:HTTP Trigger、CronJob Trigger、Kafka Trigger、NATS Trigger、AWS Kinesis Trigger。

安装 Kubeless 的时候,默认安装了 HTTP Trigger 和 CronJob Trigger,其他触发器如果有需要,需要自行安装。

此外,用户还可以自定义触发器。

运行时表示函数被执行时的语言和特定的运行环境。

可以通过 kubeless get-server-config 命令查看当前支持的运行时列表。

$ kubeless get-server-config

INFO[0000] Current Server Config:

INFO[0000] Supported Runtimes are: ballerina0.981.0, dotnetcore2.0, dotnetcore2.1, dotnetcore2.2, dotnetcore3.1, go1.13, go1.14, java1.8, java11, nodejs6, nodejs8, nodejs10, nodejs12, php7.2, php7.3, python2.7, python3.4, python3.6, python3.7, ruby2.3, ruby2.4, ruby2.5, ruby2.6, jvm1.8, nodejs_distroless8, nodejsCE8, vertx1.8

每种运行时都封装在一个容器镜像中。这些镜像的引用被注入到 Kubeless 的配置中。

此外,除了 Kubeless 默认支持的运行时外,用户还可以自定义运行时。

Kubeless 架构设计

Kubeless 利用 Kuberbetes 的多个概念来支持在 Kubernetes 之上部署函数。详细说明如下:

  • 自定义 CRD 用于表示函数,名称为 functions.kubeless.io 的 CRD 表示 Function
  • 每个事件源都建模为单独的 Trigger CRD 对象
    • 名称为 httptriggers.kubeless.io 的 CRD 表示 HTTPTrigger
    • 名称为 cronjobtriggers.kubeless.io 的 CRD 表示 CronJobTrigger
  • 单独的 CRD controller 用于处理与 CRD 对象相对应的 CRUD 操作
    • kubeless-function-controller 用于处理 Function 对应的 CRUD 操作
    • http-trigger-controller 用于处理 HTTPTrigger 对应的 CRUD 操作
    • cronjob-trigger-controller 用于处理 CronJobTrigger 对应的 CRUD 操作
  • Deployment/Pod 运行相应的运行时
  • ConfigMap 用于将函数代码注入到 运行时 Pod
  • Init Container 用于加载函数可能具有的依赖
  • Service 用于暴露函数
  • Ingress 资源用于将函数暴露到集群外
  • 函数的调用入口通过 Service 实现
  • 基于 Ingress 实现函数的 HTTP Trigger
  • 基于 CronJob 实现函数的 CronJobTrigger

使用 Kubernetes CRD 和 CRD controller 构成了 Kubeless 的核心设计宗旨。

对函数和触发器使用单独的 CRD 可以将关注点清楚地分开。

使用单独的 CRD controller 可使代码保持解耦和模块化。

参考:

https://kubeless.io/docs/architecture/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubeless 三个核心概念
  • Kubeless 架构设计
  • 参考:
相关产品与服务
Serverless
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档