應用程式開發人員在 Azure Kubernetes Services (AKS) 中管理資源的最佳做法

當您在 Azure Kubernetes Service (AKS) 中開發和執行應用程式時,必須考量幾個重要環節。 您管理應用程式部署的方式,可能會對您所提供的服務產生使用者體驗方面的負面影響。

本文主要會從應用程式開發人員的觀點,說明如何執行您的叢集和工作負載。 如需系統管理最佳做法的相關資訊,請參閱叢集操作員在 Azure Kubernetes Service (AKS) 中進行隔離和資源管理的最佳做法

本文章涵蓋下列主題:

  • Pod 資源要求和限制。
  • 使用 Bridge to Kubernetes 和 Visual Studio Code 來開發、偵錯及部署應用程式的方法。

定義 Pod 資源要求和限制

最佳做法指導方針

對您 YAML 資訊清單中的所有 Pod 設定 Pod 要求和限制。 如果 AKS 叢集使用資源配額,且您未定義這些值,則您的部署可能會遭到拒絕。

使用 Pod 要求和限制來管理 AKS 叢集內的計算資源。 Pod 要求和限制可告知 Kubernetes 排程器要指派給 Pod 的計算資源。

Pod CPU/記憶體要求

Pod 要求會定義 Pod 定期所需的定量 CPU 和記憶體。

在您的 Pod 規格中,請務必根據上述資訊定義這些要求和限制。 如果您沒有包含這些值,Kubernetes 排程器無法考慮應用程式需要的資源來協助排程決策。

監視應用程式的效能,以調整 Pod 要求。 如果您低估 Pod 要求,您的應用程式可能會因為過度排程節點,而收到效能降低訊息。 如果高估要求,您的應用程式可能會增加排程的難度。

Pod CPU/記憶體限制

Pod 限制會設定 Pod 可以使用的 CPU 和記憶體容量上限。 記憶體限制會定義節點因資源不足而不穩定時,應該移除哪些 Pod。 若未設定適當限制,在資源壓力解除前,Pod 就會移除。 雖然 Pod 可能偶爾會超過 CPU 限制,但 Pod 不會因超過 CPU 限制而移除。

Pod 限制會定義 Pod 何時無法控制資源使用量。 超過限制時,會將 Pod 標記為移除。 此行為會維護節點健康情況,並將對於共用節點的 Pod 的影響降到最低。 如果您未設定 Pod 限制,它會預設為指定節點上的最高可用值。

避免設定的 Pod 限制高於節點所能支援的容量。 每個 AKS 節點都會保留一定數量的 CPU 和記憶體供核心 Kubernetes 元件使用。 您的應用程式可能會耗用太多節點上的資源,而使其他 Pod 無法成功執行。

在一天或一週中的不同時段監視應用程式的效能。 判斷尖峰需求時間,並據以針對符合需求上限所需的資源設定 Pod 限制。

重要

在您的 Pod 規格中,根據上述資訊定義這些要求和限制。 如果未包含這些值,Kubernetes 排程器就無法將應用程式所需資源納入考慮,以協助排程決策。

如果排程器將 Pod 放在資源不足的節點上,應用程式效能會降低。 叢集管理員在命名空間上必須設定資源配額,以要求您設定資源要求和限制。 如需詳細資訊,請參閱 AKS 叢集的資源配額

當您定義 CPU 要求或限制時,其值會以 CPU 單位來測量。

  • 1.0 CPU 等同於節點上的一個基礎虛擬 CPU 核心。
    • GPU 也會使用相同的測量方式。
  • 您可以定義以 millicore 測量的分數。 例如,100 m 是基礎 vCPU 核心 0.1

在下列單一 NGINX Pod 的基本範例中,Pod 會要求 100 m 的 CPU 時間和 128Mi 的記憶體。 Pod 的資源限制設為 250 m 的 CPU 和 256Mi 的記憶體。

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 250m
        memory: 256Mi

如需關於資源測量和指派的詳細資訊,請參閱管理容器的計算資源

對 AKS 叢集開發和偵錯應用程式

最佳做法指導方針

開發小組應使用 Bridge to Kubernetes 對 AKS 叢集進行部署和偵錯。

透過 Bridge to Kubernetes,您可直接對 AKS 叢集開發、偵錯和測試應用程式。 小組內的開發人員可共同作業,在整個應用程式生命週期中進行建置及測試。 您可以繼續使用現有的工具,例如 Visual Studio 或 Visual Studio Code,搭配 Bridge to Kubernetes 延伸模組。

搭配 Bridge to Kubernetes 使用整合式開發和測試程序,可降低對於本機測試環境的需求,例如 minikube。 相反地,您會針對 AKS 叢集,甚至在保護與隔離的叢集中,進行開發及測試。

注意

Bridge to Kubernetes 旨在搭配 Linux Pod 和節點上執行的應用程式使用。

使用適用於 Kubernetes 的 Visual Studio Code (VS Code) 延伸模組

最佳做法指導方針

在撰寫 YAML 資訊清單時,請安裝並使用適用於 Kubernetes 的 VS Code 延伸模組。 您也可以使用整合式部署解決方案的延伸模組,這對於不常與 AKS 叢集互動的應用程式擁有者可能有所幫助。

適用於 Kubernetes 的 Visual Studio Code 延伸模組可協助您對 AKS 開發和部署應用程式。 擴充功能提供下列功能:

  • 適用於 Kubernetes 資源的 Intellisense、Helm 圖表和範本。

  • 能夠在 VS Code 中瀏覽、部署及編輯 Kubernetes 資源的功能。

  • 針對要在 Pod 規格中設定的資源要求或限制進行 IntelliSense 檢查:

    VS Code extension for Kubernetes warning about missing memory limits

下一步

本文主要會從叢集操作員的觀點,說明如何執行您的叢集和工作負載。 如需系統管理最佳做法的相關資訊,請參閱叢集操作員在 Azure Kubernetes Service (AKS) 中進行隔離和資源管理的最佳做法

若要實作其中一些最佳做法,請參閱使用 Bridge to Kubernetes 開發