簡介
上一篇文章講解了如何使用Azure DevOps持續部署應用到Azure Kubernetes上,但是部署是否成功?會不會遇到什么問題?專案運行中是否會出現問題?我們該怎么樣查看這些問題,并且對問題進行針對性解決?這就是今天要講的,
Aks_Core部署流程
在講遇到的問題之前我們可以先看看如何在AKS環境上部署Net Core應用資源,
1、 先決條件
Aks部署.Net Core專案需要條件:
1、本地安裝docker環境(生成docker鏡像,推送鏡像到容器注冊表)
2、本地安裝Azure CLI(連接Azure 并執行相關命令)
2、 部署流程
a) 本地生成Docker鏡像
i. 修改編輯Dockerfile檔案(Linux環境和Windows環境生成鏡像的檔案內容不一樣)
ii. 本地運行生成鏡像命令
docker build -t <鏡像名> .
iii. 本地docker部署鏡像測驗運行
docker run -d –name=<運行名> -p 5001:80 <鏡像名>
b) 創建資源組
i. 切換環境:
國際版-az cloud set -n AzureCloud,國內版-az cloud set -n AzureChinaCloud
ii. 通過cmd登錄到Azure:
az login (根據瀏覽器彈出的頁面進行驗證)
iii. 創建資源組(可以通過頁面Azure創建,也可通過命令運行:)
az group create --name < 資源組名稱 > --location eastus
c) 在資源組中創建容器注冊表并推送鏡像
i. 創建容器注冊表
az acr create --resource-group <資源組名稱> --name <acrName> --sku Basic
ii. 獲取容器注冊表登錄服務器
az acr list --resource-group <資源組名稱> --query "[].{acrLoginServer:loginServer}" --output table
iii. 通過docker命令標記本地鏡像
docker tag 鏡像名:版本 <acrLoginServer>/鏡像名:版本
iv. 登錄到容器注冊表
az acr login --name <acrName>
v. 推送鏡像到容器注冊表
docker push <acrLoginServer>/<鏡像名>:版本
vi. 檢查鏡像是否推送成功
az acr repository list --name <acrName> --output table
d) 創建K8S群集并且連接
i. 創建Kubernetes群集(通過azure頁面創建或者通過命令創建:)
az aks create \ --resource-group <資源組名稱> \ --name <Kuberbetes群集名稱> \ --node-count 2 \ --generate-ssh-keys \ --attach-acr <acrName>
ii. 如果使用kubectl命令找不到的話就需要安裝kubectl
az aks install-cli
iii. 通過azure頁面上的Kubernetes鏈接連接到Kubernetes
iv. 通過獲取群集節點命令驗證Kubernetes是否連接成功
kubectl get nodes
e) 創建編輯yaml檔案并部署
i. 創建更新yaml檔案
ii. 使用kubectl命令創建Kubernetes物件
kubectl appy -f <yaml檔案名>
iii. 使用kubectl命令監視查看service運行狀況
kubectl get service azure-vote-front --watch
安裝Azure CLI
我們需要下載Azure CLI:安裝適用于 Windows 的 Azure CLI | Microsoft Learn
然后依次安裝就行了,安裝成功在CMD視窗檢驗是否成功即可,

連接Kubernetes
1、 進入Microsoft Azure 管理頁面,并選擇創建的Kubernetes 服務,
2、 選擇概述頁面、點擊點擊連接會出現以下界面

3、 打開Windows CMD命令視窗輸入az login,并且在彈出的登錄頁面進行登錄驗證(注意Azure 是國內版還是國外版的,需要對應切換環境),
4、 輸入第2步的兩個連接命令,依次輸入,
5、 輸入kubectl get pods -n <命名空間名>來查詢pod資訊,

查看Pod描述和日志
上面我們講了怎么連接到Azure Kubernetes服務并且查詢Pods資訊,下面我們看下怎么查看Pod更具體的資訊來分析Pod狀態,
在應用部署的時候,特別是在最開始的時候,特別容易碰到部署不成功的情況,例如Pod出現ErrImagePull或者ImagePullBackOff、或者出現CrashLoopBackOff等等,那么我們就需要查詢Pod的描述或者日志等等來定位到錯誤資訊,
1、 保持上面的kubernetes 連接,并且在CMD里面輸入kubectl describe pod <pod名稱> -n <命名空間名稱>查看描述
2、 Kubectl logs -f <pod名稱> -n <命名空間名稱> 查看日志
例如我這里部署一個demo,鏡像配置一個不存在的鏡像,就會出現ImagePullBackOff的都問題,我們可以查看描述


例如對于CrashLoopBackOff的情況一般是啟動后又失敗了,這時候我們可能更需要查看log日志來定位資訊了,一般問題是在程式啟動時報錯,例如資料庫連接、redis連接、接入第三方連接報錯等等
查看資源消耗情況
上面我們看了怎么查詢定位應用部署中遇到的問題,現在我們來看看在應用運行中可能會遇到那些問題,在程式運行中可能會遇到部署的程式資源耗盡然后導致Pod假死或者重啟的情況、也有可能怎么節點甚至是Kubernetes服務資源耗盡的情況,這次我們主要針對如何查詢資源資訊,
1、 查詢node 資源情況,Kubectl top node
2、 查詢Pod資源情況kubectl top pod -n <命名空間名稱>
在Kubernetes服務中心部署可以使用自帶的負載均衡,第一種情況是節點池資源充足,但是對應Pod的資源消耗殆盡甚至超過了,這就是在配置Pod的yaml檔案中的資源限制配置問題了,yaml檔案中resources配置中的requests最低需求和limits最大限制,第二種就是node節點的資源直接消耗殆盡了,一般這時候就需要看看是否需要增加配置,同時也需要檢查應用程式,再看看具體是CPU還是記憶體了,是否有代碼造成了記憶體泄漏,優化長時間處理的代碼,
進入Pod中查看檔案
進入Pod的命令kubectl exec -ti <Pod名稱>-n <> sh,跟進入docker鏡像內部相似進入進去后輸入ls命令發現其實就是打包之前的應用程式,

生命不息、戰斗不止!
歡迎大家掃描下方二維碼,和我一起共同學習進步!

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516268.html
標籤:.NET技术
