Azure Kubernetes(AKS)部署及檢視應用資源

2022-10-17 18:00:28

簡介

       上一篇文章講解了如何使用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命令發現其實就是打包之前的應用程式。

    

 

生命不息、戰鬥不止!

歡迎大家掃描下方二維條碼,和我一起共同學習進步!