- Регистрация
- 23.09.18
- Сообщения
- 12.347
- Реакции
- 176
- Репутация
- 0
Вчера, 25 марта,
Информация, использованная для подготовки этого материала, взята из официального анонса,
Релиз Kubernetes 1.18 получил свой официальный логотип, суть которого сводится к сравнению проекта с Большим адронным коллайдером. Подобно БАК, что стал результатом работы тысяч учёных со всего мира, Kubernetes объединил вокруг себя тысячи разработчиков из сотен организаций, и все они работают над общим делом: «улучшением облачных вычислений во всех аспектах».
Тем временем, энтузиасты из команды SUSE подготовили облако слов, созданное на основе записей release notes к 3412 коммитам, сделанным для релиза K8s 1.18. И оно получилось таким:
Теперь — о том, что же стоит за этими словами, в более понятном для пользователей виде.
Планировщик
Главное новшество здесь — это
Для решения этой проблемы авторы предлагают, чтобы планировщик использовал разные конфигурации, назначаемые на имя планировщика и называемые профилями. Стартуя, kube-scheduler просматривает все доступные профили и сохраняет их в реестр. Если профилей в конфигурации нет, выбирается вариант по умолчанию (default-scheduler). После того, как pod'ы попадают в очередь, kube-scheduler выполняет их планирование с учётом выбранного планировщика.
Сами политики планирования основываются на предикатах (PodFitsResources, PodMatchNodeSelector, PodToleratesNodeTaints и т.п.) и приоритетах (SelectorSpreadPriority, InterPodAffinityPriority, MostRequestedPriority, EvenPodsSpreadPriority и т.п.). В реализации сразу предусмотрена система плагинов, чтобы все профили добавлялись через специальный фреймворк.
Текущая структура конфигурации (вскоре будет изменена):
type KubeSchedulerConfiguration struct {
...
SchedulerName string
AlgorithmSource SchedulerAlgorithmSource
HardPodAffinitySymmetricWeight
Plugins *Plugins
PluginConfig []PluginConfig
...
}
… и пример настройки:
profiles:
- schedulerName: 'default-scheduler'
pluginConfig:
- name: 'InterPodAffinity'
- args:
hadPodAffinityWeight:
К следующему релизу K8s ожидается перевод фичи в бета-версию, а ещё через два — стабилизация. Подробнее о профилях для планировщика см. в
Другое новшество, появившееся в статусе альфа-версии, —
В то же время сама фича
Кроме того, объявлено о стабилизации
Настраиваемая скорость масштабирования в HPA
Больше года в печи Kubernetes enhancements томится занятная фича под названием
Как известно, Horizontal Pod Autoscaler (HPA) в Kubernetes масштабирует число pod'ов у любого ресурса, поддерживающего подресурс scale, основываясь на потреблении CPU или других метриках. Новая возможность позволяет контролировать скорость, с которой это масштабирование происходит, причём в обе стороны. До сих пор её можно было регулировать весьма ограничено (см., например, глобальный для кластера параметр --horizontal-pod-autoscaler-downscale-stabilization-window).
Основная мотивация к введению настраиваемой скорости масштабирования — возможность разделения рабочих нагрузок кластера по их важности для бизнеса, позволив одним приложениям (обрабатывающим самый критичный трафик) иметь максимальную скорость увеличения в размере и невысокую скорость сворачивания (т.к. может случиться новый всплеск нагрузки), а другим — масштабироваться по иным критериям (для экономии средств и т.п.).
Предложенное решение — для конфигураций HPA добавлен объект behavior, позволяющий определять правила для контролирования масштабирования в обе стороны (scaleUp и scaleDown). Например, конфигурация:
behavior:
scaleUp:
policies:
- type: percent
value: 900%
… приведёт к тому, что число запущенных в настоящий момент pod'ов будет увеличиваться на 900%. Т.е., если приложение стартует как один pod, в случае необходимости масштабирования оно начнёт расти как 1 → 10 → 100 → 1000.
Другие примеры и детали по реализации — см. в
Узлы
Прогресс в поддержке HugePages (
Менеджер топологии узла (
Также статус бета-версии получила представленная в K8s 1.16 фича
kubectl
Иллюстрация работы kubectl debug:
% kubectl help debug
Execute a container in a pod.
Examples:
# Start an interactive debugging session with a debian image
kubectl debug mypod --image=debian
# Run a debugging session in the same namespace as target container 'myapp'
# (Useful for debugging other containers when shareProcessNamespace is false)
kubectl debug mypod --target=myapp
Options:
-a, --attach=true: Automatically attach to container once created
-c, --container='': Container name.
-i, --stdin=true: Pass stdin to the container
--image='': Required. Container image to use for debug container.
--target='': Target processes in this container name.
-t, --tty=true: Stdin is a TTY
Usage:
kubectl debug (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
Другая команда — kubectl diff, — впервые появившаяся ещё в
Кроме того, флагу kubectl --dry-run
Сети
Для многих сетевых фич был повышен статус готовности:
Прочие изменения
Среди других новшеств в Kubernetes 1.18 (более полный перечень см. в
Изменения в зависимостях:
Что устарело?
P.S.
Читайте также в нашем блоге:
You must be registered for see links
очередной релиз Kubernetes — 1.18. По сложившейся для нашего блога традиции, мы рассказываем о наиболее значимых изменениях в новой версии.Информация, использованная для подготовки этого материала, взята из официального анонса,
You must be registered for see links
,
You must be registered for see links
, обзоров от
You must be registered for see links
и
You must be registered for see links
, а также соответствующих issues, pull requests, Kubernetes Enhancement Proposals (KEP)…Релиз Kubernetes 1.18 получил свой официальный логотип, суть которого сводится к сравнению проекта с Большим адронным коллайдером. Подобно БАК, что стал результатом работы тысяч учёных со всего мира, Kubernetes объединил вокруг себя тысячи разработчиков из сотен организаций, и все они работают над общим делом: «улучшением облачных вычислений во всех аспектах».
Тем временем, энтузиасты из команды SUSE подготовили облако слов, созданное на основе записей release notes к 3412 коммитам, сделанным для релиза K8s 1.18. И оно получилось таким:
Теперь — о том, что же стоит за этими словами, в более понятном для пользователей виде.
Планировщик
Главное новшество здесь — это
You must be registered for see links
(Scheduling Profiles). Связано оно с тем, что чем более неоднородными становятся рабочие нагрузки в кластере, тем скорее возникает потребность в разных подходах к их планированию.Для решения этой проблемы авторы предлагают, чтобы планировщик использовал разные конфигурации, назначаемые на имя планировщика и называемые профилями. Стартуя, kube-scheduler просматривает все доступные профили и сохраняет их в реестр. Если профилей в конфигурации нет, выбирается вариант по умолчанию (default-scheduler). После того, как pod'ы попадают в очередь, kube-scheduler выполняет их планирование с учётом выбранного планировщика.
Сами политики планирования основываются на предикатах (PodFitsResources, PodMatchNodeSelector, PodToleratesNodeTaints и т.п.) и приоритетах (SelectorSpreadPriority, InterPodAffinityPriority, MostRequestedPriority, EvenPodsSpreadPriority и т.п.). В реализации сразу предусмотрена система плагинов, чтобы все профили добавлялись через специальный фреймворк.
Текущая структура конфигурации (вскоре будет изменена):
type KubeSchedulerConfiguration struct {
...
SchedulerName string
AlgorithmSource SchedulerAlgorithmSource
HardPodAffinitySymmetricWeight
Plugins *Plugins
PluginConfig []PluginConfig
...
}
… и пример настройки:
profiles:
- schedulerName: 'default-scheduler'
pluginConfig:
- name: 'InterPodAffinity'
- args:
hadPodAffinityWeight:
К следующему релизу K8s ожидается перевод фичи в бета-версию, а ещё через два — стабилизация. Подробнее о профилях для планировщика см. в
You must be registered for see links
.Другое новшество, появившееся в статусе альфа-версии, —
You must be registered for see links
правило для равномерного распределения pod'ов (Even Pod Spreading). В настоящий момент правила определяются в PodSpec и привязываются к pod'ам, а теперь стало возможным задавать глобальную настройку на уровне кластера. Подробности — в
You must be registered for see links
.В то же время сама фича
You must be registered for see links
(её feature gate — EvenPodsSpread), позволяющая равно распределять pod'ы по кластеру категории multi-zone, переведена в статус бета-версии.Кроме того, объявлено о стабилизации
You must be registered for see links
, призванной добавлять taints на узлы при наступлении определённых условий. Впервые фича появилась в уже далёком релизе
You must be registered for see links
, а статус бета-версии получила в
You must be registered for see links
.Настраиваемая скорость масштабирования в HPA
Больше года в печи Kubernetes enhancements томится занятная фича под названием
You must be registered for see links
, т.е. настраиваемая скорость горизонтального масштабирования. (К слову её разработку инициировал
You must be registered for see links
.) В новом релизе она была доведена до первой стадии массового использования — стала доступна в альфа-версии.Как известно, Horizontal Pod Autoscaler (HPA) в Kubernetes масштабирует число pod'ов у любого ресурса, поддерживающего подресурс scale, основываясь на потреблении CPU или других метриках. Новая возможность позволяет контролировать скорость, с которой это масштабирование происходит, причём в обе стороны. До сих пор её можно было регулировать весьма ограничено (см., например, глобальный для кластера параметр --horizontal-pod-autoscaler-downscale-stabilization-window).
Основная мотивация к введению настраиваемой скорости масштабирования — возможность разделения рабочих нагрузок кластера по их важности для бизнеса, позволив одним приложениям (обрабатывающим самый критичный трафик) иметь максимальную скорость увеличения в размере и невысокую скорость сворачивания (т.к. может случиться новый всплеск нагрузки), а другим — масштабироваться по иным критериям (для экономии средств и т.п.).
Предложенное решение — для конфигураций HPA добавлен объект behavior, позволяющий определять правила для контролирования масштабирования в обе стороны (scaleUp и scaleDown). Например, конфигурация:
behavior:
scaleUp:
policies:
- type: percent
value: 900%
… приведёт к тому, что число запущенных в настоящий момент pod'ов будет увеличиваться на 900%. Т.е., если приложение стартует как один pod, в случае необходимости масштабирования оно начнёт расти как 1 → 10 → 100 → 1000.
Другие примеры и детали по реализации — см. в
You must be registered for see links
.Узлы
Прогресс в поддержке HugePages (
You must be registered for see links
): в альфа-версии
You must be registered for see links
поддержка этих страниц на уровне контейнеров и возможность запрашивать страницы разного размера.Менеджер топологии узла (
You must be registered for see links
), призванный унифицировать подход к тонкой настройке распределения аппаратных ресурсов для различных компонентов в Kubernetes, переведён в статус бета-версии.Также статус бета-версии получила представленная в K8s 1.16 фича
You must be registered for see links
, предлагающая механизм подсчёта накладных расходов на pod'ы.kubectl
You must be registered for see links
альфа-версия команды kubectl debug (
You must be registered for see links
), которая развила концепцию «
You must be registered for see links
». Они были впервые представлены в K8s 1.16 с целью упростить отладку в pod'ах. Для этого в нужном pod'е запускается временный (т.е. живущий непродолжительное время) контейнер, содержащий в себе необходимые инструменты для отладки. Как мы уже писали, эта команда по своей сути идентична существовавшему до сих пор плагину kubectl-debug (
You must be registered for see links
). Иллюстрация работы kubectl debug:
% kubectl help debug
Execute a container in a pod.
Examples:
# Start an interactive debugging session with a debian image
kubectl debug mypod --image=debian
# Run a debugging session in the same namespace as target container 'myapp'
# (Useful for debugging other containers when shareProcessNamespace is false)
kubectl debug mypod --target=myapp
Options:
-a, --attach=true: Automatically attach to container once created
-c, --container='': Container name.
-i, --stdin=true: Pass stdin to the container
--image='': Required. Container image to use for debug container.
--target='': Target processes in this container name.
-t, --tty=true: Stdin is a TTY
Usage:
kubectl debug (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
Другая команда — kubectl diff, — впервые появившаяся ещё в
You must be registered for see links
и получившая статус бета-версии в 1.13, наконец-то
You must be registered for see links
стабильной. Как понятно из названия, она позволяет сравнивать конфигурации кластеров. По случаю стабилизации фичи у неё
You must be registered for see links
, а также
You must be registered for see links
вся соответствующая документация на сайте Kubernetes.Кроме того, флагу kubectl --dry-run
You must be registered for see links
поддержку разных значений (client, server, none), что позволяет пробовать исполнение команды только на стороне клиента или сервера. Для её реализации на стороне сервера
You must be registered for see links
поддержка основных команд включая create, apply, patch и другие.Сети
You must be registered for see links
перемещение ресурса Ingress из текущей группы API (extensions.v1beta1) в networking.v1beta1 с последующей стабилизацией в виде v1. Для этого запланировано проведение ряда изменений (
You must be registered for see links
). На данный момент — в рамках бета-версии в K8s 1.18 — Ingress получил два значимых новшества:- новое поле pathType, позволяющее определять, по какому принципу будет производиться сопоставление пути (Exact, Prefix или ImplementationSpecific; последнее поведение определяется в IngressClass);
- новый ресурс IngressClass и новое (неизменяемое) поле Class в определении IngressSpec, указывающее на то, какой котроллер реализует ресурс Ingress. Эти изменения приходят на смену аннотации kubernetes.io/ingress.class, использование которой объявят устаревшим.
Для многих сетевых фич был повышен статус готовности:
- стабильным стал плагин
You must be registered for see links, улучшающий производительность работы DNS благодаря использованию агента для DNS-кэша на узлах кластера;
- стабильным объявлено и поле
You must be registered for see links, определяющее прикладной протокол для каждого порта сервиса (ресурсы ServicePort и EndpointPort);
-
You must be registered for see linksпризнана достаточно стабильной, чтобы перевести её в бета-версию;
- по умолчанию теперь активирован (в рамках бета-версии) и
You must be registered for see links, выступающий как более масштабируемая и расширяемая замена обычным Endpoints.
Прочие изменения
Среди других новшеств в Kubernetes 1.18 (более полный перечень см. в
You must be registered for see links
):- Объявлен стабильным
You must be registered for see links, предлагающий программный интерфейс для автоматизации запроса и получения x509-сертификатов от Certificate Authority. Он был представлен ещё в K8s 1.4 и получил статус бета-версии в 1.6.
- Ряд заметных улучшений в работе с ОС Windows:
You must be registered for see links(альфа-версия),You must be registered for see links(альфа-версия),You must be registered for see linksчерез CSI proxy (альфа-версия), стабильные версииYou must be registered for see links(Group Managed Service Account) иYou must be registered for see links.
Изменения в зависимостях:
- версия CoreDNS в составе kubeadm — 1.6.7;
- cri-tools 1.17.0;
- CNI (Container Networking Interface) 0.8.5, Calico 3.8.4;
- используемая версия Go — 1.13.8.
Что устарело?
- API Server
You must be registered for see linksустаревшие API: все ресурсы с apps/v1beta1 и extensions/v1beta1 должны перейти на apps/v1, также стоит обратить внимание на частности с ресурсами daemonsets, deployments, replicasets, networkpolicies, podsecuritypolicies;
- endpoint для метрик /metrics/resource/v1alpha1
You must be registered for see links— вместо него теперь /metrics/resource;
- все генераторы команды kubectl run
You must be registered for see linksкроме единственного, отвечающего за генерацию pod'а.
P.S.
Читайте также в нашем блоге:
- «
You must be registered for see links»;
- «
You must be registered for see links»;
- «
You must be registered for see links»;
- «
You must be registered for see links».