ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kubeless Helm Chart 部署指南:Kubernetes 原生 Serverless 框架的安装、配置与 Trigger 实战

Kubeless Helm Chart 部署指南:Kubernetes 原生 Serverless 框架的安装、配置与 Trigger 实战 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载Kubeless 是一个运行在 Kubernetes 之上的原生 ServerlessFunction-as-a-Service框架它允许开发者直接部署一段代码单元作为函数而无需手工构建容器镜像。本文以本仓库incubator/kubelessChart版本 2.1.3appVersion v1.0.5为核心完整讲解其通过 Helm 安装、卸载、参数配置、Kafka Trigger 与 Kubeless UI 的启用方法并结合 values.yaml 与 templates 下的源码模板剖析其底层实现帮助读者快速落地一套可运行、可定制、可排查的 Serverless 平台。Chart 概览它部署了什么incubator/kubeless这个 Chart 通过 Helm 在 Kubernetes 集群上引导部署Kubeless 控制器与可选的Kubeless UI两个核心组件见 README.md 的 Introduction 部分。从 Chart.yaml 可以确认其元数据Chart 版本2.1.3应用版本appVersionv1.0.5类型关键词kubeless、serverless、function-as-a-service、faasAPI 版本为v1模板引擎为gotpl官方来源指向 kubeless 项目主页与仓库。需要特别说明的是该 Chart 及其所在仓库均已被标记为废弃deprecated。Chart.yaml 中deprecated: trueREADME 顶部也明确提示整个仓库自 2020 年 11 月 13 日起不再更新。因此本文内容适用于理解该 Chart 的历史实现与在旧集群中的部署场景新项目选用 Serverless 方案时应评估其他维护中的项目。从模板目录 templates 可以清晰地看出一个完整 Chart 的资源组成共 16 个模板文件分别负责模板文件负责的资源crds.yaml遍历crds/目录批量输出全部 CRD 定义kubeless-config.yaml生成kubeless-configConfigMap控制器核心配置controller-deployment.yaml控制器 Deployment三个控制器容器service-account.yaml/cluster-role.yaml/cluster-role-binding.yaml控制器 RBACkafka-controller-deployment.yaml/kafka-controller-cluster-role*.yamlKafka Trigger 控制器及其 RBACui-deployment.yaml/ui-svc.yaml/ui-ingress.yaml/ui-service-account.yaml/ui-cluster-role*.yamlKubeless UI 及其网络与 RBACNOTES.txt/_helpers.tpl安装后提示信息与模板辅助函数crds/目录下预置了 4 个 CRD 定义文件function-crd.yaml、httptrigger-crd.yaml、cronjobtrigger-crd.yaml与kafka-trigger-type-crd.yaml对应 Kubeless 的 Function、HTTPTrigger、CronJobTrigger 与 KafkaTrigger 四类自定义资源——这正是 Kubeless 以 CRD 控制器实现 FaaS 的关键。前置条件安装前需要满足Kubernetes 1.7且启用 Beta APIChart 内多处资源使用apps/v1beta1、extensions/v1beta1、rbac.authorization.k8s.io/v1beta1等旧版 API例如 kafka-controller-deployment.yaml 使用apps/v1beta1ui-deployment.yaml 使用extensions/v1beta1RBAC 模板使用rbac.authorization.k8s.io/v1beta1这是旧版 Kubernetes API 时代的产物已安装并配置好Helm包管理器若启用 Kafka Trigger还需要一个 Kubeless 可以访问的Kafka 集群可参考本仓库incubator/kafkaChart 搭建。快速安装TL;DR$ helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/ $ helm install --namespace kubeless incubator/kubeless注意helm install需指定 release 名称。第一条命令将 Chart 仓库加入 Helm第二条命令以默认配置在kubeless命名空间安装。安装 Chart自定义 release 名称以 release 名称my-release安装$ helm install --name my-release --namespace kubeless incubator/kubelessNOTE虽然该 Chart 支持将 Kubeless 部署到任意命名空间但Kubeless 期望被部署在名为kubeless的命名空间下因此建议始终使用--namespace kubeless。该命令以默认配置将 Kubeless 部署到集群。默认配置中的所有参数均可在安装时通过--set或-f values.yaml覆盖详见下文「参数配置」一节。Tip: 使用helm list可列出所有 release。卸载 Chart$ helm delete my-release该命令会移除与该 Chart 关联的所有 Kubernetes 组件并删除该 release。注意旧版 Helm 中helm delete默认保留 release 记录可使用--purge彻底删除行为与所用 Helm 版本相关。核心配置机制从 ConfigMap 看运行时定义Kubeless 的控制面核心配置并不是硬编码在 Deployment 中而是集中存放在名为kubeless-config的 ConfigMap 中由 kubeless-config.yaml 模板生成。该模板逐项映射了 values.yaml 中的config段ConfigMap Key对应 values 字段说明functions-namespaceconfig.functionsNamespace函数默认命名空间默认空字符串即使用控制器的命名空间builder-imageconfig.builderImage 控制器 tag函数构建器镜像默认kubeless/function-image-builder:tagtag 取自controller.deployment.functionController.image.tagbuilder-image-secretconfig.builderImagePullSecret拉取构建器镜像所需的 Secret默认空deploymentconfig.deploymentTemplate函数 Deployment 模板默认{}enable-build-stepconfig.enableBuildStep是否启用构建功能默认false注意此处是字符串function-registry-tls-verifyconfig.functionRegistryTLSVerify对镜像仓库启用 TLS 校验values 中默认trueprovision-imageconfig.provisionImage预置镜像默认kubeless/unzipsha256:...带 digest 锁定版本provision-image-secretconfig.provisionImagePullSecret拉取预置镜像的 Secret默认空runtime-imagesconfig.runtimeImages可用运行时列表JSON 字符串其中runtime-images是 Kubeless 的灵魂配置它声明了平台支持的全部运行时及其构建/安装/运行阶段所使用的镜像。在 values.yaml 中该字段是一个完整的 JSON 数组覆盖多达 11 类运行时ballerina0.981.0编译阶段ballerina/kubeless-ballerina-init运行阶段ballerina/kubeless-ballerinadotnetcore2.0 / 2.1安装依赖project.csproj编译阶段allantargino/aspnetcore-build运行阶段allantargino/kubeless-dotnetcore并注入DOTNETCORE_HOME环境变量go1.10依赖Gopkg.toml编译与安装阶段共用kubeless/go-initdep ensure安装依赖运行阶段kubeless/gojava1.8依赖pom.xml编译阶段kubeless/java-init运行阶段kubeless/javanodejsnode6 / node8 / node10 / node12依赖package.json安装阶段执行/kubeless-npm-install.sh运行阶段注入NODE_PATHphp7.3依赖composer.json安装阶段执行composer install运行阶段kubeless/phppython2.7 / 3.4 / 3.6 / 3.7依赖requirements.txt安装阶段执行pip install --prefix$KUBELESS_INSTALL_VOLUME -r $KUBELESS_DEPS_FILE运行阶段注入PYTHONPATHruby2.3 / 2.4 / 2.5 / 2.6依赖Gemfile安装阶段执行bundle install --gemfile... --path...运行阶段注入GEM_HOMEjvm1.8 / 11支持.jar文件直部署编译阶段打包 payloadnodejs_distrolessnode8distroless 精简镜像运行态nodejsCEnode8自定义 nodejs 镜像运行态。每个运行时条目都包含ID、depName依赖清单文件名决定安装阶段如何解析依赖、fileNameSuffix源码文件后缀以及按compilation/installation/runtime三个阶段划分的镜像定义。这意味着新增或调整一种运行时只需要修改config.runtimeImages即可无需改动控制器镜像——从源码结构看控制器通过读取该 ConfigMap 动态获取运行时支持矩阵。参数配置详解完整参数表Chart 默认值下表完整列出该 Chart 可配置的参数及其默认值与 README.md 的参数表一致参数描述默认值rbac.create创建基于 RBAC 的 ServiceAccountfalseconfig.functionsNamespace函数命名空间config.builderImage函数构建器镜像kubeless/function-image-builderconfig.builderImagePullSecret拉取构建器镜像的 Secretconfig.provisionImage预置镜像kubeless/unzipconfig.provisionImagePullSecret拉取预置镜像的 Secretconfig.deploymentTemplate函数 Deployment 模板{}config.enableBuildStep启用构建功能falseconfig.functionRegistryTLSVerify对镜像仓库启用 TLS 校验{}config.runtimeImages可用运行时python、nodejs、ruby、php 与 go 等controller.deployment.functionController.image.repository函数控制器镜像kubeless/function-controllercontroller.deployment.functionController.image.pullPolicy函数控制器镜像拉取策略IfNotPresentcontroller.deployment.httpTriggerController.image.repositoryHTTP 触发器控制器镜像bitnami/bitnami/http-trigger-controllercontroller.deployment.httpTriggerController.image.pullPolicyHTTP 触发器控制器镜像拉取策略IfNotPresentcontroller.deployment.cronJobTriggerController.image.repositoryCronJob 触发器控制器镜像bitnami/cronjob-trigger-controllercontroller.deployment.cronJobTriggerController.image.pullPolicyCronJob 触发器控制器镜像拉取策略IfNotPresentcontroller.deployment.replicaCount副本数1ui.enabled启用 Kubeless UI 组件falseui.deployment.ui.image.repositoryKubeless UI 镜像bitnami/kubeless-uiui.deployment.ui.image.pullPolicyKubeless UI 镜像拉取策略IfNotPresentui.deployment.proxy.image.repositoryProxy 镜像kelseyhightower/kubectlui.deployment.proxy.image.pullPolicyProxy 镜像拉取策略IfNotPresentui.deployment.replicaCount副本数1ui.service.nameService 名称ui-portui.service.typeService 类型NodePortui.service.externalPortService 外部端口3000ui.ingress.enabledKubeless UI Ingress 开关falseui.ingress.annotationsKubeless UI Ingress 注解{}ui.ingress.pathKubeless UI Ingress 路径{}ui.ingress.hostsKubeless UI Ingress 主机[chart-example.local]ui.ingress.tlsKubeless UI Ingress TLS[]kafkaTrigger.enabled启用 Kubeless Kafka TriggerfalsekafkaTrigger.env.kafkaBrokersKafka Brokers 环境变量localhost:9092kafkaTrigger.deployment.ui.image.repositoryKubeless Kafka Trigger 镜像bitnami/kubeless-uikafkaTrigger.deployment.ui.image.pullPolicyKubeless Kafka Trigger 镜像拉取策略IfNotPresentkafkaTrigger.deployment.ui.image.tagKubeless Kafka Trigger 镜像 tagv1.0.1上表与 values.yaml 的实际默认值高度一致个别差异如config.functionRegistryTLSVerify在 values 中实际为true字符串、config.enableBuildStep实际为false字符串ui.ingress.path实际为/kafkaTrigger.deployment.image.repository实际为bitnami/kafka-trigger-controller建议以 values.yaml 为准。通过--set覆盖参数使用--set keyvalue[,keyvalue]参数传入helm install。例如$ helm install --name my-release --set service.nameui-service,service,externalPort4000 --namespace kubeless incubator/kubeless说明原文档示例中该命令将 Kubeless 的 service 名称设置为ui-service、外部端口设置为4000。实际生效参数路径应为ui.service.name/ui.service.externalPortREADME 原例中的service.name/service,externalPort疑似笔误配置时请以参数表中的ui.service.*路径为准。通过 values 文件覆盖参数也可以准备一个 YAML 文件存放需要覆盖的 values安装时用-f传入$ helm install --name my-release -f values.yaml --namespace kubeless incubator/kubelessTip: 可直接基于默认的 values.yaml 复制修改它包含了全部参数的完整默认值是配置的最佳起点。控制器架构单 Deployment 三容器从 controller-deployment.yaml 可以看到Kubeless 的控制器并不是单个进程而是一个 Deployment 内并置三个容器的组合kubeless-function-controller函数控制器负责监听 Function 自定义资源并创建/管理对应的 Deployment 与 Service镜像kubeless/function-controller:tag默认 tag 为 v1.0.5http-trigger-controllerHTTP 触发器控制器监听 HTTPTrigger 资源并管理 Ingress/Service 路由镜像kubeless/http-trigger-controller:v1.0.1cronjob-trigger-controller定时触发器控制器监听 CronJobTrigger 资源并创建 CronJob镜像kubeless/cronjob-trigger-controller:v1.0.1。三个容器共享以下关键设计均注入环境变量KUBELESS_NAMESPACE值为.Release.Namespace即部署命名空间控制器据此限定自己管理的资源范围均支持通过controller.resources统一设置 requests/limitsvalues 中默认注释掉即不限制resources: {} # limits: # cpu: 500m # memory: 512Mi # requests: # cpu: 500m # memory: 512Mi副本数由controller.deployment.replicaCount控制默认1当rbac.create: true时Deployment 会挂载名为controller-acct的 ServiceAccount由 service-account.yaml 创建。控制器所需的 RBAC 权限启用 RBACrbac.create: true后cluster-role.yaml 会创建一个名为release-kubeless-controller-deployer的 ClusterRole并通过 cluster-role-binding.yaml 将其绑定到controller-acct。从权限规则可以反推控制器的行为边界Service / ConfigMap / Deployment / Ingress可增删改查——控制器需要为函数创建 Service 与 Deployment、管理 Ingress 路由Podlist / delete——清理函数实例Secretkubeless-registry-credentials仅可 get——拉取私有仓库镜像时读取凭据kubeless.io组下的functions/httptriggers/cronjobtriggersget / list / watch / update / delete——监听自定义资源状态并回写CronJob / Jobbatch 组全权限——CronJobTrigger 需要创建定时任务HorizontalPodAutoscalerautoscaling 组全权限——支持函数自动扩缩容CRDapiextensions.k8s.ioget / list——查询 CRD 定义monitoring.coreos.com 的 Alertmanager / Prometheus / ServiceMonitor*——集成 Prometheus 监控。也就是说启用 RBAC 是生产环境部署的推荐方式若不启用则控制器将依赖集群默认的宽松权限运行values 中默认false需按需开启。Kafka Trigger用 Kafka 事件驱动函数Kubeless 支持通过 Kafka 事件触发函数前提是存在一个 Kubeless 可以访问的 Kafka 集群需要外部搭建也可参考本仓库incubator/kafkaChart 部署。当 Kafka 运行起来后启用 Kafka Trigger 需要同时配置以下 valuesrbac.create: trueKafka 触发器控制器同样需要 RBAC ServiceAccountkafkaTrigger.enabled: truekafkaTrigger.env.kafkaBrokers: your_kafka_brokers替换为实际的 Kafka broker 地址。从 kafka-controller-deployment.yaml 的源码实现看当kafkaTrigger.enabled为 true 时Chart 会额外创建一个独立的kafka-trigger-controllerDeployment注意它使用apps/v1beta1API镜像来自kafkaTrigger.deployment.image.repository:tag默认bitnami/kafka-trigger-controller:v1.0.1拉取策略IfNotPresent通过环境变量KAFKA_BROKERS注入 broker 地址值即kafkaTrigger.env.kafkaBrokers默认localhost:9092挂载 ServiceAccountcontroller-acct与函数控制器共用身份。同时kafka-controller-cluster-role.yaml 与对应的 ClusterRoleBinding 会为 Kafka 触发器控制器授予监听kubeless.io组下kafkatriggers资源所需的权限具体 CRD 定义见 crds/kafka-trigger-type-crd.yaml实现「Kafka 主题消息 → 触发函数」的事件驱动链路。Kubeless UI可视化管理与访问方式启用 UIKubeless UI 组件默认禁用。启用方式$ helm install --name my-release --set ui.enabledtrue --namespace kubeless incubator/kubelessUI 的组成与实现从 ui-deployment.yaml 可以看到 UI Deployment 同样由两个容器组成ui前端容器bitnami/kubeless-ui默认 taglatest监听 3000 端口并配置了就绪探针initialDelaySeconds: 5、periodSeconds: 10与存活探针initialDelaySeconds: 10、periodSeconds: 20均对/发起 HTTP GETproxy代理容器kelseyhightower/kubectl:1.4.0以proxy -p 8080方式启动作为浏览器与 Kubernetes API 之间的反向代理让前端在页面上直接操作函数资源。UI 的网络暴露由配套模板完成ui-svc.yaml 生成 Service名称ui-port类型默认NodePort外部端口 3000ui-ingress.yaml 在ui.ingress.enabled: true时生成 Ingress支持annotations、path、hosts、tls配置。安装后如何访问 UIChart 自带的 NOTES.txt 会根据ui.service.type给出对应的访问方式LoadBalancer 类型等待 LoadBalancer IP 就绪可用kubectl get svc -w观察然后取SERVICE_IP:SERVICE_PORT访问ClusterIP 类型通过kubectl port-forward将本地 3000 端口转发到 Pod然后访问http://127.0.0.1:3000NodePort 类型读取 Service 的nodePort与节点 IP访问http://$NODE_IP:$NODE_PORT。此外 NOTES.txt 提示部署函数需要单独的kubelessCLI 二进制Kubeless 官方仓库提供Helm Chart 只负责部署平台控制面函数的上传、触发与调试依赖 CLI 或 UI 完成。部署后的下一步函数部署与触发完成 Chart 安装后Kubeless 控制面已就绪CRDFunction / HTTPTrigger / CronJobTrigger / KafkaTrigger已注册三个控制器容器在监听对应资源。接下来使用 kubeless CLI 部署函数例如一个 Python 函数$ kubeless function deploy hello --runtime python3.6 --from-file hello.py --handler hello.handler $ kubeless function call hello $ kubeless trigger http create hello --function-name hello--runtime必须与config.runtimeImages中定义的运行时 ID 一致如python3.6、node8、go1.10、ruby2.6等--from-file指定函数源码文件其扩展名需要匹配该运行时的fileNameSuffix若函数有依赖Python 的requirements.txt、Node.js 的package.json、Go 的Gopkg.toml等安装阶段会按runtimeImages中定义的依赖清单文件自动处理HTTP Trigger 创建后函数即可通过 Ingress/Service 暴露的 HTTP 端点被调用CronJob Trigger 则按 Cron 表达式定时触发Kafka Trigger 在配置好 broker 后由主题消息触发。注意以上 CLI 命令为 Kubeless 官方用法示例实际可用命令与参数以所用 kubeless 版本文档为准本仓库仅提供 Helm 部署控制面不含 CLI 工具本身。常见问题与注意事项命名空间限制虽然 Chart 允许部署到任意命名空间但 Kubeless 期望运行在kubeless命名空间下否则可能出现控制器与函数资源之间命名空间不匹配的问题。RBAC 默认关闭rbac.create默认false在生产集群中建议开启否则控制器会依赖集群默认权限开启后务必确认集群支持rbac.authorization.k8s.io/v1beta1API。旧版 API 兼容性Chart 大量使用apps/v1beta1、extensions/v1beta1等旧 API如 Kafka 控制器与 UI Deployment在 Kubernetes 1.16 集群中这些 API 已被移除部署可能失败——这是该 Chart 年代久远、仅适用于旧集群的直接体现。版本锁定方式部分镜像如provisionImage及各运行时镜像使用sha256:digest 锁定版本以保证可复现性自定义覆盖镜像时也建议采用同样做法。废弃状态本 Chart 已废弃且不再更新Chart.yaml 中deprecated: true使用时请评估维护风险。总结incubator/kubelessChart 通过「CRD 定义 ConfigMap 运行时配置 多容器控制器 Deployment 可选 UI/Trigger 组件」的组合完整诠释了 Kubernetes 原生 FaaS 的实现思路函数作为自定义资源Function CRD被控制器编排为普通 Deployment/ServiceHTTP、CronJob、Kafka 三类触发器则通过独立控制器监听对应 CRD 完成事件到函数的桥接。无论是想要快速体验 serverless 工作流还是研究 CRD 控制器的编排模式本 Chart 的模板与 values 配置都提供了清晰、可直接运行与改写的参考。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Higress Helm Chart 部署实战指南在 Kubernetes 上安装、配置与调优云原生 API 网关Higress Helm Chart 部署实战指南在 Kubernetes 上安装、配置与调优云原生 API 网关 Higress 是阿里巴巴内部网关实践沉淀API网关后端云原生LLM 网关人工智能MCP 服务.NET 测试项目脚手架与接线修复实战指南让 CI 从零测试发现到稳定运行scaffold-dotnet-test-project.NET 测试项目脚手架与接线修复实战指南让 CI 从零测试发现到稳定运行scaffold dotnet test project 本指南基于 dotWoodpecker Helm Chart 安装指南Kubernetes 部署与 Prometheus 指标监控配置Woodpecker Helm Chart 安装指南Kubernetes 部署与 Prometheus 指标监控配置 Woodpecker 为 KuberneCI/CDDevOps创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表