Kubeless
Last updated
Was this helpful?
Last updated
Was this helpful?
本文主要基于 v1.0.7版本
开始学习之前,先看看本 repo 最近在干什么(截至 2021.06):
1.0.8 [2021.01]
Update trigger controllers
add AWS Kinesis Trigger
Add secrets to runtime configuration
1.0.7 [2020.06]
Feature: CronJob Triggers docs + CronJob create --payload arg
If HPA already exists, perform an update
Add soft pod anti affinity
1.0.6 [2020.01]
Perform a graceful shutdown for the function proxy on SIGINT & SIGTERM
Quote curl URL
Use new endpoint for the current deployment
整体改动趋向于维护,没有引入什么新功能
结合实战来学习本 repo
确认部署组件都已正常工作
安装完 Kubeless 之后,来梳理下安装的组件
pod
容器
命令
源码 repo
controller
kubeless-function-controller
kubeless-function-controller
Kubeless
http-trigger-controller
http-controller
cronjob-trigger-controller
cronjob-controller
两个 trigger 基本上名字就能说明它们的功能,所以 Kubeless 基本上所有逻辑都是在 controller 里实现的,也就没什么架构好说了
Kubeless 引入了 function、trigger 两类 CRD。其中:
function 记录了函数运行环境、源码、接口相关的信息
trigger 记录了函数触发相关的信息
在使用小节会结合实例来详细说明
本小节会按照“从零开始写一个 go 函数”的流程,来梳理功能
在 Kubeless 框架下写 go 代码,有两个基本要求:
必须带一个 go.mod(理论上其实没这必要,但 Kubeless 部分代码写死了)
接口实现依赖 github.com/kubeless/kubeless/pkg/functions
的引入
上述命令指定 runtime 部署了 go 函数。涉及的完整流程是:
kubeless client 创建了 function CR
function CR 里存储了包括源码在内的所有命令输入信息
controller watch 到 function CR 后,创建 configmap 和函数 pod
configmap 从 function 获取,并存储了代码和依赖相关信息。pod 除了运行函数的 runtime container 外,还有两个 init container:prepare 和 compile。prepare 从 configmap 挂载卷里拷贝代码等,compile 负责编译
上述命令调用了刚刚创建的函数。涉及的完整流程是:
kubeless client 根据函数名查询同名 service,获取地址
kubeless client 调用函数
Kubeless 需要主动创建扩缩规则并关联函数
上述命令本质上就是创建了一个 HPA,Kubeless 完全依赖 HPA 的能力,因此无法配置 min 为0
上述小节以命令行的形式,手工触发函数调用,而在生产环境,Kubeless 提供了以下几种触发方式:
http trigger
与 Fission http trigger 类似,不过因为 Kubeless 仅有 controller 组件,所以依赖部署 ingress 来提供 http path 挂载,这里就不再演示了
cronjob trigger
与 Fission timer trigger 类似
pubsub trigger
与 Fission message queue trigger 类似,不过仅支持 Kafka,这里不再演示