Kubernetes与Serverless的融合实践:从概念到落地

张开发
2026/4/19 6:52:51 15 分钟阅读

分享文章

Kubernetes与Serverless的融合实践:从概念到落地
Kubernetes与Serverless的融合实践从概念到落地 硬核开场各位技术老铁们今天咱们来聊聊Kubernetes与Serverless的融合。别跟我说你还在纠结是用K8s还是Serverless那都2023年了现在的云原生时代两者不是对立的而是互补的。Kubernetes提供了强大的容器编排能力Serverless提供了极致的弹性和按需付费两者结合起来简直是天作之合。今天susu就带你们从概念到实践一步步实现Kubernetes与Serverless的融合全给你整明白 核心内容1. Kubernetes与Serverless的关系Kubernetes是什么容器编排平台提供了强大的容器管理、调度和编排能力Serverless是什么无服务器架构让开发者专注于代码无需关心基础设施两者的互补性Kubernetes提供基础设施管理Serverless提供上层应用抽象2. KnativeKubernetes原生的Serverless框架Knative是Google主导的Serverless框架基于Kubernetes构建提供了自动扩缩容、事件驱动等Serverless特性。2.1 安装Knative# 安装IstioKnative的网络层 istioctl install --set profiledefault -y # 安装Knative Serving kubectl apply -f https://github.com/knative/serving/releases/download/v0.26.0/serving-crds.yaml kubectl apply -f https://github.com/knative/serving/releases/download/v0.26.0/serving-core.yaml # 安装Knative Eventing kubectl apply -f https://github.com/knative/eventing/releases/download/v0.26.0/eventing-crds.yaml kubectl apply -f https://github.com/knative/eventing/releases/download/v0.26.0/eventing-core.yaml # 查看Knative组件状态 kubectl get pods -n knative-serving kubectl get pods -n knative-eventing2.2 部署Knative服务apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello-world namespace: default spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: Kubernetes# 部署服务 kubectl apply -f hello-world.yaml # 查看服务状态 kubectl get ksvc # 获取服务URL kubectl get ksvc hello-world -o jsonpath{.status.url} # 测试服务 curl $(kubectl get ksvc hello-world -o jsonpath{.status.url})3. OpenFaaS函数即服务平台OpenFaaS是一个开源的Serverless框架可以在Kubernetes上运行支持多种编程语言。3.1 安装OpenFaaS# 克隆OpenFaaS仓库 git clone https://github.com/openfaas/faas-netes.git cd faas-netes # 安装OpenFaaS kubectl apply -f namespaces.yml kubectl apply -f ./yaml # 查看OpenFaaS组件状态 kubectl get pods -n openfaas kubectl get pods -n openfaas-fn # 端口转发 kubectl port-forward svc/gateway -n openfaas 8080:80803.2 部署OpenFaaS函数# 安装faas-cli curl -sSL https://cli.openfaas.com | sudo sh # 登录OpenFaaS faas-cli login --gateway http://localhost:8080 --username admin --password $(kubectl get secret -n openfaas basic-auth -o jsonpath{.data.basic-auth-password} | base64 --decode) # 创建函数 faas-cli new --lang go hello-function # 部署函数 faas-cli up --gateway http://localhost:8080 # 测试函数 curl http://localhost:8080/function/hello-function4. KEDAKubernetes事件驱动自动扩缩容KEDA是一个Kubernetes原生的事件驱动自动扩缩容工具可以根据事件源的指标自动扩缩容Pod。4.1 安装KEDA# 安装KEDA helm repo add kedacore https://kedacore.github.io/charts helm repo update helm install keda kedacore/keda --namespace keda --create-namespace # 查看KEDA组件状态 kubectl get pods -n keda4.2 配置KEDA自动扩缩容apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: rabbitmq-scaler namespace: default spec: scaleTargetRef: name: rabbitmq-consumer minReplicaCount: 0 maxReplicaCount: 10 pollingInterval: 30 cooldownPeriod: 300 triggers: - type: rabbitmq metadata: host: amqp://guest:guestrabbitmq:5672 queueName: orders queueLength: 5# 部署ScaledObject kubectl apply -f keda-scaler.yaml # 查看自动扩缩容状态 kubectl get scaledobject kubectl get hpa5. Serverless应用开发最佳实践5.1 函数设计原则无状态函数应该是无状态的不依赖于本地存储幂等性相同的输入应该产生相同的输出超时设置合理设置函数超时时间避免长时间运行资源配置根据函数的实际需求配置CPU和内存5.2 事件驱动架构apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: hello-world-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.samples.helloworld subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: hello-world6. 性能优化与监控6.1 冷启动优化使用较小的容器镜像减少镜像拉取时间预加载函数设置最小副本数避免冷启动使用更快的语言如Go、Rust等编译型语言优化依赖项减少函数的依赖项大小6.2 监控Serverless应用# 安装Prometheus和Grafana helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace # 查看监控指标 kubectl port-forward svc/prometheus-server -n monitoring 9090:9090 kubectl port-forward svc/grafana -n monitoring 3000:30007. 实际应用案例7.1 构建Serverless APIapiVersion: serving.knative.dev/v1 kind: Service metadata: name: api-gateway namespace: default spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: API Gateway --- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: user-service namespace: default spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: User Service --- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: order-service namespace: default spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: Order Service7.2 构建事件驱动系统apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default namespace: default --- apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: order-trigger namespace: default spec: broker: default filter: attributes: type: order.created subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: order-service --- apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: payment-trigger namespace: default spec: broker: default filter: attributes: type: payment.processed subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: payment-service8. 安全与最佳实践8.1 安全配置使用最小权限原则为Serverless函数配置最小的权限加密敏感信息使用Secret管理敏感信息网络隔离配置网络策略限制函数间的通信定期更新镜像及时更新函数镜像修复安全漏洞8.2 成本优化合理设置自动扩缩容参数避免过度扩容使用合适的资源配置根据函数需求配置CPU和内存设置函数超时避免函数长时间运行导致的成本增加使用预留实例对于高频调用的函数使用预留实例减少冷启动️ 最佳实践架构设计采用微服务架构将应用拆分为多个小型函数使用事件驱动架构实现松耦合的系统设计合理规划函数的边界避免函数过大或过小开发实践使用无状态设计避免函数依赖本地存储实现幂等性确保函数可以安全重试使用环境变量管理配置避免硬编码部署策略使用CI/CD流水线自动化部署Serverless函数实现蓝绿部署减少部署风险定期进行函数测试确保功能正常监控与告警监控函数的调用次数、响应时间、错误率设置合理的告警阈值及时发现问题分析函数的性能瓶颈进行优化成本管理监控函数的资源使用情况优化资源配置设置函数的超时时间避免长时间运行使用预留实例减少冷启动时间和成本 总结Kubernetes与Serverless的融合是云原生时代的必然趋势。通过本文的实践你应该已经掌握了Knative的安装和使用构建Kubernetes原生的Serverless服务OpenFaaS的部署和函数开发实现函数即服务KEDA的配置和使用实现事件驱动的自动扩缩容Serverless应用的开发最佳实践包括函数设计、事件驱动架构性能优化与监控提高Serverless应用的性能和可靠性安全与成本优化确保Serverless应用的安全和经济记住Serverless不是银弹而是一种工具。在实际应用中要根据业务需求和场景选择合适的技术栈充分发挥Kubernetes和Serverless的优势。susu碎碎念冷启动是Serverless的固有特性要合理设计应用架构来缓解函数的大小要适中过大的函数会增加冷启动时间事件驱动架构需要考虑事件的可靠性和顺序性监控是Serverless应用的关键要建立完善的监控体系成本优化是Serverless的重要考量要合理配置资源和扩缩容策略觉得有用点个赞再走咱们下期见

更多文章