KServe是一個開源專案,旨在通過YAML檔案提供聲明式API,簡化Kubernetes上機器學習模型的部署和管理。ack-kserve基於開源KServe進行深度最佳化,並與阿里雲生態(如儲存、日誌、網路等)深度整合,簡化了KServe的部署和營運流程。本文介紹如何在ACK叢集中部署和管理ack-kserve組件。
前提條件
已建立ACK託管叢集Pro版,且叢集版本為1.22及以上。具體操作,請參見建立ACK託管叢集。
已安裝Nginx Ingress Controller組件。具體操作,請參見管理Nginx Ingress Controller組件。
步驟一: 安裝cert-manager組件
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊左上方建立,在基本資料頁面填寫應用程式名稱,在Chart地區搜尋選中
cert-manager,然後單擊下一步。在參數配置頁面,確認Chart 版本和參數資訊後,單擊確定。
部署成功後,可以在Helm頁面查看cert-manager的Helm組件資訊。
步驟二:安裝ack-kserve組件
ack-kserve組件預設採用RawDeployment模式部署,並與Nginx Ingress Controller組件整合。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊左上方建立,在基本資料頁面填寫應用程式名稱,在Chart地區搜尋選中
ack-kserve,然後單擊下一步。在參數配置頁面,確認Chart 版本和參數資訊後,單擊確定。
部署成功後,可以在Helm頁面查看ack-kserve的Helm組件資訊。
校正ack-kserve是否運行。
執行以下命令,查看Pod運行狀態。
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組件,然後再重新安裝即可解決報錯。