1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG076-Kubernetes无服务器计算(Knative)实战

内容简介

本篇文章主要介绍Kubernetes中无服务器计算(Knative)的配置与使用方法。风哥教程参考Kubernetes官方文档无服务器相关内容,结合生产环境实际操作场景,详细讲解Knative的安装、配置和最佳实践。

目录大纲

Part01-基础概念与理论知识

1.1 无服务器计算概述

无服务器计算是一种云计算模型,它允许开发者专注于代码开发,而无需管理服务器基础设施。无服务器计算的特点包括:

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

1.2 Knative架构

Knative是一个基于Kubernetes的无服务器平台,它提供了以下组件:

  • Knative Serving
    • 自动扩缩容:包括缩容到零
    • 流量管理:支持蓝绿部署、金丝雀发布
    • 自动TLS证书管理
    • 服务版本管理
  • Knative Eventing
    • 事件源管理:支持多种事件源
    • 事件通道:可靠的事件传递
    • 事件接收器:处理事件的服务
    • 事件代理:路由事件到接收器
  • Knative Functions
    • 函数框架:简化函数开发
    • 函数模板:提供常见语言的模板
    • 函数部署:一键部署函数

Part02-生产环境规划与建议

2.1 无服务器部署策略

  • 应用类型
    • API服务:处理HTTP请求的服务
    • 事件处理:处理事件的函数
    • 数据处理:处理数据的任务
  • 资源配置
    • CPU和内存请求:根据应用需求设置
    • 并发限制:控制同时处理的请求数
    • 超时设置:设置函数执行超时时间
  • 扩缩容策略
    • 最小实例数:设置最小运行实例数
    • 最大实例数:设置最大运行实例数
    • 扩缩容指标:基于CPU、内存或并发请求

2.2 Knative配置建议

  • 网络配置
    • 使用Istio作为网络层
    • 配置适当的Ingress
    • 设置TLS证书
  • 存储配置
    • 使用临时存储:适合无状态应用
    • ,风哥提示:。

    • 使用持久存储:适合需要持久化数据的应用
  • 监控与日志
    • 集成Prometheus监控
    • 集成ELK或EFK日志系统
    • 设置告警规则

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

3.1 Knative安装

安装Knative,风哥提示:。

安装Istio

# 下载Istio
[root@fgedu-master ~]# curl -L https://istio.io/downloadIstio | sh –

# 进入Istio目录
[root@fgedu-master ~]# cd istio-1.16.0

# 添加istioctl到PATH
[root@fgedu-master istio-1.16.0]# export PATH=$PATH:$(pwd)/bin

# 安装Istio
[root@fgedu-master istio-1.16.0]# istioctl install –set profile=default -y

安装Knative Serving

# 安装Knative Serving CRDs
[root@fgedu-master ~]# kubectl apply -f https://github.com/knative/serving/releases/download/v1.8.0/serving-crds.yaml

# 安装Knative Serving核心组件
[root@fgedu-master ~]# kubectl apply -f https://github.com/knative/serving/releases/download/v1.8.0/serving-core.yaml

安装Knative Eventing

# 安装Knative Eventing CRDs
[root@fgedu-master ~]# kubectl apply -f https://github.com/knative/eventing/releases/download/v1.8.0/eventing-crds.yaml

# 安装Knative Eventing核心组件
[root@fgedu-master ~]# kubectl apply -f https://github.com/knative/eventing/releases/download/v1.8.0/eventing-core.yaml

验证安装

# 查看Knative组件
[root@fgedu-master ~]# kubectl get pods -n knative-serving
[root@fgedu-master ~]# kubectl get pods -n knative-eventing

# knative-serving命名空间
NAME READY STATUS RESTARTS AGE
activator-6f8598c89b-2k8x9 1/1 Running 0 5m
autoscaler-78d6878595-5k9x8 1/1 Running 0 5m
controller-7f9f85b84d-9k8x9 1/1 Running 0 5m
webhook-6b8b945955-2k8x9 1/1 Running 0 5m

# knative-eventing命名空间
NAME READY STATUS RESTARTS AGE
eventing-controller-558b8b4b76-2k8x9 1/1 Running 0 5m
eventing-webhook-7c5c9f596c-9k8x9 1/1 Running 0 5m
imc-controller-668bc79964-5k9x8 1/1 Running 0 5m
imc-dispatcher-558b8b4b76-5k9x8 1/1 Running 0 5m
mt-broker-controller-7c5c9f596c-2k8x9 1/1 Running 0 5m
mt-broker-filter-6b8b945955-5k9x8 1/1 Running 0 5m
mt-broker-ingress-78d6878595-2k8x9 1/1 Running 0 5m

3.2 无服务器应用部署

部署无服务器应用。

创建服务

# 创建服务配置
[root@fgedu-master ~]# cat > service.yaml << EOF apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello-world namespace: default,学习交流加群风哥微信: itpux-com。 spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-goenv: - name: TARGET value: "fgedu" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi EOF
# 应用服务配置
[root@fgedu-master ~]# kubectl apply -f service.yaml

service.serving.knative.dev/hello-world created

查看服务

# 查看服务
[root@fgedu-master ~]# kubectl get ksvc

NAME URL LATESTCREATED LATESTREADY READY REASON
hello-world http://hello-world.default.fgedu.net.cn hello-world-00001 hello-world-00001 True

测试服务

# 测试服务
[root@fgedu-master ~]# curl http://hello-world.default.fgedu.net.cn

Hello fgedu!

3.3 事件驱动架构

配置事件驱动架构:

创建Broker

# 创建Broker
[root@fgedu-master ~]# kubectl create namespace fgedu-eventing
[root@fgedu-master ~]# kubectl apply -f – << EOF apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default namespace: fgedu-eventing EOF

创建Trigger

# 创建Trigger
[root@fgedu-master ~]# kubectl apply -f – << EOF apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: hello-trigger namespace: fgedu-eventing spec: broker: default filter: attributes: type: dev.knative.samples.helloworld subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: hello-world namespace: default EOF

发送事件

# 发送事件
[root@fgedu-master ~]# curl -X POST “http://broker-ingress.knative-eventing.svc.cluster.local/fgedu-eventing/default” \
-H “Ce-Id: 123456789” \,学习交流加群风哥QQ113257174。
-H “Ce-Source: curl-source” \
-H “Ce-Type: dev.knative.samples.helloworld” \
-H “Ce-Specversion: 1.0” \
-H “Content-Type: application/json” \
-d ‘{“message”: “Hello Knative!”}’

Part04-生产案例与实战讲解

4.1 企业级无服务器应用部署

某企业需要部署无服务器应用,用于处理API请求和事件处理。

案例背景

  • 应用类型:API服务和事件处理函数
  • 技术栈:Go、Python
  • 业务需求:
    • 自动扩缩容:根据负载自动调整资源
    • 流量管理:支持蓝绿部署和金丝雀发布
    • 事件驱动:处理来自多种源的事件
    • 监控与日志:实时监控应用状态和日志

部署方案

# 1. 安装Knative
# 安装Istio
curl -L https://istio.io/downloadIstio | sh –
cd istio-1.16.0
export PATH=$PATH:$(pwd)/bin
istioctl install –set profile=default -y
# 安装Knative Serving
kubectl apply -f https://github.com/knative/serving/releases/download/v1.8.0/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/v1.8.0/serving-core.yaml
# 安装Knative Eventing
kubectl apply -f https://github.com/knative/eventing/releases/download/v1.8.0/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/v1.8.0/eventing-core.yaml
# 2. 部署API服务
cat > api-service.yaml << EOF apiVersion: serving.knative.dev/v1 kind: Service metadata: name: user-api namespace: fgedu-production spec: template: spec: containers: - image: fgedu/user-api:v1.0 env: - name: DB_HOST value: "mysql" - name: DB_PORT value: "3306" - name: DB_NAME value: "fgedudb" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi traffic: - revisionName: user-api-00001 percent: 100 EOF kubectl apply -f api-service.yaml # 3. 部署事件处理函数 cat > event-handler.yaml << EOF apiVersion: serving.knative.dev/v1 kind: Service metadata: name: order-handler namespace: fgedu-production spec: template: spec: containers: - image: fgedu/order-handler:v1.0 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m,更多视频教程www.fgedu.net.cn。 memory: 256Mi EOF kubectl apply -f event-handler.yaml # 4. 配置事件驱动 # 创建Broker kubectl create namespace fgedu-eventing kubectl apply -f - << EOF apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default namespace: fgedu-eventing EOF # 创建Trigger kubectl apply -f - << EOF apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: order-trigger namespace: fgedu-eventing spec: broker: default filter: attributes: type: com.fgedu.order.created subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: order-handler namespace: fgedu-production EOF # 5. 配置流量管理 # 蓝绿部署 cat > blue-green.yaml << EOF apiVersion: serving.knative.dev/v1 kind: Service metadata: name: user-api namespace: fgedu-production spec: template: metadata: name: user-api-v2 spec: containers: - image: fgedu/user-api:v2.0 env: - name: DB_HOST value: "mysql" - name: DB_PORT value: "3306" - name: DB_NAME value: "fgedudb" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi traffic: - revisionName: user-api-00001 percent: 50 - revisionName: user-api-v2 percent: 50 EOF kubectl apply -f blue-green.yaml # 6. 验证部署 kubectl get ksvc -n fgedu-production kubectl get broker -n fgedu-eventing kubectl get trigger -n fgedu-eventing

4.2 事件驱动架构实战

某企业需要构建事件驱动架构,用于处理来自多种源的事件。。。

案例背景

  • 事件源:Kafka、GitHub、CloudEvents
  • 事件处理:函数和服务
  • 业务需求:
    • 可靠的事件传递
    • 事件过滤和路由
    • 事件处理的可扩展性

部署方案

,更多学习教程公众号风哥教程itpux_com。

# 1. 安装事件源
[root@fgedu-master ~]# kubectl apply -f https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/v1.8.0/kafka-broker.yaml

# 2. 创建Kafka Broker
[root@fgedu-master ~]# kubectl apply -f – << EOF apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaBroker metadata: name: kafka-broker namespace: fgedu-eventing spec: config: bootstrap.servers: kafka:9092 EOF
# 3. 创建事件源
[root@fgedu-master ~]# kubectl apply -f – << EOF apiVersion: sources.knative.dev/v1 kind: KafkaSource metadata: name: kafka-source namespace: fgedu-eventing spec: bootstrapServers: - kafka:9092 topics: - orders consumerGroup: knative-group sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: kafka-broker namespace: fgedu-eventing EOF
# 4. 创建事件处理服务
[root@fgedu-master ~]# cat > event-processor.yaml << EOF apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-processor namespace: fgedu-production spec: template: spec: containers: - image: fgedu/event-processor:v1.0 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi EOF
# 应用事件处理服务配置
[root@fgedu-master ~]# kubectl apply -f event-processor.yaml

# 5. 创建Trigger
[root@fgedu-master ~]# kubectl apply -f – << EOF apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: kafka-trigger namespace: fgedu-eventing spec: broker: kafka-broker filter: attributes: type: com.fgedu.order.created subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-processor namespace: fgedu-production EOF。

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

# 6. 验证部署
[root@fgedu-master ~]# kubectl get kafka source -n fgedu-eventing
[root@fgedu-master ~]# kubectl get broker -n fgedu-eventing
[root@fgedu-master ~]# kubectl get trigger -n fgedu-eventing
[root@fgedu-master ~]# kubectl get ksvc -n fgedu-production

Part05-风哥经验总结与分享

5.1 Knative最佳实践

  • 应用设计
    • 无状态设计:避免使用本地存储
    • 短暂性:设计为可随时启动和停止
    • 事件驱动:使用事件触发执行
  • 资源配置
    • 合理设置CPU和内存请求
    • 设置适当的并发限制
    • 配置超时时间
  • 扩缩容策略
    • 根据业务需求设置最小实例数
    • 设置合理的最大实例数
    • 选择合适的扩缩容指标
  • 流量管理
    • 使用蓝绿部署进行版本更新
    • 使用金丝雀发布进行灰度测试
    • 配置适当的路由规则
  • 监控与日志
    • 集成Prometheus监控
    • 集成ELK或EFK日志系统
    • 设置告警规则
  • 安全
    • 使用TLS加密
    • 配置适当的权限
    • 使用Secret存储敏感信息

5.2 常见问题与解决方案

问题 原因 解决方案
冷启动延迟 实例缩容到零 设置最小实例数
资源不足 资源配置过低 增加资源请求和限制
事件丢失 事件处理失败 配置重试机制
流量管理失败 路由规则错误 检查路由配置
监控数据缺失 监控配置错误 检查监控配置
日志管理困难 日志分散 使用集中式日志管理
安全漏洞 镜像存在安全漏洞 定期扫描镜像,更新基础镜像
部署失败 YAML配置错误 检查YAML配置语法

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

联系我们

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

微信号:itpux-com

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