Kubeless
本文主要基于 Kubeless v1.0.7版本
最近 release
开始学习之前,先看看本 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
安装
安装 client
安装 server
确认部署组件都已正常工作
验证
卸载
架构
安装完 Kubeless 之后,来梳理下安装的组件
两个 trigger 基本上名字就能说明它们的功能,所以 Kubeless 基本上所有逻辑都是在 controller 里实现的,也就没什么架构好说了
概念
Kubeless 引入了 function、trigger 两类 CRD。其中:
function 记录了函数运行环境、源码、接口相关的信息
trigger 记录了函数触发相关的信息
在使用小节会结合实例来详细说明
使用
基本功能
本小节会按照“从零开始写一个 go 函数”的流程,来梳理功能
编写 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,这里不再演示
Last updated