KServe是一個開源專案,旨在簡化在Kubernetes上部署和運行機器學習模型的過程,支援多種機器學習架構、具備彈性擴容能力。KServe通過定義簡單的YAML檔案,提供聲明式的API來部署模型,使得配置和管理模型服務變得更加容易。本文介紹如何在ACK叢集中部署和管理ack-kserve組件以及常見問題的解決方案。
前提條件
已建立ACK叢集Pro版,且叢集版本為1.22及以上。具體操作,請參見建立ACK託管叢集。
已安裝Nginx Ingress Controller組件。具體操作,請參見管理Nginx Ingress Controller組件。
步驟一: 安裝cert-manager組件
如果您的叢集中已經安裝cert-manager組件,請跳過此步驟。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面單擊建立,然後在建立頁面,將應用程式名稱設定為
cert-manager
,在Chart地區的搜尋欄搜尋並選中cert-manager
,完成後單擊下一步,在彈出的對話方塊中單擊是,確認採用cert-manager為Chart的預設的命名空間。在參數配置頁面,確認Chart 版本和參數資訊後,單擊確定。
部署成功後,頁面自動跳轉至Helm頁面,供您查看cert-manager的Helm組件資訊。
步驟二:安裝ack-kserve組件
ack-kserve組件預設採用RawDeployment模式部署,並與Nginx Ingress Controller組件整合。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面單擊建立,然後在建立頁面,將應用程式名稱設定為
ack-kserve
,在Chart地區的搜尋欄搜尋並選中ack-kserve
,完成後單擊下一步,在彈出的對話方塊中單擊是,確認採用kserve為Chart的預設的命名空間。在參數配置頁面,確認Chart 版本和參數資訊後,單擊確定。
部署成功後,頁面自動跳轉至Helm頁面,供您查看ack-kserve的Helm組件資訊。
校正ack-kserve是否運行。
執行以下命令,查看
kserve
命名空間下的Pod是否處於running
狀態。kubectl get pod -n kserve
如果預期輸出的
STATUS
為running
狀態,表明ack-kserve組件已經安裝成功。
(可選)步驟三:查看或更新ack-kserve️組件
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
查看ack-kserve️組件詳情。
在Helm頁面,單擊ack-kserve組件操作列的詳情,即可查看組件的基本資料、參數配置及歷史版本。
更新ack-kserve️組件資訊。
在Helm頁面,單擊ack-kserve組件操作列的更新,即可更新群組件的版本及參數。
(可選)步驟四:清理資源和卸載組件
為避免資源浪費,請在卸載ack-kserve️組件前刪除叢集內的KServe CR(Custom Resource )及CRD(Custom Resource Definition)資源。
重要刪除CR和CRD資源之前,請確認業務不再使用CR和CRD資源。刪除CRD資源會同步刪除對應的CR資源,CR資源一旦刪除將無法恢複。
確認業務不再使用後,再刪除叢集內所有的KServe CR資源。刪除CR資源可能涉及以下命令:
# 查看叢集內所有isvc資源。 kubectl get isvc --all-namespaces # 儲存叢集內所有isvc資源。 kubectl get isvc --all-namespaces -oyaml > isvc.yaml.bak # 確認業務不再使用後刪除isvc資源。 kubectl delete isvc --all
刪除叢集內的KServe CRD資源。
在刪除CRD之前,應確保先刪除所有依賴於該CRD的CR,否則會導致CRD刪除失敗。
kubectl delete crd clusterservingruntimes.serving.kserve.io kubectl delete crd clusterstoragecontainers.serving.kserve.io kubectl delete crd inferencegraphs.serving.kserve.io kubectl delete crd inferenceservices.serving.kserve.io kubectl delete crd predictors.serving.kserve.io kubectl delete crd servingruntimes.serving.kserve.io kubectl delete crd trainedmodels.serving.kserve.io
卸載ack-kserve組件。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面,單擊ack-kserve組件操作列的刪除,即可根據頁面提示卸載ack-kserve組件。
卸載cert-manager組件。
警告卸載cert-manager組件前,請先確認叢集中沒有其他組件使用cert-manager組件,否則會導致業務不可用。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面,單擊cert-manager組件操作列的刪除,即可根據頁面提示卸載cert-manager組件。
執行以下命令,刪除叢集內cert-manager的CRD資源。
kubectl delete crd certificaterequests.cert-manager.io kubectl delete crd certificates.cert-manager.io kubectl delete crd challenges.acme.cert-manager.io kubectl delete crd clusterissuers.cert-manager.io kubectl delete crd issuers.cert-manager.io kubectl delete crd orders.acme.cert-manager.io
常見問題及解決方案
常見問題:安裝ack-kserve組件時出現報錯failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/validate?timeout=30s": tls: failed to verify certificate: x509: certificate signed by unknown authority
。
問題原因:ack-kserve組件強依賴於cert-manager組件,如果當前叢集中未安裝cert-manager組件或者cert-manager組件未就緒,此時安裝ack-kserve組件就會出現上述報錯。
解決方案:
執行以下命令,確認叢集中是否已經安裝cert-manager組件。
kubectl get crd |grep certificates.cert-manager.io
預期輸出如下所示,表明叢集中已經安裝cert-manager組件。
certificates.cert-manager.io 2024-05-06T07:09:17Z
如叢集中沒有cert-manager的CRD資源,請參見步驟一安裝cert-manager組件。
執行以下命令,確認cert-manager組件是否已經就緒。
kubectl -n cert-manager get po
預期輸出如下所示,表明cert-manager組件的Pod均已就緒。
NAME READY STATUS RESTARTS AGE cert-manager-7f4bb44d5b-jrrfn 1/1 Running 0 23h cert-manager-cainjector-79544456cc-qp5pp 1/1 Running 0 23h cert-manager-webhook-f74ccb647-7m5dt 1/1 Running 0 23h
如果所有Pod均為Ready狀態,請參見上文先卸載ack-kserve組件,然後再重新安裝即可解決報錯。