本文介绍在ACK集群中使用Knative时可能遇到的常见问题及对应的解决方案。
索引
阿里云Knative和社区开源Knative有什么差异
阿里云Knative在兼容开源Knative的基础上进行了一系列产品能力的增强,包括运维、易用性、弹性、网关、事件驱动、监控告警等维度。具体信息,请参见阿里云Knative和开源Knative对比。
安装Knative时,应该选择哪种网关
阿里云Knative支持ALB、MSE、ASM和Kourier四种网关。ALB专注于应用层负载均衡场景;云原生网关MSE专注于微服务场景;ASM提供服务网络(Istio)的能力。如果仅需要基础的网关能力,可以选择Kourier。更多信息,请参见Knative网关选型建议。
通过RAM用户或角色使用Knative时,需要有什么权限
需要有访问集群所有命名空间的权限。您可以按照以下流程完成授权。
登录容器服务管理控制台,在左侧导航栏选择授权管理。
单击RAM 用户页签,在RAM用户列表,单击目标RAM用户对应的管理权限。
在添加权限区域,选择待授权的集群,然后选择命名空间为所有的命名空间,按照页面提示完成授权。
Knative中的Pod需要多长时间会缩容至0
Pod开始缩容至0的时间主要取决于3个参数:
stable-window
:稳定窗口期。Pod真正缩容前会对此期间内的指标进行观察和评估,而不会立即执行操作。scale-to-zero-grace-period
:缩容至0的超时时间。在此期间内,即使没有新的请求,系统也不会立即停止或删除最后一个Pod,以防突发流量请求。scale-to-zero-pod-retention-period
:缩容至0前最后一个Pod的保留时间,以便快速响应突发流量请求,无需从零启动一个新的Pod。
Pod缩容至0需要满足以下三个条件:
首先,在
stable-window
内没有收到任何请求。其次,超过
scale-to-zero-pod-retention-period
设定的保留时间。最后,SKS(Serverless Kubernetes Service)切换到proxy模式的时间超过
scale-to-zero-grace-period
设定的时间,Pod开始缩容。
Pod缩容至0的保留时间不会超过stable-window + Max["scale-to-zero-grace-period", "scale-to-zero-pod-retention-period" ]
。如果需要强制为Pod设置一个缩容至0的保留时间,建议使用scale-to-zero-pod-retention-period
参数进行配置。
在Knative中,如何使用GPU资源
您可以通过在Knative Service中添加spec.template.metadata.annotation
下的k8s.aliyun.com/eci-use-specs
字段指定GPU规格,然后通过spec.containers.resources.limits
下的nvidia.com/gpu
字段声明GPU资源。
详细信息,请参见使用GPU。
在Knative中,如何使用共享GPU
您可以参见运行共享GPU调度示例为节点开启共享GPU调度能力,然后在Knative Service中通过aliyun.com/gpu-mem
字段配置资源上限(Resource Limits)。详细信息,请参见开启共享GPU调度能力。
应用没有流量时Knative默认会将实例数缩容至零,如何解决冷启动延时的问题
在应用没有请求时,社区Knative默认将应用实例数缩容至零个,以降低常驻实例的运行成本。等待请求到来时,应用会被重新分配一个实例,需要经历IaaS资源的分配与调度、应用镜像的拉取、应用启动等环节。这种做法虽然降低了成本,但会让应用在启动时会经历一个冷启动过程,有较长的延时。
如果您的业务对冷启动延时比较敏感,推荐您两种解决方案。
ACK Knative组件的Activator组件是否计费
计费。Activator组件为数据面组件,以Pod的形式运行,会占用您的实例资源。
Knative服务的监听端口怎么配置
应用的监听端口需要和Knative Service中containerPort
的端口一致,默认为8080。如需自定义监听端口,请参见配置自定义监听端口。