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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载

發布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

前前后后學習kubernetes也有一個來月了,關于kubernetes的博客也寫了有十多篇。但是技術如果無法落地到實際的應用場景終歸是紙上談兵,所以就有了這一出:通過結合kubernetes和azure devops實現項目的CI/CD以及均衡負載

寫完這篇后kubernetes的相關學習也暫時告一段落了,有種終于闖關成功了啊的感覺,當然這是題外話了。

注1:以下只是以Net Core項目為例,實際運用場景中,除了dockfile的編寫有差別,剩下整個自動化部署鏈條中的技術也好,工具也好,都可以復用,與語言和語言框架本身無關。
注2:本文演示的也只是其中一種簡便的方式,具體的自動化流程中,由于自由度非常高,所以實際的流程可能會更加復雜,這里就不做贅述了

以下場景需要用到的工具或者技術:

  • .Net Core

部署的應用本身

  • Github

作為代碼倉庫

  • kubernetes

    • docker

    • helm【kubernetes的包管理工具】

    • ingress【使用ingress綁定域名和https證書,實現域名訪問】

  • Azure DevOps

作為CI/CD的工具

注:以下所有的相關部署代碼,都在下面這個倉庫

  • 倉庫內容只是我自己用的一個小工具,當然具體是什么內容不重要,這篇只是演示部署相關的

https://github.com/lzw5399/TocGenerator


2. Net Core項目本身的準備

2.1 dockerfile

你需要一個dockerfile來構建一個docker image, 如果是.Net Core項目,vs提供了傻瓜式生成dockerfile的功能,可以免去初學時編寫dockerfile的煩惱

  • 本示例dockerfile路徑和內容

2.2 創建kubernetes用于helm的chart包

2.2.1 說明

這一部分需要有helm相關的知識,如果熟悉k8s但不熟悉helm,可以參照:

kubernetes系列(十六) - Helm安裝和入門

2.2.2 chart文件目錄和文件組成

自定義的chart包,位于以下路徑

https://github.com/lzw5399/TocGenerator/tree/master/kubernetes

如上圖可以看出是一個很經典的自定義chart包的文件目錄,即:

Copy. ├── Chart.yaml 【chart的name和version等信息】 ├── templates 【k8s的資源清單模板,可以引用values.yaml的變量】 | ├── deployment.yaml | └── service.yaml ├── values.yaml 【定義變量,供template/下的yaml使用,實現動態替換yaml內容】

3. Azure Devops創建倉庫的pipeline

3.1 前言

Azure DevOps是微軟出品的DevOps平臺,里面包含了Pipelines工具鏈,對個人免費,可以用于項目的CI/CD

https://dev.azure.com

