共计 5322 个字符,预计需要花费 14 分钟才能阅读完成。
简介:阿里云 Knative 基于 ASK 之上,在齐全兼容社区 Knaitve 的同时对 FC、ECI 工作负载进行对立利用编排,反对事件驱动、主动弹性,为您提供对立的 Serverless 利用编程模型。
背景
阿里云 Serverless Kubernetes(ASK)是阿里云推出的无服务器 Kubernetes 容器服务,底层基于 ECI(Elastic Container Instance)让您无需购买 ECS 节点就能间接创立平安隔离的容器利用。ASK 通过了 Kubernetes 的一致性测试,给您提供了齐全兼容社区 Kubernetes 的应用体验。
Knative 是一款基于 Kubernetes 的开源 Serverless 利用编排框架,其指标是制订云原生、跨平台的 Serverless 利用编排规范。阿里云 Knative 基于 ASK 之上,在齐全兼容社区 Knaitve 的同时对 FC、ECI 工作负载进行对立利用编排,反对事件驱动、主动弹性,为您提供对立的 Serverless 利用编程模型。
架构
接下来咱们通过一个弹幕服务 demo 进行介绍。该 demo 次要包含 HomePage、事件驱动、音讯解决这 3 局部。
HomePage 次要用于发送和接管弹幕。事件驱动用来接管事件,并进行事件过滤、流转。音讯解决,用于解决弹幕音讯。其中 HomePage、音讯解决通过 Knative Serving 部署别离到 FC、ECI,事件驱动通过 Knative Eventing 部署到 ECI。
弹幕服务 demo 次要流程如图,用户通过前端发送弹幕音讯到 HomePage,HomePage 接着将弹幕发送到 Kafka,事件驱动接管弹幕音讯,而后路由到音讯解决进行加工,待弹幕加工完之后,将弹幕后果发送到表格存储中,最初前端获取弹幕后果在页面展现。
接下来咱们开始部署该弹幕服务 demo, 操作包含以下内容:
首先部署音讯解决,而后部署事件驱动,接着部署 HomePage,待部署实现之后进行弹幕服务拜访
第一步:部署音讯解决
该服务用于接管事件驱动发送的弹幕申请,并依据申请数进行主动扩缩容,待弹幕音讯解决实现之后将后果发送到表格存储。部署之前,咱们先确认以后无工作负载,以便察看部署之后的后果。
- 抉择 ask 集群
- 在集群治理页左侧导航栏中,抉择工作负载 > 无状态。抉择 default 命名空间,确认以后无工作负载
接着通过 Knative 把弹音讯解决部署到 ECI 类型工作负载。这里咱们通过 yaml 的形式进行部署,yaml 内容如下:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: test-barrage-process
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: "100"
autoscaling.knative.dev/minScale: "0"
k8s.aliyun.com/eci-image-snapshot-id: imc-uf636kjjx8xr4e75npex
labels:
danmu.role: "manager"
spec:
containerConcurrency: 2
serviceAccountName: barrage-install-sa
containers:
- args:
- /manager
env:
- name: OTS_ENDPOINT
value: https://barrage.cn-hangzhou.tablestore.aliyuncs.com
- name: TABLE_NAME
value: barrage
- name: OTS_INSTANCENAME
value: barrage
- name: OTS_KEYID
value: xxx
- name: OTS_SECRET
value: xxx
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: ROLE
value: manager
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: TRACE_NAME
value: "process"
- name: PARENT_SPAN
value: "barrage-sender"
- name: SUB_SPAN
value: "process"
- name: TRACING
value: "http://tracing-analysis-dc-sh.aliyuncs.com/adapt_g2it2kg78n@5cf06035aec2eb9_g2it2kg78n@53df7ad2afe8301/api/traces"
image: registry-vpc.cn-shanghai.aliyuncs.com/knative-sample/barrage-manager:forrester-yuanyi_4cd77c84-20210618215458
name: user-container
ports:
- containerPort: 8000
name: http1
主要参数阐明:
- minScale 和 maxScale:示意服务配置的最小和最大 Pod 数量
- containerConcurrency:示意配置的 Pod 最大申请并发数
- OTS_ENDPOINT:示意配置的表格存储拜访地址
- TRACING:示意配置的调用连地址
那么接下来咱们部署该服务。
- 在集群治理页左侧导航栏中,抉择利用 > Knative。
- 在服务治理页签右上角,单击【应用模版创立】。抉择 default 命名空间,将下面的 yaml 内容粘贴到模版,点击创立。
第二步:部署事件驱动
事件驱动用于接管事件并进行事件流过滤、流转。这里咱们应用 Kafka 事件源作为事件驱动,用于从 Kafka 接管弹幕音讯,而后把弹幕路由到音讯解决。咱们通过 yaml 的形式进行部署,yaml 内容如下:
apiVersion: sources.knative.dev/v1alpha1
kind: KafkaSource
metadata:
annotations:
k8s.aliyun.com/req-timeout: "60"
k8s.aliyun.com/retry-count: "5"
k8s.aliyun.com/retry-interval: "2"
name: barrage
namespace: default
spec:
bootstrapServers: 192.168.42.205:9092,192.168.42.204:9092,192.168.42.203:9092
consumerGroup: barrage-info-consumer
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: test-barrage-process
namespace: default
topics: barrage-info
主要参数阐明:
- kafka 配置包含:kafka 服务地址,弹幕音讯 topics 以及生产组 consumerGroup
- 路由的指标音讯解决:test-barrage-process
那么接下来咱们部署该服务。
- 在集群治理页左侧导航栏中,抉择利用 > Knative。
- 在服务治理页签右上角,单击【应用模版创立】。抉择 default 命名空间,将下面的 yaml 内容粘贴到模版,点击创立。
以上音讯解决和事件驱动都已部署实现,咱们来验证一下。
(在集群治理页左侧导航栏中,抉择工作负载 > 容器组)
在容器组中,能够看到音讯解决以及 Kafka 事件源实例都已 running
第三步:部署 HomePage
该服务用于接管前端弹幕音讯,并将弹幕音讯发送到 Kafka,同时从表格存储中接管弹幕后果。这里通过 Knative 函数形式部署之后,会主动在 FC 中创立服务、函数、自定义域名。操作之前咱们先确认 FC 中无弹幕服务、函数以及自定义域名。
- 登录 FC 控制台
- 在顶部菜单栏,抉择地区(上海)。
关上服务及函数页面,确认无弹幕服务及函数
- 在左侧导航栏中,单击自定义域名,确认无域名信息。
关上自定义域名页面,确认无自定义域名
接下来咱们通过 Knative 把 HomePage 部署到 FC 类型工作负载。这里咱们通过 yaml 的形式进行部署,yaml 内容如下:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: demo-barrage
annotations:
workload.serving.knative.aliyun.com/class: "fc"
spec:
template:
metadata:
annotations:
fc.revision.serving.knative.aliyun.com/code-space: "image"
fc.revision.serving.knative.aliyun.com/role-arm: "acs:ram::xxxx:role/knative-fc"
fc.revision.serving.knative.aliyun.com/domain: '{"domain":"barrage.demo.knative.top","path":"/*"}'
spec:
containers:
- image: registry.cn-shanghai.aliyuncs.com/knative-sample/barrage-main:forrester-yuanyi_4cd77c84-20210618214527
env:
- name: OTS_ENDPOINT
value: https://barrage.cn-hangzhou.ots.aliyuncs.com
- name: TABLE_NAME
value: barrage
- name: OTS_INSTANCENAME
value: barrage
- name: OTS_KEYID
value: xxx
- name: OTS_SECRET
value: xxx
- name: KAFKA_SERVER
value: "106.15.11.179:9093,47.100.131.71:9093,47.102.44.91:9093"
- name: KAFKA_USER
value: "alikafka_pre-cn-xxx"
- name: KAFKA_PWD
value: "xxx"
- name: KAFKA_TOPIC
value: "barrage-info"
- name: TRACING
value: "http://tracing-analysis-dc-sh.aliyuncs.com/adapt_g2it2kg78n@5cf06035aec2eb9_g2it2kg78n@53df7ad2afe8301/api/traces"
- name: TRACE_NAME1
value: "sender"
- name: TRACE_NAME2
value: "receiver"
- name: TRACE_NAME3
value: "result"
- name: PARENT_SPAN
value: "barrage-sender"
- name: SUB_SPAN1
value: "sender"
- name: SUB_SPAN2
value: "result"
主要参数阐明:
- fc 相干参数配置包含:部署 fc 类型的工作负载、通过镜像形式部署,并指定拜访域名为:barrage.demo.knative.top
- 配置表格存储拜访地址: OTS_ENDPOINT
- kafka 相干参数配置:kafka 服务地址、弹幕音讯 topic
- 调用连地址配置:TRACING
那么咱们来部署该服务。
- 登录容器服务治理控制台。
- 在集群治理页左侧导航栏中,抉择利用 > Knative。
- 在服务治理页签右上角,单击【应用模版创立】。抉择 default 命名空间,将下面的 yaml 内容粘贴到模版,点击创立。
部署实现之后,咱们在函数计算控制台验证一下。
- 登录函数计算控制台。
- 在顶部菜单栏,抉择地区。
- 在左侧导航栏中,单击服务及函数,抉择能够看到弹幕服务曾经部署实现
关上服务及函数页面,能够看到 HomePage 曾经部署实现。
- 在左侧导航栏中,单击自定义域名。
关上自定义域名页面,能够看到主动创立进去了咱们配置的域名。
第四步:服务拜访
以上服务都已部署实现,接着咱们通过自定义域名进行服务拜访。http://barrage.demo.knative.top
接下来咱们发送弹幕,这里能够自定义设置须要发送的弹幕音讯,并发数以及持续时间。这里咱们应用默认配置进行发送。
设置 Message、Concurrency 以及 Duration,点击【Send】
咱们能够看到一直有弹幕音讯展现进去。
小结
阿里云 Knative 在 Serverless Kubernetes 之上,提供了面向容器 + 函数的对立编程模型,给你带来对立的 Serverless 利用编程模型。欢送有趣味的同学一起交换。
原文链接
本文为阿里云原创内容,未经容许不得转载。