- PVSM.RU - https://www.pvsm.ru -
Очередной релиз системы Kubernetes, 1.9, должен случиться на этой неделе. Согласно текущему плану [1], это произойдёт сегодня (13 декабря). Об основных новшествах, которые принесёт этот выпуск, уже известно: как и в прошлый раз [2], их накопилось действительно много. Представляем обзор самых значимых изменений, которые приходят в Kubernetes с грядущим релизом 1.9.
При написании этой статьи использовались:
… и, конечно, бесконечные issues и pull requests в GitHub-репозиториях проекта.
В архитектуре API событий (и библиотеке EventRecorder) реализованы [6] изменения, направленные на улучшения в двух направлениях:
Event
более структурированным, чтобы упростить дальнейшую работу с ним («первый и необходимый шаг для возможности автоматизировать его анализ»).Среди проблем, решаемых этими изменениями:
Сравнение старых и новых объектов Event
:
В деталях всё это описано в design-proposals: events-redesign [7]. Текущий статус — альфа-версия.
Добавлена [8] бета-версия механизма под названием admission webhooks, позволяющего изменять и/или принимать и отвергать запросы к API. Он относится к этапу контроля допуска (admission control) и срабатывает на последних шагах обработки запросов перед их сохранением в базу данных (etcd). По своей сути эти webhooks похожи на initializers (о них мы писали в переводной статье «Что происходит в Kubernetes при запуске kubectl run? Часть 1 [9]»), однако:
Пример использования admission webhooks из документации — проверка одного поля объекта и установка значения для его другого поля. Другой пример — автоматическое добавление служебного контейнера (допустим, выполняющего бэкап) по аннотации пода. Например, у нас есть под с MySQL, с одним контейнером (в котором сама MySQL), и у этого пода указана специальная аннотация. Когда мы создаем под, запрос приходит в Kubernetes API, который отправляет запрос в наше приложение через admission webhook, а приложение видит запрос, видит, что создается под, видит свою специальную аннотацию и делает просто rewrite — добавляет в под второй контейнер.
Подробное описание admission webhooks опубликовано здесь [10].
Workload API был представлен в прошлом релизе Kubernetes и объединил в себе интерфейсы, относящиеся к «рабочим нагрузкам»: DaemonSet
, Deployment
, ReplicaSet
, StatefulSet
. Для них была выделена отдельная группа API под названием apps
, и с выпуском K8s 1.9 все эти изменения получили стабильный статус.
Основные изменения в Workload API, представленные в релизах Kubernetes 1.8 и 1.9, обобщены в документации проекта [11].
StatefulSet
(и DaemonSet
) добавлена [12] поддержка условий [13], что делает их совместимыми с другими контроллерами категории core/v1
.--chunk-size={SIZE}
добавлен в kubectl get
, а поддержка ограничения данных, выводимых API (API chunking), в целом получила статус бета-версии.Имеющиеся плагины томов входят в состав Kubernetes: их называют «in-tree», поскольку весь код включён в основной репозиторий проекта, а в скомпилированном виде они распространяются в составе бинарников K8s. У такого подхода есть очевидный минус: поддержка сторонних хранилищ их производителями/разработчиками зависит от циклов релизов Kubernetes (кроме того, весь исходный код должен быть Open Source). Отчасти эта проблема решается плагином Flexvolume [14], однако данный механизм не гарантирует обратной совместимости и (при установке драйвера) требует развёртывания своих файлов в определенные места на узлах и мастерах.
Новый же подход получил название Out-of-Tree CSI Volume Plugins [15] (CSI — это Container Storage Interface, определяющий, как системы оркестровки контейнеров могут использовать сторонние хранилища). Он призван реализовать полноценный API в Kubernetes, который позволяет:
Авторами предложен следующий рекомендуемый механизм для деплоя драйверов CSI в Kubernetes:
Разъяснения по этой схеме и подробности о проекте в целом опубликованы в этом документе [16]. Статус реализации в Kubernetes 1.9 — альфа-версия.
Фича под названием Containerized mounts [17] привносит в Kubernetes возможность запуска утилит монтирования на подах, а не на хостовой машине. Таким образом, хостовая система может оставаться минимальным дистрибутивом GNU/Linux без стороннего ПО: для создания Ceph RBD (/usr/bin/rbd
), монтирования GlusterFS (mount.glusterfs
) и т.п., — а все утилиты для работы с томами (операции provision/delete, attach/detach, mount/unmount) помещаются в поды.
Подробности об этой возможности опубликованы в design-proposals: containerized-mounter-pod [18]. Текущий статус — альфа-версия.
Базовая поддержка [19] операции resize для существующих PV (PersistentVolume
) появилась в Kubernetes 1.8. К 1.9 она так и не достигла бета-версии, однако заметный прогресс налицо: добавлена поддержка изменения размера для файловых систем, а вместе с ней — для томов GCE, EBS, Cinder, а также Ceph RBD [20]. Бета-версия ожидается к релизу 1.10.
PersistentVolumeClaims
, используемых какими-либо подами, теперь предотвращается [21] (альфа-версия).volumeMode
и volumeDevice
для PV (PersistentVolume
), позволяющие [22] напрямую использовать блочные raw-устройства вместо файловой системы (альфа-версия).Реализована [23] базовая поддержка IPv6, предоставляющая «все возможности Kubernetes в сети IPv6 вместо IPv4». На данный момент эта реализация находится в альфа-версии и включает в себя:
bridge
и local-ipam
; отсутствие поддержки HostPorts; сетевая маска для пода/кластера должна быть /66 или больше.
Механизм освобождения ресурсов кластера (pod preemption) был улучшен благодаря поддержке PodDisruptionBudget
[26] и nominated pods [27]. Кроме того, в планировщик добавлена поддержка нового типа очереди, основанной [28] на приоритетах (первыми будут планироваться поды с наивысшим приоритетом).
При использовании [29] hostPort
[30] у подов появилась [31] возможность прослушивать один и тот же порт на разных IP-адресах.
Важное новшество от SIG Auth — ClusterRole Aggregation [32] для возможности добавлять права (permissions) уже существующим, т.е. встроенным в RBAC, ролям (admin
, edit
, view
).
Также можно отметить, что:
PolicyRules
) добавлена [33] поддержка формата */subresource
— например, */scale
будет включать в себя replicationcontroller/scale
;PodSecurityPolicy
[34] проведены заметные улучшения, включающие многократный рост производительности [35] при использовании большого числа политик в кластере (авторизация теперь происходит только для валидных для пода политик, а не всех политик кластера) и поддержку [36] дополнений K8s [37].Название фичи kubectl diff [38] говорит за себя: это новая команда, позволяющая просматривать различия между локально описанным объектом Kubernetes и текущим состоянием реального объекта (в кластере). Текущий статус — альфа-версия.
В kubeadm upgrade apply
добавлена опция --etcd-upgrade
, выполняющая обновление etcd в подах до версии, которая официально поддерживается целевым релизом Kubernetes (3.1.10 в случае K8s 1.9).
У kubeadm появилась [39] поддержка Kubelet Dynamic Configuration, что означает возможность выката конфигураций kubelet на работающий кластер (сама фича впервые появилась [40] в прошлой версии Kubernetes и сохраняет статус альфа-версии с перспективой повышения до беты в K8s 1.10).
Улучшена интеграция с облачной платформой:
unconfined
.Читайте также в нашем блоге:
Автор: distol
Источник [49]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/270568
Ссылки в тексте:
[1] текущему плану: https://github.com/kubernetes/features/blob/master/release-1.9/release-1.9.md
[2] прошлый раз: https://habrahabr.ru/company/flant/blog/338230/
[3] K8s 1.9 Release Notes: https://docs.google.com/document/d/1veHHyDH9VoNTwP6yy9u2Q7Jj1hnBJGVPv3NPHInImgU/edit#
[4] Kubernetes Features OSS tracking board: https://docs.google.com/spreadsheets/d/1WmMJmqLvfIP8ERqgLtkKuE_Q2sVxX8ZrEcNxlVIJnNc/edit#gid=0
[5] CHANGELOG-1.9: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md
[6] реализованы: https://github.com/kubernetes/features/issues/383
[7] events-redesign: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/events-redesign.md
[8] Добавлена: https://github.com/kubernetes/features/issues/492
[9] Что происходит в Kubernetes при запуске kubectl run? Часть 1: https://habrahabr.ru/company/flant/blog/342658/
[10] здесь: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/admission-control-webhooks.md
[11] документации проекта: https://kubernetes.io/docs/reference/workloads-18-19/
[12] добавлена: https://github.com/kubernetes/kubernetes/pull/55268
[13] условий: https://kubernetes.io/docs/api-reference/v1.8/#deploymentcondition-v1beta2-apps
[14] Flexvolume: https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md
[15] Out-of-Tree CSI Volume Plugins: https://github.com/kubernetes/features/issues/178
[16] этом документе: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md
[17] Containerized mounts: https://github.com/kubernetes/features/issues/278
[18] containerized-mounter-pod: https://github.com/jsafrane/community/blob/69c780f8b40dbe7014bdc1d5af9282f2dfdc75a0/contributors/design-proposals/storage/containerized-mounter-pod.md
[19] поддержка: https://github.com/kubernetes/features/issues/284
[20] Ceph RBD: https://github.com/kubernetes/kubernetes/pull/52767
[21] предотвращается: https://github.com/kubernetes/features/issues/498
[22] позволяющие: https://github.com/kubernetes/features/issues/351
[23] Реализована: https://github.com/kubernetes/features/issues/508
[24] добавлен: https://github.com/kubernetes/kubernetes/pull/52501
[25] здесь: https://habrahabr.ru/company/flant/blog/344098/
[26] PodDisruptionBudget
: https://github.com/kubernetes/kubernetes/pull/56178
[27] nominated pods: https://github.com/kubernetes/kubernetes/pull/55933
[28] основанной: https://github.com/kubernetes/kubernetes/pull/55109
[29] использовании: https://kubernetes.io/docs/concepts/configuration/overview/#services
[30] hostPort
: https://kubernetes.io/docs/api-reference/v1.8/#containerport-v1-core
[31] появилась: https://github.com/kubernetes/website/pull/5931/files
[32] ClusterRole Aggregation: https://github.com/kubernetes/features/issues/502
[33] добавлена: https://github.com/kubernetes/kubernetes/pull/53722
[34] PodSecurityPolicy
: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
[35] рост производительности: https://github.com/kubernetes/kubernetes/pull/55643
[36] поддержку: https://github.com/kubernetes/kubernetes/pull/55509
[37] дополнений K8s: https://kubernetes.io/docs/concepts/cluster-administration/addons/
[38] kubectl diff: https://github.com/kubernetes/features/issues/491
[39] появилась: https://github.com/kubernetes/kubernetes/pull/55803
[40] появилась: https://github.com/kubernetes/features/issues/281
[41] можно добавлять: https://github.com/kubernetes/kubernetes/pull/53553
[42] появилась: https://github.com/kubernetes/kubernetes/pull/51240
[43] добавлен: https://github.com/kubernetes/kubernetes/pull/52753
[44] hyperkube: https://github.com/kubernetes/kubernetes/tree/master/cluster/images/hyperkube
[45] добавлен: https://github.com/kubernetes/kubernetes/pull/54197
[46] Docker 17.06 и Kubernetes 1.7: ключевые новшества: https://habrahabr.ru/company/flant/blog/332160/
[47] Наш опыт с Kubernetes в небольших проектах: https://habrahabr.ru/company/flant/blog/331188/
[48] Инфраструктура с Kubernetes как доступная услуга: https://habrahabr.ru/company/flant/blog/341760/
[49] Источник: https://habrahabr.ru/post/344220/?utm_campaign=344220
Нажмите здесь для печати.