3.2 使用azure devops準備操作

  • 如果之前使用過azure devops,這幾步可以視情況跳過。

  • 進入azure devops注冊賬號

  • 之后按照引導新建一個organization

  • 再新建一個project

  • 進入project

  • 3.3 創建service connections

    這里要創建一個service connections,用于之后pipeline訪問k8s的master服務器

  • 點擊project setting

  • 這里點擊service connections來創建一個連接,用于訪問k8s的master服務器

  • 然后填寫具體的憑證,之后的pipeline上需要

  • 3.4 新建pipeline流水線

    新建pipeline流水線用于自定義部署流程

  • 點擊pipelines,然后點擊create pipelines,新建一條流水線來部署我們的應用

  • 選擇代碼倉庫位置,選github

  • 然后會跳到github進行授權,授權完成后會顯示github的repo列表,選擇具體的倉庫

  • 選擇完倉庫后,會自動按照你當前項目的語言,在github倉庫的根目錄生成一個默認的azure-pipelines.yml文件,

  • 替換文件的內容,我們最終使用的yaml文件步驟大概如下

    • 第一步:構建docker鏡像

    • 第二步:將自定義的chart包拷貝到master服務器上

    • 第三步:執行deploy.sh腳本,完成部署

    Copy# 哪條分支會觸發構建 trigger: - masterresources: - repo: self# 定義變量 variables: - name: appNamevalue: tocgenerator- name: tagvalue: $(Build.BuildNumber)- name: imageNameWithoutTagvalue: $(dockerid)/$(appName)- name: imageNameWithTagvalue: $(imageNameWithoutTag):$(tag)- name: serverChartLocationvalue: /root/helm-chart-folder/tocstages: - stage: Buildjobs: - job: Buildpool:vmImage: 'ubuntu-latest'# 這下面是每個我們要具體執行的任務steps:# build docker images并且push到倉庫- task: Docker@2displayName: docker build and pushinputs:containerRegistry: 'my_docker_hub'repository: '$(imageNameWithoutTag)'command: 'buildAndPush'Dockerfile: '**/Dockerfile'buildContext: '.'tags: $(tag)addPipelineData: false# 將kubernetes文件夾,即chart包拷貝到k8s的master服務器- task: CopyFilesOverSSH@0displayName: copy helm chart to serverinputs:# 這個endpoint就是我們剛剛創建的service connection的名字sshEndpoint: 'my_server'sourceFolder: 'kubernetes'contents: '**'targetFolder: $(serverChartLocation)readyTimeout: '20000'# 在k8s的master服務器上運行我們github倉庫的根目錄的deploy.sh,進行部署操作- task: SSH@0displayName: run deploy shell on serverinputs:# 這個endpoint就是我們剛剛創建的service connection的名字sshEndpoint: 'my_server'runOptions: 'script'scriptPath: 'deploy.sh'args: '$(tag) $(serverChartLocation)'readyTimeout: '20000'

    3.5 創建部署shell腳本

    部署腳本的位置

    https://github.com/lzw5399/TocGenerator/blob/master/deploy.sh

    幾點說明

  • echo純粹是為了記錄log使用的,下面的示例把echo部分刪除了

  • $1 and $2 代表外部傳入的參數

  • $1是image的tag,$2是k8s的master服務器上我們自定義的chart的目錄

  • 移除沒有tag的懸掛docker image,純粹為了節省服務器空間,為可選項

  • Copy#!/bin/bash# 出現錯誤退出腳本執行 set -o errexit# $1 and $2 代表外部傳入的參數 # $1是image的tag,$2是k8s的master服務器上我們自定義的chart的目錄 buildNumber=$1 serverChartLocation=$2 cd $serverChartLocation# 安裝或者升級我們的helm release # 即如果查詢到了有release存在就upgrade,沒有則install if test -z "$(helm ls | grep toc-release)"; thenhelm install -f values.yaml --set env.buildnumber=$buildNumber --set image.tag=$buildNumber toc-release . elsehelm upgrade -f values.yaml --set env.buildnumber=$buildNumber --set image.tag=$buildNumber toc-release . fi# 移除沒有tag的懸掛docker image(可選) danglings=$(sudo docker images -f "dangling=true" -q) if test -n "$danglings"; thensudo docker rmi $(sudo docker images -f "dangling=true" -q) >>/dev/null 2>&1if [[ $? != 0 ]]; thenexit $?fi fiexit 0

    4. 觸發pipeline部署流水線

    這里有兩種辦法,

  • 點擊我們剛剛創建的pipeline手動run一個

  • 通過push代碼到倉庫的指定分支(我們設置的master)觸發構建

  • 顯示構建成功之后就可以查看了!

    5. 關于均衡負載

    均衡負載是kubernetes自帶的基礎功能之一,這里只是做了一個試驗可以更加直觀地感受到而已

    如下

  • 定義一個靜態的guid

  • 在/version 路由下輸出guid

  • 則如果有2個實例,且均衡負載成功的話,每次刷新這個界面,會隨機顯示這兩個guid

    • deployment的replicas實例數需要設置2以上

    最后均衡負載試驗的地址,也是本次實例項目的線上地址

    https://toc.codepie.fun/version

    • 如下,會出現兩個不同的guid

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载的全部內容,希望文章能夠幫你解決所遇到的問題。

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