Итоги года: главные особенности Kubernetes 2020 года
Kubernetes быстро развивается, время от времени выпускаются новые версии, добавляющие к уже огромному набору функций. Однако еще в ноябре, во время Kubecon + CloudNativeCon North America, соучредитель Kubernetes Стивен Огастус объявил, что они будут снижать частоту выпуска релизов. На это решение частично повлияла пандемия, но в основном тот факт, что многие организации все еще используют Kubernetes 1.15. Замедляя скорость выпуска версий Kubernetes, компания хочет, чтобы провайдеры не отставали от нее. В этом году Kubernetes выпустил только три незначительных обновления версий 1.18, 1.19 и 1.20 и планирует продолжить этот темп и в 2021 году. Но, несмотря на отсутствие релизов в 2020 году, Kubernetes выкатил несколько новых функций. Давайте взглянем на некоторые из наиболее востребованных функций и их статус выпуска.
Менеджер топологии Kubernetes
Во многих высокопроизводительных рабочих нагрузках используется сочетание ЦП и аппаратных ускорителей для обеспечения параллельных вычислений с высокой пропускной способностью. Чтобы получить максимальную производительность от рабочей нагрузки, необходимы различные оптимизации, такие как изоляция ЦП, а также распределение памяти и устройств. Однако в Kubernetes эти задачи выполняются для непересекающихся наборов компонентов, поскольку и диспетчеры устройств, и ЦП работают независимо при распределении ресурсов. Это может привести к снижению производительности и увеличению задержки.
K8s Topology Manager был запущен в виде бета-версии вместе с Kubernetes 1.18. Topology Manager — это компонент kubelet, который помогает сократить задержки и повысить производительность в критически важных приложениях. Менеджер топологии предоставляет единый источник достоверной информации для различных компонентов через интерфейс для компонентов, называемых поставщиками подсказок, которые могут использоваться компонентами для принятия решений о распределении ресурсов в соответствии с топологией для обеспечения малой задержки и оптимизированной производительности критически важных рабочих нагрузок.
Чтобы включить эту функцию, необходимо включить шлюз функции TopologyManager. Однако это включено по умолчанию в версии 1.18 и выше.
Отладка узла Kubectl
Эта функция, запущенная в Kubernetes 1.18 в качестве альфа-версии, теперь стала бета-версией в версии 1.20. Эта функция позволяет конечным пользователям отлаживать свои узлы с помощью kubectl. Пользователи могут отлаживать запущенные модули, не перезапуская их и не полагаясь на вход в контейнеры для выполнения задач отладки, таких как проверка файловой системы, выполнение дополнительных утилит отладки или выполнение начальных сетевых запросов через пространство имен хоста. 
Теперь пользователи могут выполнять следующие действия:
- Устраните неполадки рабочих нагрузок, которые аварийно завершают работу при запуске, создав копию модуля с помощью другого образа или команды контейнера.
- Устраняйте неполадки контейнеров без дистрибутива, добавляя новый контейнер с инструментами отладки в копию модуля или в эфемерные контейнеры.
- Устранение неполадок узлов путем создания нового контейнера, работающего в рабочей области хоста и имеющего доступ к файловой системе хоста.
С помощью этой функции Kubernetes хочет отказаться от использования SSH для отладки и обслуживания узлов. Отладка функционала kubectl будет включена по умолчанию в Kubernetes 1.20. Альфа-отладка kubectl устарела и будет удалена в следующих выпусках.
Входящий API версии 1
Этот API был доступен в виде бета-версии, начиная с Kubernetes 1.1, с различными улучшениями. Ingress стал популярным API среди пользователей и балансировщиков нагрузки, что де-факто придало ему статус GA в сообществе K8s. Ingress API обрабатывает внешний доступ к службам, предоставляя соответствующие маршруты HTTP и HTTPs. Ingress выполняет различные задачи, такие как балансировка нагрузки, предоставление виртуальных хостов на основе имен и завершение SSL/TLS. Ресурсы Ingress зависят от контроллеров Ingress для работы. В настоящее время K8s поддерживает различные контроллеры Ingress, такие как GCE и nginx, а также ряд других. В версии 1.18 Kubernetes внес несколько ключевых изменений в объект Ingress. Стало доступно новое поле типа пути, для которого по умолчанию установлено значение РеализацияSpecific. Теперь пользователи могут указать тип пути, используя типы пути «Точный» и «Префикс».
Поле IngressClass было доступно пользователям для указания типа входа в кластер K8s. Однако, начиная с Kubernetes 1.18, для указания класса входящего трафика стало доступно новое поле IngressClassName, заменяющее существовавшую ранее аннотацию kubernetes.io/ingress.class.
Операции со снимками тома
Моментальные снимки — не самое надежное решение для резервного копирования/восстановления, когда речь идет о больших объемах рабочих нагрузок. Однако, если вы правильно разыграете свои карты, моментальные снимки могут оказаться полезными для обеспечения резервного копирования и восстановления функций без простоев. Это усовершенствование было запущено как бета-версия вместе с Kubernetes 1.16 и обеспечивало поддержку API для подключаемых модулей Kubernetes Container Storage Interface (CSI) для создания моментальных снимков PersistentVolumes и их восстановления при необходимости. Чтобы снимки были надежными, пользователи должны обеспечить согласованность данных на уровне приложений, операционной системы хоста и системы хранения. Если моментальные снимки сделаны до того, как все данные приложения в памяти будут сохранены внутри, хранилище неизбежно будет повреждено и бесполезно, когда это необходимо.
В Kubernetes 1.20 функция Volume Snapshot Operations была перемещена в общедоступную. Эта функция позволяет пользователям делать моментальные снимки тома стандартизированным способом, обеспечивая надежность. Операции со снимками переносимы и могут быть встроены в различные среды Kubernetes или поддерживаемые поставщики хранилищ. Эти примитивы операций с моментальными снимками можно использовать для разработки расширенных функций администрирования хранилища для K8, что позволяет выполнять резервное копирование на уровне кластера и приложений. Чтобы использовать эту функцию, вы должны убедиться, что контроллер моментальных снимков, CRD моментальных снимков и веб-перехватчики проверки связаны с Kubernetes вашим дистрибьютором.
Изящное отключение узла
Эта новая функция была запущена в качестве альфа-версии с последним выпуском K8s. Эта функция решает проблему, с которой сталкиваются многие пользователи и администраторы кластера, когда дело доходит до отключения модуля. Поды не всегда следуют жизненному циклу подов. Это может произойти, когда система узлов внутри работающего модуля отключается. Поскольку модуль не может узнать, что узел был отключен, модуль может столкнуться с проблемами и не выключится, как ожидалось. Функция GracefulNodeShutdown решает эту проблему, сообщая kubelet об отключении узла, что приводит к корректному завершению работы запущенных модулей.
Горизонтальные элементы управления скоростью автомасштабирования Pod
API Horizontal Pod Autoscaling (HPA) — это функция альфа-версии, которая позволяет автоматически масштабировать модули до наборов реплик на основе определенных значений метрик. Эта функция очень полезна, когда речь идет о приложениях, которые могут подвергаться колебаниям трафика. HorizontalPodAutoscaler теперь поставляется с необязательным поведением поля. Теперь пользователи могут задавать различные коэффициенты масштабирования или масштабирования для разных приложений в зависимости от их функциональности и известного поведения.
Новые функции Kubernetes: многие из них ожидаются в 2021 году
Это лишь некоторые из многих функций, которые с нетерпением ждали пользователи. Несколько других функций, таких как поддержка TLS 1.3, Immutable Secrets и ConfigMaps, а также Kubernetes API Server Egress Proxy, были доступны в различных состояниях доступности в прошлом году. Kubernetes имеет много новых функций в разработке, а некоторые функции ожидают общедоступности. Из-за замедления темпов циклов выпуска Kubernetes пытается расширить поддержку предыдущих версий, чтобы организациям было легче идти в ногу с быстрыми темпами разработки. И эти новые функции обязательно побудят организации совершить этот переход. Будет интересно посмотреть, как эта новая стратегия релиза сработает для Kubernetes и какие новые функции появятся в GA с Kubernetes 1.21.