應用程式開發人員在 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 資源的功能。

  • Intellisense 會檢查 Pod 規格中設定的資源要求或限制:

    適用於 Kubernetes 的 VS Code 延伸模組針對遺漏的記憶體限制發出的相關警告

後續步驟

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

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