Kubernetes maxPods int32 также включает модули по умолчанию.

Я хочу установить максимально разрешенные поды (которые нужны / создаются моему приложению) на любом узле Kubernetes как «3» (в пространстве имен по умолчанию).

Когда я устанавливаю maxPods: 3 в /var/lib/kubelet/config.yaml, кажется, что он также включает в себя капсулы, созданные кубернетами внутри (namespace: 'kube-system') в это число. Другими словами, если я не установил maxPods на 7 (на узле, который также является Master), я не могу получить ни один модуль приложения, созданный в пространстве имен по умолчанию.

Мой узел (я установил maxPods на node1.co.com как '8', и я могу получить только 2 модуля приложений в пространстве имен по умолчанию):

$ kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, cap: .status.capacity}'
{
  "name": "node1.co.com",
  "cap": {
    "cpu": "2",
    "ephemeral-storage": "8649700Ki",
    "hugepages-2Mi": "0",
    "memory": "8007036Ki",
    "pods": "8"
  }
}
{
  "name": "node2.co.com",
  "cap": {
    "cpu": "2",
    "ephemeral-storage": "8649700Ki",
    "hugepages-2Mi": "0",
    "memory": "8009324Ki",
    "pods": "9"
  }
}

Все дополнительные модули находятся в состоянии ожидания:

$ kubectl create -f single-node-deployement4.yaml
$ kubectl get pods -o=wide --all-namespaces | grep Pending

default       single-node-deployment4-585466c56c-sszdz                  0/1     Pending     0          17s     <none>           <none>                                  <none>           <none>

$ kubectl get pods -o = wide --all-namespaces | grep OutOf

kube-system   coredns-86c58d9df4-7gb5d                                        0/1     OutOfpods   0          7d19h   <none>           node1.co.com   <none>           <none>
kube-system   coredns-86c58d9df4-t6rcj                                        0/1     OutOfpods   0          7d19h   <none>           node1.co.com   <none>           <none>

Является ли количество внутренних модулей кубернетов постоянным, и я могу предположить, что у них должно быть максимум три модуля, я могу установить 'maxPods: 9' или есть лучший способ установить maxPods?


person techsurvivor    schedule 13.03.2019    source источник


Ответы (1)


Я думаю ты мог бы добиться того же результата

  • ограничить количество модулей на пространство имен
  • не планировать на главном узле

используя вместе эти политики / функции Kubernetes:

  1. ResourceQuota (квота на количество объектов)
  2. Node Taint

Пример:

Создайте квоту ресурсов на основе количества объектов:

  • kubectl create namespace limited

# Source: object-count-quota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: object-counts spec: hard: pods: "3"

  • kubectl create -f ./object-count-quota.yaml -n limited

  • kubectl describe resourcequota -n limited

Сделайте главный узел неуправляемым:

  • kubectl taint nodes master-node key=value:NoSchedule
person Nepomucen    schedule 19.03.2019
comment
Да, я видел параметры resourceQuota, которые могут работать для меня, но в этом случае мне нужно добавить каждый узел в отдельное пространство имен, а затем создать одну resourceQuota для каждого узла. Пожалуйста, поправьте меня, если я ошибаюсь. Я планирую иметь в кластере более 50-80 узлов. - person techsurvivor; 21.03.2019
comment
Боюсь, вы ошибаетесь. Вы не можете добавить узел в определенное пространство имен. Узлы являются примером ресурсов низкого уровня и не находятся в каком-либо пространстве имен. Пространства имен - это способ разделения ресурсов кластера между несколькими пользователями / группами с помощью квоты ресурсов = типа ограничений, которые ограничивают совокупное потребление ресурсов для каждого пространства имен, а не для каждого узла. Проекты с открытым исходным кодом, такие как Deis Workflow (платформа PaaS поверх K8S), которые позволяют различным командам развертывать и запускать свои рабочие нагрузки в одном кластере, также должны каким-то образом решать эту проблему, и они делают это с помощью квоты ресурсов, см. Компонент настройки -settings.md - person Nepomucen; 21.03.2019
comment
Спасибо Nepomucen за комментарии, но мое требование - автоматическое масштабирование для моего сервера CI / CD, где мне нужно привязать к одному и тому же шаблону POD (с тем же пространством имен) для всех требований к контейнерам. Поэтому для этого мне нужно использовать то же пространство имен. Кроме того, я не могу иметь более 3 модулей на любом узле из-за требований к ресурсам. Вот почему maxPods лучше всего служит моей цели, но у меня это не работает. - person techsurvivor; 22.03.2019