在我的專案中,我需要測驗 Guaranteed Application pod 是否應該驅逐任何正在運行的虛擬應用程式 pod。如何實作應用程式 pod 始終具有最高優先級?
uj5u.com熱心網友回復:
您可以使用kind: PriorityClass為您的應用程式提供比普通 pod 更高的優先級。
uj5u.com熱心網友回復:
P....提供的答案非常好且有用。通過Pod Priority 和 Preemption,您可以實作自己的目標。
但是,除此之外,您還可以使用專用解決方案,例如在云中。查看谷歌云示例:
在優先級和搶占之前,Kubernetes pod 純粹是按照先到先服務的方式安排的,并一直運行到完成(或者永遠運行,對于由 Deployment 或 StatefulSet 之類的東西創建的 pod)。這意味著不太重要的作業負載可能會阻止更重要的、稍后到達的作業負載運行,而不是預期的效果。優先級和搶占解決了這個問題。
優先級和搶占在許多情況下都很有價值。例如,假設您想將自動縮放限制在最大集群大小以控制成本,或者您擁有無法實時增長的集群(例如,因為它們是本地的,您需要購買和安裝額外的硬體)。或者,您有高優先級的云作業負載,需要以比集群自動縮放器添加節點的速度更快的速度進行擴展。簡而言之,優先級和搶占可以為關鍵應用帶來更好的資源利用率、更低的成本和更好的服務水平。
其他云的其他指南:
- IBM 云
- AWS 云
- 天藍色云
- 紅帽 Openshift
另請參閱這個有用的教程。
uj5u.com熱心網友回復:
驅逐是基于 Pod 的優先級、QoS 和 Pod 的實際使用情況。如果 Pod 屬于更高優先級的 Pod,它的創建將搶占 bestEffort,然后是突發的,然后是保證的 Pod。
例如:在我的集群中,我有以下優先級:
kubectl get priorityclasses.scheduling.k8s.io
NAME VALUE GLOBAL-DEFAULT AGE
k8s-cluster-critical 1000000000 false 11d
system-cluster-critical 2000000000 false 11d
system-node-critical 2000001000 false 11d
為了舉例,我使用了這個system-cluster-critical類。不要這樣做,有你的優先級。以下 Pod 將導致其他 pod 被驅逐。
---
apiVersion: v1
kind: Pod
metadata:
name: guaranteed
spec:
nodeName: kube-worker-1
priorityClassName: system-cluster-critical
containers:
- name: app
image: nginx
resources:
requests:
cpu: 1000m
memory: 300Mi
limits:
cpu: 1000m
memory: 300Mi
在其他 pod 的描述中,您會看到以下內容:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulling 3m19s kubelet Pulling image "nginx"
Normal Pulled 3m19s kubelet Successfully pulled image "nginx" in 495.693296ms
Normal Created 3m19s kubelet Created container app
Normal Started 3m19s kubelet Started container app
Warning Preempting 18s kubelet Preempted in order to admit critical Pod
Normal Killing 18s kubelet Stopping container app
請注意,如果在您的集群中沒有具有全域默認值的優先級,那么沒有任何優先級的 pod 的優先級將為零(最低優先級)。因此,根據應用程式的型別,您應該創建和使用多個優先級類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432959.html
標籤:Kubernetes
上一篇:絕對值的GKE自動縮放指標
