Knative常見(jiàn)問(wèn)題及解決方案
本文介紹在ACK集群中使用Knative時(shí)可能遇到的常見(jiàn)問(wèn)題及對(duì)應(yīng)的解決方案。
索引
阿里云Knative和社區(qū)開源Knative有什么差異
阿里云Knative在兼容開源Knative的基礎(chǔ)上進(jìn)行了一系列產(chǎn)品能力的增強(qiáng),包括運(yùn)維、易用性、彈性、網(wǎng)關(guān)、事件驅(qū)動(dòng)、監(jiān)控告警等維度。具體信息,請(qǐng)參見(jiàn)阿里云Knative和開源Knative對(duì)比。
安裝Knative時(shí),應(yīng)該選擇哪種網(wǎng)關(guān)
阿里云Knative支持ALB、MSE、ASM和Kourier四種網(wǎng)關(guān)。ALB專注于應(yīng)用層負(fù)載均衡場(chǎng)景;云原生網(wǎng)關(guān)MSE專注于微服務(wù)場(chǎng)景;ASM提供服務(wù)網(wǎng)絡(luò)(Istio)的能力。如果僅需要基礎(chǔ)的網(wǎng)關(guān)能力,可以選擇Kourier。更多信息,請(qǐng)參見(jiàn)Knative網(wǎng)關(guān)選型建議。
通過(guò)RAM用戶或角色使用Knative時(shí),需要有什么權(quán)限
需要有訪問(wèn)集群所有命名空間的權(quán)限。您可以按照以下流程完成授權(quán)。
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇授權(quán)管理。
單擊RAM 用戶頁(yè)簽,在RAM用戶列表,單擊目標(biāo)RAM用戶對(duì)應(yīng)的管理權(quán)限。
在添加權(quán)限區(qū)域,選擇待授權(quán)的集群,然后選擇命名空間為所有的命名空間,按照頁(yè)面提示完成授權(quán)。
Knative中的Pod需要多長(zhǎng)時(shí)間會(huì)縮容至0
Pod開始縮容至0的時(shí)間主要取決于3個(gè)參數(shù):
stable-window
:穩(wěn)定窗口期。Pod真正縮容前會(huì)對(duì)此期間內(nèi)的指標(biāo)進(jìn)行觀察和評(píng)估,而不會(huì)立即執(zhí)行操作。scale-to-zero-grace-period
:縮容至0的超時(shí)時(shí)間。在此期間內(nèi),即使沒(méi)有新的請(qǐng)求,系統(tǒng)也不會(huì)立即停止或刪除最后一個(gè)Pod,以防突發(fā)流量請(qǐng)求。scale-to-zero-pod-retention-period
:縮容至0前最后一個(gè)Pod的保留時(shí)間,以便快速響應(yīng)突發(fā)流量請(qǐng)求,無(wú)需從零啟動(dòng)一個(gè)新的Pod。
Pod縮容至0需要滿足以下三個(gè)條件:
首先,在
stable-window
內(nèi)沒(méi)有收到任何請(qǐng)求。其次,超過(guò)
scale-to-zero-pod-retention-period
設(shè)定的保留時(shí)間。最后,SKS(Serverless Kubernetes Service)切換到proxy模式的時(shí)間超過(guò)
scale-to-zero-grace-period
設(shè)定的時(shí)間,Pod開始縮容。
Pod縮容至0的保留時(shí)間不會(huì)超過(guò)stable-window + Max["scale-to-zero-grace-period", "scale-to-zero-pod-retention-period" ]
。如果需要強(qiáng)制為Pod設(shè)置一個(gè)縮容至0的保留時(shí)間,建議使用scale-to-zero-pod-retention-period
參數(shù)進(jìn)行配置。
在Knative中,如何使用GPU資源
您可以通過(guò)在Knative Service中添加spec.template.metadata.annotation
下的k8s.aliyun.com/eci-use-specs
字段指定GPU規(guī)格,然后通過(guò)spec.containers.resources.limits
下的nvidia.com/gpu
字段聲明GPU資源。
詳細(xì)信息,請(qǐng)參見(jiàn)使用GPU。
在Knative中,如何使用共享GPU
您可以參見(jiàn)運(yùn)行共享GPU調(diào)度示例為節(jié)點(diǎn)開啟共享GPU調(diào)度能力,然后在Knative Service中通過(guò)aliyun.com/gpu-mem
字段配置資源上限(Resource Limits)。詳細(xì)信息,請(qǐng)參見(jiàn)開啟共享GPU調(diào)度能力。
應(yīng)用沒(méi)有流量時(shí)Knative默認(rèn)會(huì)將實(shí)例數(shù)縮容至零,如何解決冷啟動(dòng)延時(shí)的問(wèn)題
在應(yīng)用沒(méi)有請(qǐng)求時(shí),社區(qū)Knative默認(rèn)將應(yīng)用實(shí)例數(shù)縮容至零個(gè),以降低常駐實(shí)例的運(yùn)行成本。等待請(qǐng)求到來(lái)時(shí),應(yīng)用會(huì)被重新分配一個(gè)實(shí)例,需要經(jīng)歷IaaS資源的分配與調(diào)度、應(yīng)用鏡像的拉取、應(yīng)用啟動(dòng)等環(huán)節(jié)。這種做法雖然降低了成本,但會(huì)讓應(yīng)用在啟動(dòng)時(shí)會(huì)經(jīng)歷一個(gè)冷啟動(dòng)過(guò)程,有較長(zhǎng)的延時(shí)。
如果您的業(yè)務(wù)對(duì)冷啟動(dòng)延時(shí)比較敏感,推薦您兩種解決方案。
配置保留實(shí)例:保留一個(gè)低規(guī)格、低成本的突發(fā)性能實(shí)例概述,平衡Knative的使用成本和應(yīng)用冷啟動(dòng)時(shí)延。當(dāng)?shù)谝粋€(gè)請(qǐng)求到來(lái)時(shí),保留實(shí)例將提供服務(wù),并同時(shí)觸發(fā)默認(rèn)規(guī)格實(shí)例的擴(kuò)容。當(dāng)默認(rèn)規(guī)格實(shí)例擴(kuò)容完成后,后續(xù)新請(qǐng)求將全部轉(zhuǎn)發(fā)至默認(rèn)規(guī)格實(shí)例,保留實(shí)例等待接收到的請(qǐng)求處理完成后自動(dòng)下線。詳細(xì)信息,請(qǐng)參見(jiàn)配置保留實(shí)例。
使用ECI提供的鏡像緩存功能,預(yù)先將需要使用的鏡像制作成緩存快照,然后基于該快照來(lái)創(chuàng)建ECI實(shí)例(Pod),避免或者減少鏡像層的下載,從而提升實(shí)例創(chuàng)建速度。詳細(xì)信息,請(qǐng)參見(jiàn)使用鏡像加速。
ACK Knative組件的Activator組件是否計(jì)費(fèi)
計(jì)費(fèi)。Activator組件為數(shù)據(jù)面組件,以Pod的形式運(yùn)行,會(huì)占用您的實(shí)例資源。
Knative服務(wù)的監(jiān)聽(tīng)端口怎么配置
應(yīng)用的監(jiān)聽(tīng)端口需要和Knative Service中containerPort
的端口一致,默認(rèn)為8080。如需自定義監(jiān)聽(tīng)端口,請(qǐng)參見(jiàn)配置自定義監(jiān)聽(tīng)端口。