函数资源托管模式概述
函数资源托管模式决定了函数 SCF 运行时的资源池。默认情况下,开启函数服务后,平台会为每一个地域都分配一个函数公有云资源池,资源池由一些底层机器组成,体现为 128GB 的函数并发配额,您还可以通过购买套餐包的方式提升地域甚至是命名空间的并发额度,平台会根据新的并发额度自动分配匹配的机器,保障函数运行。
为了更好的支持您在不同业务场景下的需求,函数现已支持自定义资源托管模式,以满足函数运行到您指定的基础设施上,例如公有云 TKE 集群、混合云、IDC 等。
目前平台已推出 K8s 资源托管模式,以支持函数运行在您自己的 TKE 集群中,以实现在统一的云原生资源底座上使用函数加速业务开发。后续将逐步迭代支持混合云等更多云原生基础设施。
函数资源托管模式类型
SCF 支持默认资源托管模式和 K8s 资源托管模式两种类型。
默认资源托管模式,函数运行在函数平台各个地域下的公有云资源池中,由函数平台完全掌控底层机器的供给和调度,您只需关注实际业务量级需要,通过调整函数的并发额度以保障业务运行。
K8s 资源托管模式,函数运行在您指定的 K8s 集群中,由您管理 K8s 集群中的资源供给,函数平台完全掌控函数的请求调度,在给定的资源池中智能调用,充分利用资源。
k8s 资源托管模式
概述
在 K8s 资源托管模式下,可选择一个 TKE 集群作为函数的计算资源池,函数的请求调用将全部调度到该资源池中,函数侧将不产生费用。目前支持 TKE 集群原生节点和普通节点,暂不支持超级节点。
使用上,只需要在函数命名空间中,配置资源托管模式为 K8s,并绑定一个 TKE 集群,即可开启该模式。该命名空间下的所有函数请求都将调度到绑定的 TKE 集群中。
运行原理
K8s 资源托管模式下的函数调度原理如下图所示:
TKE 集群初始化
当您为函数命名空间指定了 TKE 集群和函数运行时 namespace 后,平台将在该集群中自动创建 scf-system namespace,并创建部署管理函数代码等元信息的 daemonset、请求转发 pod、内网 clb service 组件等。
函数请求调度生命周期
用户发送的函数请求首先会发送到函数环境中的请求调用入口,函数调度管理模块会分析该函数在 TKE 集群中是否有空闲的函数运行时 Pod 资源可供运行:
1. 如果没有空闲资源,则会通过资源调度模块下发调度请求到 TKE 集群,进行函数运行时 Pod 资源准备。在 Pod 完备后,会通过 TKE 集群中的函数管理模块将函数的代码等元信息准备好,最后将新增的运行资源上报到函数环境的调度管理模块。
2. 如果有空闲资源,则会通过内网 CLB 将请求转发到 TKE 集群中的接入层 Service,然后通过集群中的函数的调用模块将请求下发到函数运行时 Pod,进入函数执行阶段。函数执行过程中,日志会实时上报到用户的 CLS 日志系统。函数执行结束后,执行结果、监控指标等信息会发回函数环境中的请求调用模块。
功能与优势
相较于默认资源托管模式,K8s 资源托管模式具备以下优势:
函数可以跑在您指定的 K8s 集群中,更加灵活可控,可实现更好的成本控制和更强的基础设施资源管理。
函数的主动调度机制,可大幅度提升您的 K8s 集群资源利用率,不仅通过函数开发体验提升了研发效率,还能降低资源浪费,真正实现了降本增效。
通过和 K8s 生态融合,可实现全栈云原生研效体系和服务治理机制,为业务开发者带来先进的开发体验,为线上业务带来更高的可用性保障。
操作步骤
创建函数命名空间并绑定 TKE 集群
1. 登录 Serverless 控制台,单击左侧导航栏的函数服务。
2. 在函数服务页面上方选择期望创建函数的地域,单击命名空间右侧的⚙️,进入命名空间管理。如下图所示:
3. 在命名空间弹窗中,单击新增命名空间,进入命名空间创建页面。如下图所示:
4. 在资源托管模式选项中,选择 K8s,如果是第一次操作,会弹出容器服务角色授权弹窗,根据指示完成授权后可进行下一步操作。
5. 在 TKE 集群配置中,选择 TKE 集群以及该集群下的 namespace,平台将在指定集群的 scf-system namespace 下创建 daemonset、内网 clb 等函数服务支撑组件,同时将在指定的 namespace 下创建函数运行时 Pod。请注意所选 TKE 集群内需有节点,且节点类型是普通节点和原生节点,以确保初始化过程顺利完成。
6. 在函数 vpc 子网配置中,指定子网,平台将在该子网下消耗一个 ip 创建一个内网 clb 作为函数请求入口,实现函数请求转发到 TKE 集群。请注意子网不支持 9.x.x.x 网段。
7. 除以上的基础配置项外,还可以根据需要配置下面几项:
函数目录:指定一个 TKE 集群节点上的路径,用以存储函数代码、layer 代码及用作函数运行过程中产生的日志等临时存储。
支撑服务端口:指定一个可用的端口号,函数支撑服务将监听该端口号以实现函数调度链路。
NodeSelector: 可根据调度规则,将函数实例调度到符合预期的Label的节点中。详见下述 设置函数实例在 TKE 集群中的调度策略章节 。
污点容忍调度:可根据调度规则,将函数实例调度到符合预期的污点的节点中。详见下述 设置函数实例在 TKE 集群中的调度策略章节 。
8. 单击创建,在弹出的二次确认弹窗中单击继续,进入 TKE 集群的函数支撑组件初始化流程,该过程将花费 20s 左右,完成后,将会在命名空间管理页面中看到状态更新为“正常”,如下图所示:
9. 切换到已创建好的函数命名空间下创建函数开始使用。
设置函数实例在 TKE 集群中的调度策略
将函数实例运行在指定的节点上。
将函数实例运行在某一作用域(作用域可以是可用区、机型等属性)的节点上。
前置条件
设置工作负载高级设置中的调度规则,且集群的 Kubernetes 版本必须是1.7以上的版本。
为确保您的 Pod 能够调度成功,请确保您设置的调度规则完成后,节点有空余的资源用于容器的调度。
使用自定义调度功能时,需要为节点设置对应 Label 或 污点。详情请参见 设置节点 Label 和 设置节点污点。
设置调度规则
NodeSelector
可通过自定义调度规则,匹配节点标签,将函数实例调度到指定节点上。调度期间如果满足亲和性条件,则调度到对应 Node。如果没有节点满足条件,则调度失败。
污点容忍调度
可通过自定义调度规则,容忍节点污点,将函数实例调度到指定节点上。
联系我们
如果您在使用过程中遇到任何问题,请随时加入我们的群组进行沟通: