Knative 实践:人脸图片识别

简介: 标准 Serverless 框架和人脸识别服务结合会产生怎样的火花?本文介绍如何通过 Knative 实现人脸识别服务,看看能否给你带来不一样的体验。

标准 Serverless 框架和人脸识别服务结合会产生怎样的火花?本文介绍如何通过 Knative 实现人脸识别服务,看看能否给你带来不一样的体验。

场景

通过 OSS 控制台上传照片,MnsOss 事件源接收图片上传的事件信息,发送到 Knatvie Eventing,通过Broker/Trigger事件处理模型之后,接着触发 Knative Serving 中的人脸识别服务进行分析。最后把分析之后的图片回传到 OSS。
image

准备

  • 安装 Knative Serving 和 Eventing, 参见部署Knative
  • 安装 Knative MnsOssSource 事件源服务
    容器服务控制台->Knative->组件管理,选择 MnsOss 安装

image

创建 OSS 事件通知

选择 Bucket, 点击事件通知页签
image

创建规则:
image

创建完成之后,会在MNS中生成相应的Topic:
image

获取公网Topic访问连接:
image

这里我们选择公网访问连接:https://xxxx.mns.cn-shanghai.aliyuncs.com/

创建 Mns Token

获取上面的公网 Topic 访问连接以及ak, sk信息。按照下面的格式进行base64进行编码处理,生成访问Token。

# echo '{ "url":"https://xxxx.mns.cn-shanghai.aliyuncs.com/", "accessKeyId":"xxx","accessKeySecret":"xx" }' | base64

设置 mnsoss-secret.yaml 内容。则需要设置 mns 如下:

apiVersion: v1
kind: Secret
metadata:
  name: mnsoss-secret
type: Opaque
data:
  mns: eyAidXJsIjoiaHR0cHM6Ly94eHh4Lm1ucy5jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20vIiwgImFjY2Vzc0tleUlkIjoieHh4IiwiYWNjZXNzS2V5U2VjcmV0IjoieHgiIH0K

执行命令使其生效:

kubectl apply -f mnsoss-secret.yaml

创建 Service Account及角色绑定

设置 mnsoss-sa.yaml 内容。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eventing-sources-mnsoss
subjects:
- kind: ServiceAccount
  name: mnsoss-sa
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: eventing-sources-mnsoss-controller

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: mnsoss-sa

执行命令使其生效:

kubectl apply -f mnsoss-sa.yaml

设置isto egress(若当前命名空间下启用了istio注入)

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: alimns-ext
spec:
  hosts:
  - "*.aliyuncs.com"
  ports:
  - number: 443
    name: https
    protocol: HTTPS

创建 Broker

kubectl label namespace default knative-eventing-injection=enabled

创建 MnsOss 事件源

为了接收 MnsOss 产生的事件, 需要创建 MnsOssSource 用于接收事件。mnsoss-source.yaml如下:

apiVersion: sources.eventing.knative.dev/v1alpha1
kind: MnsOssSource
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: mnsoss-face
spec:
  # Add fields here
  serviceAccountName: mnsoss-sa
  accessToken:
    secretKeyRef:
      name: mnsoss-secret
      key: mns
  sink:
    apiVersion: eventing.knative.dev/v1alpha1
    kind: Broker
    name: default
  topic: mns-en-topics-oss-face-image-2381221888dds9129

参数说明:

topic:表示 MNS 主题名称

执行 kubectl 命令:

kubectl  apply -f mnsoss-source.yaml

创建 Knative Service

为了验证 MnsOssSource 是否可以正常工作,可以这里使用人脸识别的的 Knative Service 示例。service.yaml如下:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: face-recognition
  namespace: default
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/face-recognition:v0.2.7
        command:
        - '/app/face-recognition'
        - --configpath=/app/config
        env:
        - name: ACCESSKEY_ID
          value: "xxx"
        - name: ACCESSKEY_SECRET
          value: "xxx"
        - name: UPLOAD_OSS_PATH
          value: "face-image/target"

env参数说明:

UPLOAD_OSS_PATH:表示目标图片的存放位置
ACCESSKEY_ID:用户ak信息
ACCESSKEY_SECRET:用户sk信息

执行以下命令创建 Service。

kubectl apply -f service.yaml

创建 Trigger

创建 Trigger, 订阅事件信息。trigger.yaml如下:

apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:
  name: face-trigger
  namespace: default
spec:
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1alpha1
      kind: Service
      name: face-recognition

执行 kubectl 命令:

kubectl apply -f trigger.yaml

验证

通过 OSS 上传人脸图片。会在目标图片的存放位置生成人脸识别结果图片。
识别前:
46985432075_56c3190d32_o

识别结果:
46985432075_56c3190d32_o

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
Shell 开发工具
【优化篇】telegraf+shell脚本实现秒级的服务状态异常监测与告警
【优化篇】telegraf+shell脚本实现秒级的服务状态异常监测与告警
593 0
|
缓存 弹性计算 Kubernetes
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
关注“阿里巴巴云原生”公众号,后台回复 “ 416 ” 即可下载 PPT。
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
|
6月前
|
网络协议 Java 数据格式
【赵渝强老师】Docker容器的跨节点通信
本文详解Docker容器跨主机通信的三种方案,重点介绍基于Overlay网络的实现:通过ZooKeeper注册中心配置Docker集群,创建overlay网络,使不同主机上的容器能用虚拟IP直接互通,并提供完整部署步骤与验证方法。(239字)
490 3
|
7月前
|
机器学习/深度学习 并行计算 Ubuntu
WSL安装
本文详解WSL2配置Ubuntu(推荐20.04)用于深度学习:启用虚拟化、安装、显卡驱动配置、安全卸载方法;重点解决libcudnn/libcuda软链接失效问题,提供临时修复与永久生效(.bashrc)两种方案;并配置Windows代理、内存/网络等高级选项,兼顾开发与训练需求。
579 1
|
机器学习/深度学习 边缘计算 数据可视化
MyEMS 深度解析:碳管理赋能与系统集成的实践路径
MyEMS 是一款集碳管理与能源优化于一体的开源系统,具备多标准碳核算、碳足迹可视化、碳成本分析等功能,助力企业实现精准碳减排。系统支持与工业、建筑、政务平台等多系统集成,打破数据孤岛,提升能效。依托活跃的开源社区与丰富实践案例,MyEMS 持续迭代,推动绿色转型。
801 1
|
人工智能 自然语言处理 程序员
提交通义灵码创新实践文章,重磅好礼只等你来!
通义灵码创新实践征集赛正式开启,发布征文有机会获得重磅好礼+流量福利,快来参加吧!
23637 21
|
机器学习/深度学习 供应链 算法
量子计算:从理论到实践的跨越
量子计算基于量子力学原理,利用量子比特的叠加态和纠缠特性,展现出远超经典计算机的计算能力。本文从基本概念、发展历程、应用场景及未来挑战四个方面,全面介绍量子计算从理论到实践的跨越,展望其在优化问题、量子化学、机器学习等领域的广泛应用前景。
1618 3
|
存储 监控 Go
面向OpenTelemetry的Golang应用无侵入插桩技术
文章主要讲述了阿里云 ARMS 团队与程序语言与编译器团队合作研发的面向OpenTelemetry的Golang应用无侵入插桩技术解决方案,旨在解决Golang应用监控的挑战。
1448 9
|
负载均衡 Kubernetes 网络协议
如何在集群的负载均衡过程保留请求源IP
本文探讨了在Kubernetes (k8s)集群中如何确保服务获取到请求的源IP。通常,源IP可能会因网络地址转换(NAT)和代理服务器而丢失。为保留源IP,文章建议在代理服务器层添加HTTP头`X-REAL-IP`字段。在K8s中,通过设置`externalTrafficPolicy: Local`可保留源IP,但这会牺牲负载均衡。使用Ingress时,可通过配置Ingress Controller的`use-forwarded-headers`并调整ConfigMap来同时保留源IP和实现负载均衡。文章适用于对网络和K8s感兴趣的读者。
733 3
|
存储 数据采集 监控
Telegraf 使用小结
Telegraf 使用小结
717 1