將應用程式部署至已啟用自動調整大小的工作者節點儲存區
若要將 Pod 部署限制為叢集 Autoscaler 所管理的特定工作者節點儲存區,請使用標籤與 nodeSelector 或 nodeAffinity 的組合,只將應用程式部署至自動調整的工作者節點儲存區。 透過 nodeAffinity,可以進一步地控制排程行為的運作方式,以便讓 Pod 與工作者節點相符合。 然後,使用污點及容錯,以便只有這些應用程式可以在自動調整的工作者節點儲存區上執行。
如需詳細資訊,請參閱下列 Kubernetes docs:
開始之前:
若要限制 Pod 在某些自動調整的工作者節點儲存區上執行,請執行下列動作:
-
確保您已標示並污染自動調整的工作者節點儲存區,如 準備叢集以進行自動調整 中所述。
-
在 Pod spec 範本中,將
nodeSelector或nodeAffinity與工作者節點儲存區中使用的標籤相符合。nodeSelector的範例:... spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: app: nginx ...nodeAffinity的範例:spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: use operator: In values: - autoscale -
在 Pod 規格範本中,將
toleration與您在工作者節點儲存區上設定的污點相符。NoExecute容錯範例:tolerations: - key: use operator: "Exists" effect: "NoExecute" -
部署 Pod。 因為有相符的標籤,Pod 會排程到含標籤的工作者節點儲存區中的工作者節點。 由於符合容錯,Pod 可以在污染的工作者節點儲存區上執行。
oc apply -f pod.yaml
在工作者節點儲存區資源不足之前,擴增工作者節點
如 了解叢集自動擴縮器的工作 原理主題和 Kubernetes 叢集自動擴縮器常見問題解答中所述,叢集自動擴縮器會根據您對工作負載的請求資源以及工作池的可用資源來擴展您的工作池。 不過,您可能想要叢集 Autoscaler 在工作者節點儲存區用完資源之前就擴增工作者節點。 在此情況下,因為工作者節點儲存區已擴增為符合資源要求,所以您的工作負載不需久等工作者節點佈建。
叢集 Autoscaler 不支援工作者節點儲存區提早調整(過度佈建)。 不過,您可以配置其他 Kubernetes 資源使用叢集 Autoscaler 來達到提早調整。
暫停 Pod
您可以建立一個部署,在具有特定資源要求的 Pod 中部署 暫停容器,並將部署指定為低 Pod 優先順序。 當較高優先順序的工作負載需要這些資源時,暫停 Pod 會被先占,而成為擱置的 Pod。 此事件會觸發叢集 Autoscaler 擴增。
如需設定暫停 Pod 部署的詳細資訊,請參閱 Kubernetes FAQ。 您可以使用 此示例超量配置配置文件來建立優先順序類別、服務帳戶和部署。
如果您使用此方法,請確定您瞭解 Pod 優先順序如何運作,以及如何設定部署的 Pod 優先順序。 例如,如果暫停 Pod 沒有足夠的資源可用於較高優先順序的 Pod,則此 Pod 不會被先占。 較高優先順序的工作負載仍處於擱置狀態,因此會觸發叢集 Autoscaler 來擴增。 但是,在這種情況下,擴充動作不會提早執行,因為您想要執行的工作負載因為資源不足而無法排程。
暫停 Pod 必須具有相符的 nodeAffinity 或 nodeSelector,以及您為工作者節點儲存區設定的相符容錯。
水平 Pod 自動調整 (HPA)
因為水平 Pod 自動是根據 Pod 的平均 CPU 使用率,所以在工作者節點儲存區耗盡資源之前,就會達到您設定的 CPU 使用率限制。
會要求更多的 Pod,隨後會觸發叢集 Autoscaler 來擴增工作者節點儲存區。 有關設定 HPA 的詳細資訊,請參閱 Kubernetes docs。