簡介 上一篇文章講解瞭如何使用Azure DevOps持續部署應用到Azure Kubernetes上。但是部署是否成功?會不會遇到什麼問題?項目運行中是否會出現問題?我們該怎麼樣查看這些問題,並且對問題進行針對性解決?這就是今天要講的。 Aks_Core部署流程 在講遇到的問題之前我們可以先看看如 ...
簡介
上一篇文章講解瞭如何使用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命令發現其實就是打包之前的應用程式。
生命不息、戰鬥不止!
歡迎大家掃描下方二維碼,和我一起共同學習進步!