Призначення Podʼів на вузли за допомогою спорідненості вузла
На цій сторінці показано, як призначити Pod Kubernetes на певний вузол за допомогою спорідненості вузла в кластері Kubernetes.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Версія вашого Kubernetes сервера має бути не старішою ніж v1.10. Для перевірки версії введітьkubectl version
.Додайте мітку до вузла
Виведіть список вузлів у вашому кластері разом з їхніми мітками:
kubectl get nodes --show-labels
Вивід буде схожий на такий:
NAME STATUS ROLES AGE VERSION LABELS worker0 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker0 worker1 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker1 worker2 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker2
Виберіть один з ваших вузлів і додайте до нього мітку:
kubectl label nodes <your-node-name> disktype=ssd
де
<your-node-name>
— це імʼя вашого обраного вузла.Перевірте, що ваш обраний вузол має мітку
disktype=ssd
:kubectl get nodes --show-labels
Вивід буде схожий на такий:
NAME STATUS ROLES AGE VERSION LABELS worker0 Ready <none> 1d v1.13.0 ...,disktype=ssd,kubernetes.io/hostname=worker0 worker1 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker1 worker2 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker2
У попередньому виводі можна побачити, що вузол
worker0
має міткуdisktype=ssd
.
Розмістіть Pod, використовуючи потрібну спорідненість вузла
Цей маніфест описує Pod, який має спорідненість вузла requiredDuringSchedulingIgnoredDuringExecution
, disktype: ssd
. Це означає, що Pod буде розміщений лише на вузлі, який має мітку disktype=ssd
.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
Застосуйте маніфест, щоб створити Pod, який буде розміщений на вашому обраному вузлі:
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-required-affinity.yaml
Перевірте, що Pod працює на вашому обраному вузлі:
kubectl get pods --output=wide
Вивід буде схожий на такий:
NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0
Розмістіть Pod, використовуючи бажану спорідненість вузла
Цей маніфест описує Pod, який має бажану спорідненість вузла preferredDuringSchedulingIgnoredDuringExecution
, disktype: ssd
. Це означає, що Pod надасть перевагу вузлу, який має мітку disktype=ssd
.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
Застосуйте маніфест, щоб створити Pod, який буде розміщений на вашому обраному вузлі:
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-preferred-affinity.yaml
Перевірте, що Pod працює на вашому обраному вузлі:
kubectl get pods --output=wide
Вивід буде схожий на такий:
NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0
Що далі
Дізнайтеся більше про Спорідненість вузла.