服务网格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以下
ASM实例版本为1.18.2.104~1.21.6.83
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页面,单击服务管理页签,在右上角单击创建服务,配置相关信息,然后单击创建。
关于配置项的更多信息,请参见快速部署Serverless应用。
配置项
说明
示例值
命名空间
选择该服务所属的命名空间。
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数量,从而实现自动扩缩容。具体操作,请参见基于流量请求数实现服务自动扩缩容。