上一篇文章講解了如何使用Azure DevOps持續部署應用到Azure Kubernetes上。但是部署是否成功?會不會遇到什麼問題?專案執行中是否會出現問題?我們該怎麼樣檢視這些問題,並且對問題進行鍼對性解決?這就是今天要講的。
在講遇到的問題之前我們可以先看看如何在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:安裝適用於 Windows 的 Azure CLI | Microsoft Learn
然後依次安裝就行了。安裝成功在CMD視窗檢驗是否成功即可。
1、 進入Microsoft Azure 管理頁面,並選擇建立的Kubernetes 服務。
2、 選擇概述頁面、點選點選連線會出現以下介面
3、 開啟Windows CMD命令視窗輸入az login,並且在彈出的登入頁面進行登入驗證(注意Azure 是國內版還是國外版的,需要對應切換環境)。
4、 輸入第2步的兩個連線命令,依次輸入。
5、 輸入kubectl get pods -n <名稱空間名>來查詢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的命令kubectl exec -ti <Pod名稱>-n <> sh。跟進入docker映象內部相似進入進去後輸入ls命令發現其實就是打包之前的應用程式。
生命不息、戰鬥不止!
歡迎大家掃描下方二維條碼,和我一起共同學習進步!