本文主要为您介绍如何使用Knative on ASM创建Knative服务。
本系列文章包括以下部分:
使用ASM管理Knative服务(1):Knative on ASM概述
使用ASM管理Knative服务(2):使用Knative on ASM部署Serverless应用
使用ASM管理Knative服务(3):在Knative on ASM中使用自定义域名
使用ASM管理Knative服务(4):使用ASM网关实现HTTPS访问Knative服务
使用ASM管理Knative服务(5):在Knative on ASM中基于流量灰度发布服务
使用ASM管理Knative服务(6):基于流量请求数实现服务自动扩缩容
前提条件
- 创建至少一个ASM实例,且版本≥v1.16。添加至少一个ACK集群或ASK集群到该实例中。详情请参见创建ASM实例和添加集群到ASM实例。
部署Knative Serving组件:
- 为集群添加入口网关。本实例使用ASM入口网关作为集群网关,详情请参见添加入口网关服务。
ASM网关为Knative提供了Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。具体可以参见 https://help.aliyun.com/document_detail/473114.html。
开启Knative on ASM功能
登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择生态集成 > Knative on ASM,在右侧的页面中点击启用按钮, 稍后更新完毕之后即可开启。
部署Knative服务
可以通过容器服务管理控制台和YAML配置文件两种方式部署Knative服务,您可以任意选择一种适合您的方式。
方式一:通过容器服务管理控制台部署
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择应用 > Knative。
- 在服务管理页签单击右上角的创建服务,配置相关信息,然后单击创建。
参数 | 说明 |
---|---|
命名空间 | 选择该服务所属的命名空间。 |
服务名称 | 自定义该服务的名称。 |
镜像名称 | 您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。您还可以填写私有registry。填写的格式为domainname/namespace/imagename:tag。本例中为registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go。 |
镜像版本 | 您可以单击选择镜像版本。本例中为73fbdd56。 |
访问协议 | 支持HTTP和gRPC两种访问协议。 |
容器端口 | 设置暴露的容器访问端口,端口号必须介于1~65535。 |
仅内部访问 | 选中仅内部访问后,不支持通过公网访问该服务。 |
请求最大并发数 | 容器允许的最大请求并发数。默认0,表示不限制并发数。 |
最小缩容实例数 | 在无访问请求的情况下,最小缩容的运行实例数。设置为0时,表示没有访问请求时,实例缩为0。 |
最大扩容实例数 | 允许扩容出来的最多实例个数。 |
资源限制 | 可指定该应用所能使用的资源上限,包括CPU、内存和GPU三种资源,防止占用过多资源。其中,CPU资源的单位为cores,即一个核;内存的单位为Bytes,可以为MiB。 |
生命周期 | 包含命令(Command)和参数(Args),配置说明如下:- 如果均不配置,则使用镜像默认的命令和参数。 - 如果仅配置参数,则使用镜像默认的命令及新配置的参数。- 如果均配置,则会覆盖镜像默认的配置。 |
环境变量 | 支持通过键值对的形式配置环境变量。 |
数据卷 | 支持增加本地存储和云存储声明(PVC)。- 本地存储:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见volumes。. - 云存储声明(PVC):支持云存储。 |
说明 创建完成后,您可以在服务管理页签对服务进行查看、编辑或删除操作。
方式二:通过YAML配置文件部署
- 将以下内容保存为hello.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连接到集群,执行以下命令创建Knative Service
kubectl apply -f hello.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服务创建完成后,通过绑定Host域名与访问网关,可以直接访问服务地址。操作步骤如下:
- 在服务管理页签,单击服务名称或右侧操作栏下的详情按钮进入Knative服务详情页面。您可以在Knative服务详情页的基本信息区域,查看访问网关及域名。
- 将访问网关地址与需要访问的域名进行Host绑定,在Hosts文件中添加绑定信息。绑定样例如下(请将xx.xx.xxx.xx替换为您的网关ip):
xx.xx.xxx.xx helloworld-go.default.example.com
- 完成Host绑定后,可通过域名直接对服务进行访问。
curl http://helloworld-go.default.example.com
Hello Knative!