1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG065-Kubernetes Serverless实战解析

目录大纲

Part01-基础概念与理论知识

1.1 Serverless概念

Serverless是一种云计算模型,它具有以下特点:

  • 无服务器管理:开发者无需管理服务器等基础设施
  • 按需付费:根据实际使用的资源付费,而非预分配资源
  • 自动扩缩容:根据负载自动调整资源
  • 事件驱动:基于事件触发执行代码
  • 短暂性:函数执行完成后,资源被释放

1.2 Kubernetes中的Serverless

在Kubernetes环境中,Serverless通常通过以下项目实现:

  • Knative:由Google开源的Serverless框架,运行在Kubernetes上
  • OpenFaaS:开源的Serverless框架,支持Kubernetes
  • Cloud Native Functions (CNF):云原生函数框架
  • KEDA:Kubernetes Event-driven Autoscaling,基于事件的自动扩缩容

1.3 Knative架构

Knative的架构由以下组件组成:

  • Knative Serving:负责部署和管理无状态服务
  • Knative Eventing:负责事件的产生、传递和消费
  • Knative Build:负责构建容器镜像(已被Tekton取代)

1.4 Serverless的优势

  • 降低运维成本:无需管理服务器等基础设施
  • 提高开发效率:开发者可以专注于代码开发
  • 弹性伸缩:根据负载自动调整资源
  • 按需付费:根据实际使用的资源付费
  • 快速部署:简化应用部署流程
,风哥提示:。

Part02-生产环境规划与建议

2.1 Serverless应用场景

Serverless适用于以下场景,风哥提示:。

  • 事件处理:处理来自各种事件源的事件
  • API后端:构建RESTful API
  • 数据处理:处理和转换数据
  • 定时任务:执行定时任务
  • 移动应用后端:为移动应用提供后端服务
  • IoT数据处理:处理来自IoT设备的数据

2.2 资源规划

在规划Serverless资源时,需要考虑以下因素:

  • 计算资源:函数执行所需的CPU和内存资源
  • 存储资源:函数所需的存储资源
  • 网络资源:函数的网络带宽需求
  • 并发限制:同时执行的函数数量
  • 冷启动时间:函数首次执行的启动时间

2.3 部署策略

在部署Serverless应用时,有以下部署策略。。

  • 单一集群部署:在单个Kubernetes集群中部署Serverless平台
  • 多集群部署:在多个Kubernetes集群中部署Serverless平台
  • 混合部署:结合云厂商的Serverless服务和自建Serverless平台

Part03-生产环境项目实施方案

3.1 安装Knative

3.1.1 安装Knative Serving

# 安装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

执行 →

customresourcedefinition.apiextensions.k8s.io/certificates.networking.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/clusteringresses.networking.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/configurations.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/domainmappings.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/revisions.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/routes.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/services.serving.knative.dev created
namespace/knative-serving created
serviceaccount/controller created
serviceaccount/domainmapping-webhook created,学习交流加群风哥微信: itpux-com。
serviceaccount/net-contour-controller created
serviceaccount/webhook created
clusterrole.rbac.authorization.k8s.io/knative-serving-controller created
clusterrole.rbac.authorization.k8s.io/knative-serving-domainmapping created
clusterrole.rbac.authorization.k8s.io/knative-serving-webhook created
clusterrole.rbac.authorization.k8s.io/net-contour-controller created
clusterrolebinding.rbac.authorization.k8s.io/knative-serving-controller created
clusterrolebinding.rbac.authorization.k8s.io/knative-serving-domainmapping created
clusterrolebinding.rbac.authorization.k8s.io/knative-serving-webhook created
clusterrolebinding.rbac.authorization.k8s.io/net-contour-controller created
configmap/config-autoscaler created
configmap/config-defaults created
configmap/config-deployment created
configmap/config-domain created
configmap/config-features created
configmap/config-gc created
configmap/config-network created
configmap/config-observability created
configmap/config-tracing created
service/activator-service created
service/autoscaler created
service/controller created
service/domainmapping-webhook created
service/webhook created
deployment.apps/activator created
deployment.apps/autoscaler created
deployment.apps/controller created
deployment.apps/domainmapping-webhook created
deployment.apps/webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.serving.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.serving.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/webhook.serving.knative.dev created

3.1.2 安装Knative Eventing

# 安装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

执行 →

customresourcedefinition.apiextensions.k8s.io/brokers.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/eventtypes.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/pingsources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/subscriptions.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/triggerchannels.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev created
namespace/knative-eventing created
serviceaccount/eventing-controller created
serviceaccount/eventing-webhook created
clusterrole.rbac.authorization.k8s.io/knative-eventing-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-webhook created
clusterrolebinding.rbac.authorization.k8s.io/knative-eventing-controller created,学习交流加群风哥QQ113257174。
clusterrolebinding.rbac.authorization.k8s.io/knative-eventing-webhook created
configmap/config-br-defaults created
configmap/config-eventing created
configmap/config-imc-channel created
configmap/config-kafka-channel created
configmap/config-mt-channel-broker created
service/eventing-controller created
service/eventing-webhook created
deployment.apps/eventing-controller created
deployment.apps/eventing-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.eventing.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.eventing.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/webhook.eventing.knative.dev created

