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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

ASP.NET Core on K8S学习初探(3)部署API到K8S

發布時間:2023/12/4 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core on K8S学习初探(3)部署API到K8S 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?終于可以部署ASP.NET Core到K8S中了...


在上一篇《基本概念快速一覽》中,我們把基本的一些概念快速地簡單地不求甚解地過了一下,本篇開始我們會將ASP.NET Core WebAPI部署到K8S,從而結束初探的旅程。


01

準備一個WebAPI



????這里準備一個空的ASP.NET Core WebAPI項目,使用默認自帶的ValuesController控制器,具體代碼見這里(https://github.com/EdisonChou/AspNetCore.On.K8S/tree/master/src/01_hello-k8s/EDC.K8S.Demo.WebApi)。

  Dockerfile如下:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY . . RUN dotnet restore RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "EDC.K8S.Demo.WebApi.dll"]

  我們可以事先在自己的Docker環境構建這樣的一個鏡像,看看能否正常使用。

  由于后面會使用到這個鏡像,因此可以將此鏡像push到Docker Hub上。

docker push your-image-name:tagname

  當然你也可以直接使用我上傳的這個鏡像(edisonsaonian/k8s-demo)。

  


02


部署WebAPI到K8S


2.1 準備Deployment YAML

  在上一篇中我們知道Deployment主要負責Pod的編排,那么我們這里就通過一個YAML來創建一個Deployment。

apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo namespace: aspnetcore labels: name: k8s-demo spec: replicas: 2 selector: matchLabels: name: k8s-demo template: metadata: labels: name: k8s-demo spec: containers: - name: k8s-demo image: edisonsaonian/k8s-demo ports: - containerPort: 80 imagePullPolicy: Always --- kind: Service apiVersion: v1 metadata: name: k8s-demo namespace: aspnetcore spec: type: NodePort ports: - port: 80 targetPort: 80 selector: name: k8s-demo

  這里這個deploy.yaml就會告訴K8S關于你的API的所有信息,以及通過什么樣的方式暴露出來讓外部訪問。

  需要注意的是,這里我們提前為要部署的ASP.NET Core WebAPI項目創建了一個namespace,叫做aspnetcore,因此這里寫的namespace : aspnetcore。

  K8S中通過標簽來區分不同的服務,因此這里統一name寫成了k8s-demo。

  在多實例的配置上,通過replicas : 2這個設置告訴K8S給我啟動2個實例起來,當然你可以寫更大的一個數量值。

  最后,在spec中告訴K8S我要通過NodePort的方式暴露出來公開訪問,因此端口范圍從上一篇可以知道,應該是 30000-32767這個范圍之內。

2.2 通過kubectl部署到K8S

  首先,確保你的Docker for Windows以及Kubernetes都啟動起來了。

  然后,在Powershell中通過kubectl完成API的部署,只需要下面這一句命令行即可:

kubectl create -f deploy.yaml

  

  看到上面的提示"service created",就可以知道已經創建好了,這里我們再通過下面這個命令來驗證一下:

kubectl get svc -n aspnetcore

  

  可以看到,在命名空間aspnetcore下,就有了一個k8s-demo的服務運行起來了,并通過端口號31435向外部提供訪問。

2.3 在K8S中驗證WebAPI

  首先,我們可以通過瀏覽器來訪問一下這個API接口,看看是否能正常訪問到。

  

  

  其次,還記得在第一篇中部署的Dashboard嗎?我們通過Dashboard來看看我們的k8s-demo的狀態:

  

  從Dashboard中可以看到更為詳細的信息,包括運行的Deployment、容器組(由于我們設置的replicas=2,因此會有2個容器運行起來)、副本集等等,也可以通過Dashboard實時初步地監控我們的API的運行情況。


03


在K8S中對WebAPI進行伸縮



3.1 通過Dashboard伸縮WebAPI

  在Dashboard中,我們可以可視化地對我們的Deployment進行容器實例的伸縮,如下圖所示:

  

  在彈出的伸縮選項對話框中輸入個數,例如我們這里從2個縮減為1個,然后確定。

  

  再次觀看Dashboard,可以看到已經從原來的2個容器實例變為1個了。

  

3.2 通過Kubectl伸縮WebAPI

  除了在Dashboard中可視化地操作進行伸縮,也可以通過kubectl來進行,例如下面這句命令,將容器實例擴展到3個。需要注意的是,由于我們的k8s-demo所在的命名空間是在aspnetcore下,因此也需要指明--namespace=aspnetcore。

kubectl scale deployment k8s-demo --replicas=3 --namespace=aspnetcore

  

  再到Dashboard中來驗證一下,是否擴展到了3個容器實例:

  

3.2 自動伸縮WebAPI實例

  在K8S中,提供了一個autoscale接口來實現服務的自動伸縮,它會采用默認的自動伸縮策略(例如根據CPU的負載情況)來幫助我們實現彈性伸縮的功能。例如下面這句命令可以實現我們的k8s-demo可以伸縮的范圍是1~3個,根據負載情況自己伸縮,在沒有多少請求量壓力很小時收縮為一個,在壓力較大時啟動另一個實例來降低負載。

kubectl autoscale deployment k8s-demo --min=1 --max=3 --namespace=aspnetcore

  



04


一些補充知識點

4.1 常用Kubectl命令

kubectl get svc -n kube-system //獲取指定命名空間的服務 kubectl cluster-info // 獲取集群信息 kubectl get nodes // 獲取集群節點信息 kubectl delete node 192.168.2.152 //刪除節點 192.168.2.152 kubectl get namespaces // 獲取所有命名空間 kubectl create namespace aspnetcore // 創建一個命名空間“aspnetcore”

  更多kubectl命令參考:

  (1)https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html

  (2)https://www.jianshu.com/p/fb5c0d115421

4.2 YAML文件解析

?  關于YAML文件各個節點的解釋,可以通過下面這個命令去了解:

kubectl explain deployment.metadata

  

  更多YAML文件的節點參考:https://www.kubernetes.org.cn/1414.html

4.3 更多K8S基礎知識?

  推薦閱讀《18張插畫了解Kubernetes背景與概念

?  



05


小結



????????本文簡單的介紹了一下在Docker for Windows環境下,通過kubectl部署一個ASP.NET Core WebAPI到K8S中,并初步使用了K8S的伸縮特性對Deployment進行實例的伸縮,體驗了一下所謂的容器的編排。當然,筆者也是初玩,有很多還沒學習,這也只是K8S的冰山一角,后續我會學習在Linux下部署K8S的生產級集群環境,深入學習K8S的各種概念并實踐,最后會學習阿里云ACK服務(容器服務Kubernetes版)或騰訊云TKE服務(基于Kubernetes的容器服務)去部署和實踐公司的生產環境,相信到時也會有很多的分享的!


References


參考資料


  • Jesse,http://video.jessetalk.cn/my/course/6

  • 阿里云,https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/18.09

  • 阿里云,https://yq.aliyun.com/articles/508460?spm=a2c4e.11153940.blogcont221687.18.7dd57733hFolMo

  • 圣杰,https://www.cnblogs.com/sheng-jie/p/10591794.html

  • 忱康,https://blog.csdn.net/cuipengchong/article/details/72459299


  • 總結

    以上是生活随笔為你收集整理的ASP.NET Core on K8S学习初探(3)部署API到K8S的全部內容,希望文章能夠幫你解決所遇到的問題。

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