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