3.2 安装KEDA

3.2.1 安装KEDA

# 添加KEDA Helm仓库
helm repo add kedacore https://kedacore.github.io/charts
# 安装KEDA
helm install keda kedacore/keda --namespace keda --create-namespace

执行 →

NAME: keda
LAST DEPLOYED: Thu Nov  2 10:00:00 2023
NAMESPACE: keda
STATUS: deployed
REVISION: 1
TEST SUITE: None

Part04-生产案例与实战讲解

4.1 实战案例:部署Knative服务

4.1.1 创建Knative服务

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: fgedu-service
  namespace: default
spec:
  template:
    spec:
      containers:
      - image: gcr.io/knative-samples/helloworld-go
        env:
        - name: TARGET
          value: "fgedu"
        resources:,更多视频教程www.fgedu.net.cn。
          limits:
            cpu: 100m
            memory: 128Mi
          requests:
            cpu: 50m
            memory: 64Mi

4.1.2 部署Knative服务

# 部署Knative服务
kubectl apply -f knative-service.yaml
# 查看服务状态
kubectl get ksvc

执行 →

service.serving.knative.dev/fgedu-service created
NAME            URL                                              LATESTCREATED         LATESTREADY           READY   REASON
fgedu-service   http://fgedu-service.default.example.com        fgedu-service-00001   fgedu-service-00001   True    

4.2 实战案例:使用KEDA进行自动扩缩容

4.2.1 创建KEDA ScaledObject

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: fgedu-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: fgedu-deployment
  minReplicaCount: 0
  maxReplicaCount: 10
  pollingInterval: 30
  cooldownPeriod: 300
  triggers:
  - type: prometheus
    metadata:
      serverAddress: http://prometheus-server.monitoring:9090
      metricName: http_requests_total
      threshold: "10"
      query: sum(rate(http_requests_total{service="fgedu-service"}[1m]))

4.2.2 部署ScaledObject

# 部署ScaledObject
kubectl apply -f keda-scaledobject.yaml
# 查看ScaledObject状态
kubectl get scaledobject

执行 →

scaledobject.keda.sh/fgedu-scaledobject created,更多学习教程公众号风哥教程itpux_com。
NAME                SCALETARGETKIND      SCALETARGETNAME     MIN   MAX   TRIGGERS     AGE
fgedu-scaledobject  Deployment          fgedu-deployment    0     10    prometheus   5m

4.3 实战案例:使用Knative Eventing

4.3.1 创建Broker

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
  name: fgedu-broker
  namespace: default

4.3.2 创建Trigger

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: fgedu-trigger
  namespace: default
spec:
  broker: fgedu-broker
  filter:
    attributes:
      type: dev.knative.samples.helloworld
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: fgedu-service

4.3.3 部署Broker和Trigger

# 部署Broker
kubectl apply -f broker.yaml
# 部署Trigger
kubectl apply -f trigger.yaml
# 查看Broker和Trigger状态
kubectl get broker,trigger

执行 →

broker.eventing.knative.dev/fgedu-broker created
trigger.eventing.knative.dev/fgedu-trigger created
NAME                             READY   REASON   AGE
broker.eventing.knative.dev/fgedu-broker   True             5m
NAME                              READY   REASON   AGE
trigger.eventing.knative.dev/fgedu-trigger   True             3m

,from K8S+DB视频:www.itpux.com。

Part05-风哥经验总结与分享

5.1 Serverless最佳实践

  • 函数设计:保持函数小巧、专注,每个函数只做一件事
  • 冷启动优化:减少函数的依赖,使用较小的基础镜像
  • 状态管理:避免在函数中存储状态,使用外部存储
  • 错误处理:实现适当的错误处理和重试机制
  • 监控和日志:为函数配置监控和日志,便于故障排查

5.2 生产环境建议

  • 网络配置:确保Serverless平台和函数之间的网络连接稳定
  • 安全配置:为函数配置适当的安全策略,如访问控制、加密等
  • 资源配置:根据函数的实际需求,配置适当的资源限制
  • 自动扩缩容:配置合理的自动扩缩容策略,确保函数能够应对流量变化
  • 备份和恢复:为函数的配置和依赖设置备份策略

5.3 常见问题与解决方案

  • 冷启动延迟:使用预热机制,或选择合适的运行时
  • 资源限制:根据函数的实际需求,调整资源限制
  • 超时问题:调整函数的超时设置,确保函数能够完成执行
  • 依赖管理:合理管理函数的依赖,避免依赖过多导致冷启动时间过长
  • 监控和日志:配置适当的监控和日志,便于故障排查

5.4 性能优化建议

  • 函数优化:优化函数代码,减少执行时间
  • 依赖优化:减少函数的依赖,使用较小的基础镜像
  • 并行处理:对于可以并行处理的任务,使用并行执行
  • 缓存策略:使用缓存减少重复计算,提高响应速度
  • 批处理:对于大量数据的处理,使用批处理减少函数调用次数

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息