Alex
https://www.youtube.com/watch?v=2AUvTRaflsk
Alex
Яндекс облако анонсирует kubernetes
Peter
Сейчас развернул новый кластер λ kubectl -n istio-system get po NAME READY STATUS RESTARTS AGE grafana-77b49c55db-4tjkq 1/1 Running 0 7m40s istio-citadel-794595f7fd-6fndg 1/1 Running 0 7m39s istio-galley-6d45db4767-6fmll 1/1 Running 0 7m40s istio-ingressgateway-5fc5cf85cb-s7wx5 1/1 Running 0 7m40s istio-init-crd-10-tsmvn 0/1 Completed 0 8m41s istio-init-crd-11-cwb22 0/1 Completed 0 8m41s istio-pilot-67c5ccf8f-65njf 2/2 Running 0 7m39s istio-policy-5f6f9b6846-r2wt5 2/2 Running 4 7m39s istio-sidecar-injector-698c7b7f9-6hpsf 1/1 Running 0 7m39s istio-telemetry-74d74764cb-z66rt 0/2 Pending 0 7m39s istio-tracing-595796cf54-4htkz 1/1 Running 0 7m38s kiali-5c584d45f6-g82cs 1/1 Running 0 7m40s prometheus-5fffdf8848-kgxcd 1/1 Running 0 7m39s
Peter
istio-telemetry не может стартовать
Peter
О, бл% Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 71s (x29 over 11m) default-scheduler 0/2 nodes are available: 2 Insufficient cpu.
Peter
Сколько ж ему надо?
Andrey
1 cpu вроде на под
Andrey
это можно урезать в настройках
Andrey
mixer: telemetry: resources: requests: cpu: 500m
Alex
добавляй ноды в кластер с внутренним адресом, который присвоен eth1 интерфейсу
я попробовал одну из нод стартануть с --node-ip= с айпи из локалки eth1, но траф на нее все-равно идет по eth0..
Alex
проблема решилась запуском flannel с опциями --iface-regex=^10\.32\. (айпи из локалки)
Aleksey
Коллеги. % kubectl describe resourcequotas Name: noc-inv-quota Namespace: default Resource Used Hard -------- ---- ---- cpu 450m 1 memory 898Mi 800Mi что то с этим должно произойти ?
Aleksey
Можешь уточнить вопрос?
это квота. она превышена. почему все живы ? :)
Andrey
это квота. она превышена. почему все живы ? :)
Но она регулирует проставление resources в podSpec. А не в ходе работы контейнера.
Aleksey
тоесть мина замедленного действия
Andrey
тоесть мина замедленного действия
Погоди, можешь kubectl get resourcequota [нужная_quota] -o yaml сделать. describe не всегда удобен и показывает всё.
Andrey
Это на реквесты, а не на лимиты квота может быть.
Aleksey
Погоди, можешь kubectl get resourcequota [нужная_quota] -o yaml сделать. describe не всегда удобен и показывает всё.
могу. но там нет ничего такого чего я не мог бы расскзать своей маме.
Aleksey
https://www.pastiebin.com/5d050ee59611d
Andrey
https://www.pastiebin.com/5d050ee59611d
Да, у тебя quota на реквесты настроена. Реквесты — это scheduling и приоритет: для CPU — CPU shares, для памяти — oom_score_adj. Т.е. юзать они могут больше, если есть ресурсы на машинах.
Aleksey
мое изначальное желаение было именно таким
Andrey
как бы мне настроить ее на лимиты ?
Вот такие варианты есть: https://v1-11.docs.kubernetes.io/docs/concepts/policy/resource-quotas/#compute-resource-quota
Andrey
мое изначальное желаение было именно таким
Вот пошагово: https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/
Aleksey
спасибо
Andrey
спасибо
Учти, что это будет работать только для ресурсов, в которых указаны ресурсы. Если ты их не укажешь, то контейнеры будут запущены с минимальным приоритетом, но всё же будут запущены и будут потреблять ресурсы машины, если на ней нет более приоритетных тасков. Если ты хочешь проставлять ресурсы и лимиты для всего, то тебе нужно ещё одну штуку создать. https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/
Aleksey
у меня всё расписано ага.
Aleksey
теперь я сделал так вот. hard: requests.cpu: "1" requests.memory: "1800Mi" limits.cpu: "10m" limits.memory: "800Mi"
Aleksey
я ожидаю что одног убьют и все будут тормозить.
Aleksey
но стью пока не дочитал. зря ожидаю ?
Andrey
я ожидаю что одног убьют и все будут тормозить.
Вроде, нужно поды пересоздать. Он не эвиктит (могу ошибаться), как мне кажется.
Aleksey
у меня некуда эвиктить
Aleksey
да обе статьи не отвечают
Aleksey
выставил всем квоту в 10m но оно нет.
Andrey
выставил всем квоту в 10m но оно нет.
Она только при создании пода применяется.
Aleksey
ну тоесть это сущность учета и планирования а не применения ?
Aleksey
а можно что бы нет ? что бы взяла и обрезала без решедулинга ?
Aleksey
Нет! Так не работает Kubernetes сейчас.
окей. предположим у меня есть процесс который вдруг начал потреблять в целом довольно много ресурсов. скейлится мне некуда. убивать процесс я не хочу. на адское латенси согласен.
Aleksey
как мне стоит поступить ?
Aleksey
у меня кажется есть план как это сделать руками. но не через манифесты куба
Andrey
окей. предположим у меня есть процесс который вдруг начал потреблять в целом довольно много ресурсов. скейлится мне некуда. убивать процесс я не хочу. на адское латенси согласен.
По CPU он и так будет исполняться ровно на столько, насколько ты зареквестил. По memory: настраиваешь hard eviction threshold и Pod priority для всех подов. Когда на ноде не хватает памяти, kubelet выкинет неприоритетные поды.
Aleksey
тоесть мой план не решаем. процесс придется убить или будут евикчены если есть куда отсальные поды ?
Andrey
тоесть мой план не решаем. процесс придется убить или будут евикчены если есть куда отсальные поды ?
Он у тебя по памяти разрастается? Просто с памятью ты не можешь в системе ничего сделать. Нужно кого-то убивать или эвиктить с ноды. >One can also distinguish compressible resources from incompressible resources.[1] Compressible resources, generally throughput ones such as CPU and network bandwidth, can be throttled benignly: the user will be slowed down proportionally to the throttling, but will otherwise proceed normally. Other resources, generally storage ones such as memory, cannot be throttled without either causing failure (if a process cannot allocate enough memory, it typically cannot run) or severe performance degradation, such as due to thrashing (if a working set does not fit into memory and requires frequent paging, progress will slow significantly). https://en.wikipedia.org/wiki/System_resource
Aleksey
нет он по cpu.
Aleksey
сохранить этот процесс мне хотелось бы запущенным любой ценой
Andrey
нет он по cpu.
Так забей тогда. У тебя уже всё окей, если реквесты корректно стоят. Реквесты настраивают cgroup CPU shares в Linux. Он не будет убит или выкинут с ноды.
Aleksey
окей. сформулирую максимально точно. есть процесс который внезапно начал потреблять много cpu. в лимитах у него 32cpu. он старается потреблять их все. однако типичное поведение для него 10cpu убивать и решеулить этот процесс нельзя. есть варианты спасти ноду от высокого cpu usage ?
Aleksey
это аварийная ситуация предположим
Aleksey
8
Aleksey
тоесть он be
Andrey
8
Он выставит CPU приоритет в 8/количество_ядер_в_машине. Если другим подам с реквестами на машине нужен будет CPU, то он будет забран у этого процесса.
Aleksey
хм
Andrey
Но если никому CPU больше не нужен, то он будет весь CPU потреблять. Будет работать т.н. work-conserving CPU scheduling.
Aleksey
интересно
Aleksey
но cgroup диктуют не гарантии вроде как. мне кажется ты про cpu shares говоришь
Aleksey
но и они тоже не так работают
Aleksey
я в недоумении
Andrey
но cgroup диктуют не гарантии вроде как. мне кажется ты про cpu shares говоришь
Они так работают. И тут речь не про гарантии. https://docs.openshift.com/container-platform/3.6/admin_guide/overcommit.html#overcommit-cpu
Aleksey
во. новая ссылко. спасибо
Andrey
во. новая ссылко. спасибо
Полезно знать. requests: memory: oom_score_adj cpu: CPU shares limits: memory: memory.limit_in_bytes cpu: CFS throttling
Aleksey
да. вот именно это я хотел.
Aleksey
теперь следи за руками. ведь cgroup иерархичны.
Aleksey
а значит если мы меняем cpu shares уровнем выше то всем ниже достается меньший shares
Andrey
а значит если мы меняем cpu shares уровнем выше то всем ниже достается меньший shares
Да, но ты не меняешь их выше. kubelet трогает только конкретный cgroups, относящиеся к контейнерам, на которых ты поставил ресурсы.
Andrey
Да, ты можешь сделать это сам. Но тут наступает время грязных хаков.
Aleksey
я сказал что цена мне не важна.
Aleksey
выглядит будто такая крутилка есть, но не доступна из соображений консистентности системы
Andrey
выглядит будто такая крутилка есть, но не доступна из соображений консистентности системы
Так и есть. Там ещё много всего в логике куба надо поменять, чтобы live resize'ы такие делать.
Aleksey
нет ничего менять не надо.
Aleksey
учёт первичен
Aleksey
потому что помимо cfs там еще cpu affinity
Aleksey
но для GA только
Andrey
потому что помимо cfs там еще cpu affinity
Да, но ты их используешь? Они недавно в кубе появились.
Aleksey
я вообще ничего не использую у меня локалхост и ноутбук :)