服务网格ASM与容器服务ACK及ACK Serverless的Knative Serving能力紧密结合,简化在多种集群环境中部署和管理Serverless应用服务的过程。针对快速构建、部署以及管理基于容器的应用场景,尤其是涉及自动扩缩容、按需计费需求的情况,Knative on ASM提供了一站式的解决方案,帮助您实现Serverless应用程序的快速部署与灵活扩展,提升开发效率并增强业务弹性。本文介绍如何使用Knative on ASM创建Knative服务。
前提条件
- 已创建1.16.3.50及以上版本的ASM实例,并已将一个ACK或ACK Serverless集群添加到该实例中。具体操作,请参见创建ASM实例和添加集群到ASM实例。 重要- 创建ASM实例时,请确保在资源配置区域,启用数据面集群KubeAPI访问Istio资源已勾选(默认勾选),即已启用数据面KubeAPI访问Istio资源。 
- 目标ACK或ACK Serverless集群已开启公网API Server,以便快速接入。 
- ASM实例和ACK或ACK Serverless集群需处于同一VPC、同一地域并使用同一交换机。 
 
- 已为集群添加入口网关。本实例使用ASM入口网关作为集群网关。具体操作,请参见创建入口网关。 说明- 1.21.6.84版本以上的ASM实例不再需要手动创建入口网关 
- ASM网关支持为Knative提供Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。详细信息,请参见ASM网关概述。 
 
步骤一:安装Knative
ASM实例版本为1.18.2.104以下
- 在ACK或ACK Serverless集群中部署Knative Serving组件,服务网关选择Kourier。 - 关于如何在ACK上安装Knative,请参见部署与管理Knative组件。 
- 关于如何在ACK Serverless上安装Knative,请参见部署Knative。 重要- 在组件成功安装后,请单击组件管理页签,在add-on 组件区域的列表卸载Kourier组件。 
 
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在Knative on ASM页面,单击启用Knative on ASM。 
ASM实例版本为1.18.2.104~1.21.6.83
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在Knative on ASM页面,按需选择Knative版本,单击启用Knative on ASM。 
- 在ACK或ACK Serverless集群中部署Knative,服务网关选择ASM。 - 关于如何在ACK上安装Knative,请参见部署与管理Knative组件。 
- 关于如何在ACK Serverless上安装Knative,请参见部署Knative。 
 
ASM实例版本为1.21.6.84及以上
1.21.6.84版本以上的ASM实例不再需要单独在ASM控制台开启Knative on ASM功能。
- 登录容器服务管理控制台,在左侧导航栏单击集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在Knative页面的组件管理页签下,单击一键部署Knative,然后在服务网关处选择ASM,然后单击一键部署。 - 部署成功后,即可在Knative中使用服务网格ASM。 说明- 页面提示部署完成后,请确认入口网关已经创建完成并正常运行后再进行Kantive服务的部署。 
步骤二:部署Knative服务
Knative on ASM支持通过ACK控制台和YAML配置文件两种方式部署Knative服务。您可以按需选择。
方式一:通过ACK控制台部署
- 登录容器服务管理控制台,在左侧导航栏单击集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在Knative页面,单击服务管理页签,在右上角单击创建服务,配置相关信息,然后单击创建。 - 关于配置项的更多信息,请参见快速部署一个Knative服务。 - 配置项 - 说明 - 示例值 - 命名空间 - 选择该服务所属的命名空间。 - default - 服务名称 - 自定义该服务的名称。 - helloworld-go - 镜像名称 - 单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。支持填写私有Registry,填写的格式为domainname/namespace/imagename:tag。 - registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go - 镜像版本 - 单击选择镜像版本,在弹出的对话框选择目标版本,单击确定。 - 73fbdd56 - 访问协议 - 支持HTTP和gRPC两种访问协议。 - HTTP - 容器端口 - 设置暴露的容器访问端口,端口号必须介于1~65535。 - 8080 - 环境变量 - 单击高级设置,然后在环境变量右侧单击新增,通过键值对的形式配置环境变量。 - 类型:自定义 - 变量名称:TARGET - 变量/变量引用:Knative 
方式二:通过YAML配置文件部署
- 将以下内容保存为helloworld-go.yaml。 - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go annotations: knative.k8s.alibabacloud/tls: "false" spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/helloworld-go:160e4dc8 ports: - containerPort: 8080 env: - name: TARGET value: "Knative"
- 使用kubectl连接到ACK集群,执行以下命令创建Knative Service,并等待Knative Service创建成功。 - kubectl apply -f helloworld-go.yaml
- 执行以下命令,查看Knative服务列表。 - kubectl get ksvc- 预期输出: - NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go http://helloworld-go.default.example.com helloworld-go-00001 helloworld-go-00001 True
方式三:使用模板创建
- 登录容器服务管理控制台,在左侧导航栏选择集群。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在Knative页面的服务管理页签下,选择命名空间为default,然后单击使用模板创建,将以下YAML示例粘贴至模板,最后单击创建。创建一个名为helloworld-go的服务。 - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # 请将{REGION-ID}替换为您集群所在地域。 env: - name: TARGET value: "Knative"
步骤三:获取访问网关地址
方式一:通过ACK控制台获取
- 登录容器服务管理控制台,在左侧导航栏单击集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 单击服务管理页签,然后在服务列表中单击目标服务名称,进入Knative服务详情页面。在基本信息区域,查看并获取访问网关及默认域名。 
方式二:通过ASM控制台获取
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在入口网关页面的服务地址区域,查看并获取访问网关地址。 
步骤四:访问服务
Knative服务创建完成后,通过绑定Host域名与访问网关,可以直接访问服务地址。
- 在服务管理页面的访问网关列,获取helloworld-go服务的网关地址。 
- 执行以下命令,访问helloworld-go服务。 - curl -H "host: helloworld-go.default.example.com" http://39.XX.XX.XX # 网关的IP和域名请以您的实际数据为准。- 预期输出: - Hello Knative!- 输出结果表明服务访问成功。 
相关文档
- Knative默认服务域名为example.com。Knative on ASM支持使用自定义域名作为默认域名。具体操作,请参见在Knative on ASM中使用自定义域名。 
- ASM网关支持HTTPS协议和动态加载证书功能。在使用Knative on ASM时,您可以通过ASM网关来实现HTTPS访问。具体操作,请参见使用ASM网关实现HTTPS访问Knative服务。 
- Knative on ASM提供基于流量的灰度发布能力。创建Knative服务时,Knative会为服务自动创建第一个修订版本Revision。后续每当Knative服务的配置发生变化时,Knative都会创建一个新修订版本,通过修改流量发往不同修订版本的分配比例来实现灰度发布功能。具体操作,请参见在Knative on ASM中基于流量灰度发布服务。 
- Knative Serving为每个Pod注入QUEUE代理容器(queue-proxy)。该容器负责向Autoscaler报告业务容器的并发指标。接收到这些指标之后,Autoscaler会根据并发请求数及缩放算法,调整Deployment的Pod数量,从而实现自动扩缩容。具体操作,请参见基于流量请求数实现服务自动扩缩容。