日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ML.NET机器学习、API容器化与Azure DevOps实践(四):持续集成与k8s持续部署

發布時間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ML.NET机器学习、API容器化与Azure DevOps实践(四):持续集成与k8s持续部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過上文所介紹的內容,我們已經完成了RESTful API的開發,現在,就可以使用Azure DevOps來進行持續集成(CI)和k8s持續部署(CD)了。本文我會對使用Azure DevOps進行CI/CD的過程中需要注意的地方進行詳細介紹,而對于Azure DevOps配置的詳細步驟,我不會做太多注解,大家可以參考我前面寫的《ASP.NET Core應用程序容器化、持續集成與Kubernetes集群部署》系列文章。

在使用Azure DevOps進行CI/CD之前,首先來了解一下整個開發部署的架構拓撲,下圖展示了基于Azure DevOps進行持續集成和持續部署的架構拓撲:

我們首先使用Visual Studio 2019來開發ML.NET模型訓練的項目,用以生成訓練模型,并使用Visual Studio 2019開發了基于ASP.NET Core的RESTful API,這些代碼都由Azure DevOps Repo進行托管。然后,Azure DevOps Build Pipeline會對源代碼進行編譯,將RESTful API應用程序編譯成docker鏡像然后推送到Azure Container Registry上,并執行模型訓練程序,產生訓練模型ZIP文件,并由Release Pipeline將訓練模型保存到Azure Blob Storage中。Release Pipeline的另一個任務就是通過定義好的Kubernetes部署文件,將RESTful API部署到Azure Kubernetes Services集群。運行于ASP.NET Core中的RESTful API在啟動的時候,會訪問Azure Blob Storage讀取訓練模型,同時向客戶端提供API端點。整套CI/CD體系,包括代碼托管,包括容器注冊表,包括容器集群等,全部都由Microsoft Azure提供。不過,出于費用方面的考慮,我沒有使用Azure Container Registry,而是使用docker hub,在代碼托管方面,也沒有使用Azure Repo,而是使用的Github。

總結起來,Build Pipeline和Release Pipeline的任務如下:

  • Build Pipeline:從代碼庫下載代碼,編譯并運行訓練程序,生成訓練模型文件;將ASP.NET Core RESTful API編譯成docker鏡像并推送到docker hub;最后,將訓練模型文件以及用于k8s部署的配置文件進行存檔,以供Release Pipeline使用

  • Release Pipeline:讀取Build Pipeline所保存的訓練模型文件,將其保存到Azure Blob Storage;然后讀取Build Pipeline所保存的k8s配置文件,將RESTful API容器鏡像部署到k8s環境運行

下面,我簡要介紹一下這兩個部分的配置過程以及注意事項。

以下是本案例的Build Pipeline的配置:

在Build Pipeline里,我定義了兩個Agent job:Build Training Model以及Build Web API。前者運行在Hosted VS2017的Agent pool中,后者運行在Hosted Ubuntu 1604的Agent pool中。兩者可以并行執行,因為互相并沒有依賴。Build Training Model會下載訓練程序,在.NET Core下編譯并執行這個訓練程序,并產生訓練模型文件,通過Publish Artifact: Trained Model任務,將訓練模型保存起來。而Publish Artifact: Drop k8s deployment script任務則比較簡單了,僅僅是將代碼庫中預先寫好的k8s配置文件保存下來,僅此而已。

在Build Web API這個job里,會將ASP.NET Core RESTful API編譯成docker容器鏡像,并推送到docker hub中,詳細配置步驟都比較簡單,也就不多說明了。

以下是本案例的Release Pipeline的配置:

在Artifacts設置中,會從Build Pipeline將訓練模型文件和部署文件復制過來,接下來,在Publish Model to Azure Blob stage中,會將訓練模型復制到Azure Blob Storage中,這里使用的是Azure File Copy任務,我們只需要將Azure Subscription的信息以及Azure Blob Storage的連接信息填入即可。

在Kubernetes Deployment job中,使用Deploy to Kubernetes任務,即可快速方便地將ASP.NET Core RESTful API方便地部署到Azure Kubernetes Services托管的k8s集群中。需要注意的是,由于RESTful API需要訪問Azure Blob Storage來讀取機器學習的訓練模型(這一點在上一講已經提到過),因此,在這里就要將訪問Blob Storage的連接信息通過ConfigMap配置到k8s集群中:

從k8s.deploy.yml文件可以看到,環境變量是如何通過ConfigMap設置到集群中的服務上的:


apiVersion: v1

items:

- apiVersion: extensions/v1beta1

??kind: Deployment

??metadata:

????name: mlnet-webapi-deployment

??spec:

????replicas: 2

????template:

??????metadata:

????????labels:

??????????app.name: mlnet

??????spec:

????????containers:

??????????- image: daxnet/mlnet_webapi

????????????name: mlnet-webapi

????????????ports:

????????????- containerPort: 80

????????????env:

????????????- name: BLOB_DEFAULT_ENDPOINTS_PROTOCOL

??????????????valueFrom:

????????????????configMapKeyRef:

??????????????????name: mlnet-config

??????????????????key: BLOB_DEFAULT_ENDPOINTS_PROTOCOL

????????????- name: BLOB_ACCOUNT_NAME

??????????????valueFrom:

????????????????configMapKeyRef:

??????????????????name: mlnet-config

??????????????????key: BLOB_ACCOUNT_NAME

????????????- name: BLOB_ACCOUNT_KEY

??????????????valueFrom:

????????????????configMapKeyRef:

??????????????????name: mlnet-config

??????????????????key: BLOB_ACCOUNT_KEY

????????????- name: BLOB_ENDPOINT_SUFFIX

??????????????valueFrom:

????????????????configMapKeyRef:

??????????????????name: mlnet-config

??????????????????key: BLOB_ENDPOINT_SUFFIX

????????restartPolicy: Always

- apiVersion: v1

??kind: Service

??metadata:

????labels:

??????app.name: mlnet

????name: mlnet-webapi-service

??spec:

????type: LoadBalancer

????ports:

??????- name: "expose-80"

????????port: 80

????????targetPort: 80

????selector:

??????app.name: mlnet

kind: List

metadata: {}

通過kubectl客戶端命令,可以查看我們的API是否已經部署成功:

然后,使用mlnet-webapi-service服務的EXTERNAL-IP地址,對API進行測試:

已經得到預測結果,API部署和調用成功。

本系列文章一共四個部分,首先介紹了機器學習的基本概念,然后介紹了基于ML.NET的機器學習案例以及訓練模型生成、RESTful API的開發,最后簡要介紹了基于Azure DevOps實現持續集成、持續部署以及Azure Kubernetes Service k8s集群部署的過程。本系列文章也是我在Microsoft Global Azure Bootcamp 2019上海站活動中所分享的內容。整個案例的源代碼可以從Github下載:https://github.com/daxnet/mlnet-trainer。

原文地址:https://sunnycoding.cn/2019/05/15/mlnet-containerize-and-azure-devops-practices-part4/

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結

以上是生活随笔為你收集整理的ML.NET机器学习、API容器化与Azure DevOps实践(四):持续集成与k8s持续部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。