1. 程式人生 > 其它 >K8S-POD優先順序與搶佔

K8S-POD優先順序與搶佔

通過給pod設定對應的優先順序可以保證中重要的pod優先排程

1、概念

在定義pod時,可以在spec.priorityClassName中指定PriorityClass,根據其中定義的優先順序在PrioritySort中排序,優先排程優先順序高的pod,優先順序相同的pod根據進入佇列的時間戳先後排程,當未找到

合適的執行節點時,排程器會將POD轉為pending狀態,併為其啟動“搶佔”過程,在叢集中刪除一個或者多個低優先的POD,讓節點滿足該優先順序高的POD排程。

pod優先順序使用32位正整數,可用值為[0,1000000000],值越大優先順序越高,大於1000000000的優先順序預留給系統級的關鍵pod,以防止這些pod被驅逐。

例如:API-server,Controller-manager,Scheduler和etcd 的pod直接使用system-cluster-critical PriorityClass,優先順序為:2000000000

metric-server,CoreDNS、Dashboard等使用system-node-critical 的pod使用system-node-critical PriorityClass,優先順序為:2000001000

在定義pod時不定義PriorityClass時,預設優先順序的值為:0

2、PriorityClass定義

如果叢集上存在多個設定了全域性預設的優先順序的PriorityClass物件,優先順序小的會生效,如:

定義預設優先順序的demoappv11

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoappv11
spec:
  replicas: 4
  selector:
    matchLabels:
      app: demoappv11
  template:
    metadata:
      labels:
        app: demoappv11
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - {key: app, operator: In, values: ["demoappv11"]}
            topologyKey: kubernetes.io/hostname
      containers:
      - name: demoappv11
        image: harbor.myland.com/baseimages/centos/centos-tsinghua:7.9.2009 
        command: ["sleep","1000"]
        resources:
          requests:
            memory: 2Gi
            cpu: 150m
View Code

優先順序為222222的demoappv12

kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:
  name: demoappv12
value: 222222
description: "demoappv12"
globalDefault: false
preemptionPolicy: PreemptLowerPriority
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoappv12
spec:
  replicas: 4
  selector:
    matchLabels:
      app: demoappv12
  template:
    metadata:
      labels:
        app: demoappv12
    spec:
      priorityClassName: demoappv12
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - {key: app, operator: In, values: ["demoappv12"]}
            topologyKey: kubernetes.io/hostname
      containers:
      - name: demoappv12
        image: ikubernetes/demoapp:v1.2
        resources:
          requests:
            memory: 2Gi
            cpu: 150m
View Code

由於記憶體不足,排程器開始清理優先順序的demoappv11

直到demoappv11處於pending狀態