Продвинутые методы планирования Kubernetes
Хотя базовый процесс планирования Kubernetes охватывает базовое размещение подов, Kubernetes также предоставляет продвинутые методы планирования для обработки более сложных сценариев развертывания. Эти методы позволяют вам более точно настроить процесс планирования и убедиться, что ваши поды размещаются на наиболее подходящих узлах.
Селекторы узлов и аффинность узла
Селекторы узлов и аффинность узла позволяют вам указать характеристики узлов, на которых должны быть запланированы ваши поды. Это может быть полезно в сценариях, когда необходимо убедиться, что ваши поды развернуты на определенной аппаратной платформе или инфраструктуре.
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-type
operator: In
values:
- high-performance
- specialized
В приведенном выше примере pod настроен на запланирование на узлах с меткой node-type
, установленной на high-performance
или specialized
.
Аффинность и анти-аффинность подов
Аффинность и анти-аффинность подов позволяют вам контролировать размещение подов относительно других подов в кластере. Это может быть полезно в сценариях, когда необходимо убедиться, что определенные поды находятся на одном узле (аффинность) или разделены (анти-аффинность) на основе их меток или других атрибутов.
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- frontend
topologyKey: kubernetes.io/hostname
В приведенном выше примере pod настроен на запланирование на том же узле, что и другие поды с меткой app=frontend
.
Отметки и терпимости
Отметки и терпимости позволяют вам контролировать, какие узлы могут принимать какие поды. Узлы могут быть «отмечены», чтобы отклонить определенные поды, а поды могут быть «терпимыми», чтобы быть запланированы на этих отмеченных узлах.
apiVersion: v1
kind: Node
metadata:
name: example-node
spec:
taints:
- key: node-role.kubernetes.io/master
effect: NoSchedule
---
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: example-container
image: nginx
В приведенном выше примере узел отмечен меткой node-role.kubernetes.io/master
, а pod настроен на терпимость к этой отметке, что позволяет ему быть запланированным на мастер-узле.
Расширители и плагины планировщика
Kubernetes также позволяет расширять процесс планирования с помощью расширителей и плагинов планировщика. Это позволяет вам интегрировать собственный логику планирования и ограничения в планировщик Kubernetes, обеспечивая более продвинутые возможности планирования.