Планирование и масштабирование — Примеры
Пример 1 — Pod, который так и не планируется
Pod в состоянии pending, и дежурный инженер предлагает добавить узлы. Ниже — применённый манифест. Выясните, что на самом деле отказало pod’у, и измените наименьшее, что позволит ему запуститься.
spec:
nodeSelector:
disk: ssd
containers:
- name: api
image: myapp:1.4.2
Решение
spec:
nodeSelector:
disk: hdd
containers:
- name: api
image: myapp:1.4.2
$ kubectl describe pod api-7d4b2
Events:
Warning FailedScheduling 4m
0/3 nodes are available: 3 node(s) didn't match node selector.
Ограничения сужают поиск раньше, чем вообще учитывается соответствие ресурсам, поэтому этому pod’у отказали на первой проверке, и никакое количество ёмкости не помогло бы. Событие прямо говорит, какое ограничение не прошло, поэтому события pod’а читают прежде, чем добавлять машины; обычная ошибка — считать любой pod в состоянии pending проблемой ёмкости.
Пример 2 — Requests, решающие, кто переживёт давление
Узел испытывает давление по памяти, и один контейнер убивают, а его сосед на том же узле продолжает работать. Два контейнера различаются только полями ниже. Скажите, кого выберут первым, и исправьте уязвимый.
жертва: memory: (нет request, нет limit)
выживший: resources: { requests: { memory: 256Mi, cpu: 250m },
limits: { memory: 256Mi, cpu: 250m } }
Решение
жертва: resources: { requests: { memory: 192Mi, cpu: 200m },
limits: { memory: 384Mi, cpu: 800m } }
выживший: resources: { requests: { memory: 256Mi, cpu: 250m },
limits: { memory: 256Mi, cpu: 250m } }
Request — это то, что резервирует планировщик; limit — потолок, который контейнер не может превысить, и память выше него приводит к убийству процесса. Кластер вытесняет pod’ы без requests первыми, а pod’ы, у которых requests равны limits, — последними, поэтому контейнер с незаданными значениями и стал очевидной жертвой. Оставлять requests незаданными — обычная ошибка, и она же скрывает реальную стоимость нагрузки.
Подставьте свои имена образов, метки узлов и измерения там, где эти наброски используют заполнители.