Облачная платформаEvolution

Версии Kubernetes

Эта статья полезна?

В разделе описаны ключевые особенности поддерживаемых сервисом версий Kubernetes.

Версия 1.34

  • Поддержка PodReplacementPolicy в Job-контроллере объявлена общедоступной.

    Как только под с ошибкой начинает завершаться, по умолчанию Job-контроллер пересоздает его заново. При этом заменяющий под может испытывать трудности с поиском доступных узлов до тех пор, пока исходный под полностью не завершится.

    Чтобы под пересоздавался только после полного завершения работы исходного, достаточно в Job указать параметр .spec.podReplacementPolicy: Failed.

  • Поддержка Sleep для PostStart- и PreStop-хуков объявлена общедоступной.

    Sleep позволяет контейнерам приостанавливаться на заданный период времени после запуска или перед завершением работы. Это обеспечивает простой способ управления корректным завершением работы контейнеров и улучшения общего управления их жизненным циклом.

  • Поддержка ServiceAccount tokens для kubelet image credential providers в бета-тестировании.

    Kubelet для загрузки приватных контейнерных образов может запрашивать кратковременные токены ServiceAccount, связанные с определенным подом. Это повышает безопасность, уменьшая необходимость в долгоживущих секретах и упрощая управление учетными данными.

  • Поддержка Kubernetes YAML (KYAML) в альфа-тестировании.

    KYAML — диалект YAML, разработанный специально для Kubernetes. Начиная с Kubernetes v1.34, в качестве выходного формата для kubectl можно использовать KYAML.

    KYAML решает специфические проблемы как YAML, так и JSON. Например, значительное количество пробелов в YAML требует тщательного внимания к отступам и вложенности, а необязательное экранирование строк может привести к неожиданному приведению типов (пример: The Norway Bug). JSON не поддерживает комментарии и имеет строгие требования к завершающим запятым и ключам в кавычках.

    Вы можете написать KYAML и передать его в качестве входных данных любой версии kubectl, поскольку все файлы KYAML также допустимы в формате YAML. В версии kubectl v1.34 вы также можете запросить вывод в формате KYAML (например, kubectl get -o kyaml ...), установив переменную окружения KUBECTL_KYAML=true. Вы также можете запросить вывод в формате JSON или YAML.

  • Поддержка упорядоченного удаления ресурсов при удалении пространства имен объявлена общедоступной.

    Улучшение обеспечивает детерминированное и безопасное удаление ресурсов при удалении пространства имен. Это позволяет устранить ситуацию, когда удаление ресурсов может создавать уязвимости в системе безопасности или приводить к непредвиденному поведению, например, к сохранению подов после удаления связанных с ними сетевых политик.

  • Поддержка специальных символов в переменных окружения объявлена общедоступной.

    В именах переменных окружения разрешены почти все печатные символы ASCII, за исключением знака «=». Изменение поддерживает сценарии, когда рабочие нагрузки требуют нестандартных символов в именах переменных. Например, фреймворки, такие как .NET Core, которые используют двоеточие (:) для представления вложенных ключей конфигурации.

    Смягченные правила проверки применяются к переменным окружения, определенным непосредственно в спецификации Pod, а также к тем, которые внедряются с помощью ссылок envFrom на ConfigMaps и Secrets.

  • Поддержка VolumeAttributesClass объявлена общедоступной.

    VolumeAttributesClass — новый объект API Kubernetes, который позволяет управлять параметрами томов, такими как IOPS и пропускная способность.

  • Вместо PreferClose нужно использовать PreferSameZone и PreferSameNode:

    • PreferSameZone обеспечивает приоритетную отправку трафика на эндпоинты, находящиеся в той же зоне, что и клиент.

    • PreferSameNode обеспечивает приоритетную отправку трафика на эндпоинты, расположенные на том же узле, что и клиент.

  • Поддержка возможности указывать requests and limits ресурсов на уровне пода в бета-тестировании.

    Функциональность позволяет определять общий бюджет ресурсов для пода, который затем распределяется между входящими в него контейнерами. Это гарантирует, что общее количество ресурсов, используемых всеми контейнерами, не превышает заданные подом ограничения, что приводит к более точному планированию и эффективному использованию ресурсов кластера.

  • Улучшения для In-place Pod resize в бета-тестировании.

    Они включают поддержку уменьшения использования памяти и интеграцию с ресурсами уровня подов.

Версия 1.33

  • Поддержка Sidecar-контейнеров объявлена общедоступной.

    Sidecar-контейнеры — это дополнительные контейнеры, которые работают вместе с основным контейнером приложения в том же поде. Такие контейнеры используются для улучшения или расширения функциональности основного контейнера приложения, предоставляя дополнительные функции, например логирование, мониторинг, безопасность или синхронизация данных, без прямого изменения кода основного приложения. Например, если у вас есть веб-приложение, требующее локального веб-сервера, локальный веб-сервер является вспомогательным контейнером, а само веб-приложение — контейнером приложения.

    Kubernetes реализует sidecar-контейнеры как особый класс init-контейнеров с restartPolicy: Always. Это гарантирует, что sidecar-контейнеры запускаются до контейнеров приложений, продолжают работать на протяжении всего жизненного цикла пода и автоматически завершают работу после завершения работы основных контейнеров.

    Sidecar-контейнеры поддерживают startup-, readiness-, liveness-пробы для управления своим жизненным циклом.

  • Функция позволяет указывать ссылку на образ как том в поде и повторно использовать его для монтирования тома в контейнерах.

    Теперь данные тома можно упаковывать отдельно и совместно использовать их между контейнерами в подах, не включая их в основной образ. Это снижает уровень уязвимостей и упрощает создание образов.

  • Поддержка Multiple Service CIDRs объявлена общедоступной.

    В обновлении реализована новая логика выделения IP-адресов для сервисов. Каждой службе типа ClusterIP во всем кластере должен быть назначен уникальный IP-адрес. Попытка создать службу с определенным IP-адресом кластера, который уже был выделен, приведет к ошибке.

    Обновленный механизм выделения использует два новых стабильных API-объекта: ServiceCIDR и IPAddress. С их помощью администраторы кластера могут при необходимости динамически увеличивать пул доступных IP-адресов для сервисов типа ClusterIP, просто создавая новые объекты ServiceCIDR.

  • Поддержка нового бэкенда nftables для kube-proxy объявлена общедоступной.

    Теперь в kube-proxy стабильно поддерживается backend на базе nftables, который значительно повышает производительность и масштабируемость работы сервисов в кластере Kubernetes. Для обеспечения совместимости по умолчанию на Linux-узлах по-прежнему используется iptables.

  • Поддержка subresource для kubectl объявлена общедоступной.

    Чтобы получить или обновить подресурсы status, scale и другие, для kubectl get, kubectl patch, kubectl edit, kubectl apply или kubectl replace необходимо использовать опцию --subresource.

  • Поддержка Job success policy объявлена общедоступной.

    С помощью .spec.successPolicy в Job можно тонко настраивать, какие индексы succeededIndexes и сколько подов succeededCount должны успешно завершиться для признания Job успешной.

  • Файл может содержать псевдонимы и переопределения kubectl, например использовать по умолчанию server-side apply, оставив при этом учетные данные кластера и информацию о хосте в kubeconfig. Такое разделение позволяет использовать одни и те же пользовательские настройки для взаимодействия с kubectl независимо от целевого кластера и используемого kubeconfig.

  • Теперь можно изменять ресурсы запущенных подов без перезапуска. Это позволяет вертикально масштабировать нагрузки без простоев.

  • Функция предоставляет набор конфигураций уровня kubelet для точной настройки обработки CrashLoopBackOff.

Версия 1.32

  • PersistentVolumeClaims (PVC), созданные StatefulSet, автоматически удаляются, когда больше не нужны. При этом обеспечивается сохранность данных во время обновлений StatefulSet и обслуживания узлов. Функция упрощает управление хранилищем для StatefulSet и снижает риск возникновения «осиротевших» PVC.

  • Поддержка Field Selectors в Custom Resources объявлена общедоступной.

    Механизм Field Selectors в Custom Resources позволяет разработчикам добавлять Field Selectors к Custom Resources, аналогично функциональности, доступной для встроенных объектов Kubernetes. Это обеспечивает более эффективную и точную фильтрацию Custom Resources, способствуя улучшению практики проектирования API.

  • Функция позволяет динамически изменять размер memory-backed томов в зависимости от лимитов ресурсов пода, улучшая переносимость рабочей нагрузки и общую утилизацию ресурсов узла.

  • Функция позволяет администраторам указывать, какие эндпоинты разрешены для анонимных запросов. Например, администратор может разрешить анонимный доступ только к health-эндпоинтам, таким как /healthz, /livez и /readyz, но при этом обеспечить предотвращение анонимного доступа к другим эндпоинтам или ресурсам кластера.

  • Механизм managed-by Job API перешел в бета-тестирование.

    Поле manageBy для Job позволяет внешним контроллерам, например Kueue, управлять синхронизацией Job, предлагая большую гибкость и интеграцию с передовыми системами управления рабочей нагрузкой.

  • Функция позволяет пользователям повторять попытку увеличения тома при сбое с меньшим размером тома. Это усовершенствование обеспечивает более устойчивый и надежный процесс увеличения тома, снижая риск потери или повреждения данных в процессе.

  • Kubernetes Scheduler был дополнен функцией асинхронного вытеснения, которая повышает пропускную способность планирования за счет асинхронной обработки операций вытеснения. Вытеснение гарантирует, что поды с более высоким приоритетом получат необходимые им ресурсы, вытесняя поды с более низким приоритетом.

    Ранее этот процесс включал в себя сложные операции, такие как вызовы API для удаления подов, что замедляло работу Kubernetes Scheduler. Благодаря улучшению такие задачи теперь обрабатываются параллельно, что позволяет Kubernetes Scheduler продолжать планировать другие поды без задержек.

  • Сервер API Kubernetes теперь поддерживает Mutating Admission Policies на основе Common Expression Language (CEL), предоставляя легкую и эффективную альтернативу Mutating Admission Webhooks.

    Благодаря улучшению администраторы могут использовать CEL для объявления мутаций, таких как установка меток, полей по умолчанию или добавление дополнительных функций с помощью простых декларативных выражений. Подход снижает сложность эксплуатации, устраняет необходимость в вебхуках и напрямую интегрируется с kube-apiserver, обеспечивая быструю и надежную обработку изменений в процессе работы.

Версия 1.31

  • Поддержка AppArmor объявлена общедоступной.

    Для защиты контейнеров с помощью AppArmor необходимо указать appArmorProfile.type в securityContext объекта.

  • Функция реализует в kube-proxy механизм для балансировщиков нагрузки, который позволяет плавно закрывать соединения на узлах, открытых через службы с типом LoadBalancer и externalTrafficPolicy: Cluster. Чтобы использовать функцию, kube-proxy должен запускаться в кластере в качестве служебного прокси по умолчанию, а подсистема балансировки нагрузки должна поддерживать отключение соединения.

  • Каждый объект PersistentVolume содержит новое поле .status.lastTransitionTime, фиксирующее время последнего изменения статуса. Поле будет заполняться при обновлении PersistentVolume и первом изменении статуса — Pending, Bound, Released.

    Функция полезна для измерения времени перехода тома из состояния Pending в Bound и предоставления метрик и SLO.

  • Функция Always Honor PersistentVolume Reclaim Policy перешла в бета-тестирование.

    Улучшение гарантирует, что Reclaim Policy для PersistentVolume (PV) будет соблюдаться даже после удаления связанного PersistentVolumeClaim (PVC), предотвращая утечку ресурсов.

    Раньше Reclaim Policy, связанный с PV, мог игнорироваться в зависимости от того, был ли PV или PVC удален первым. Следовательно, соответствующий ресурс хранения во внешней инфраструктуре мог не быть удален, даже если Reclaim Policy было установлено ​​на «Delete». Это приводило к потенциальным несоответствиям и утечкам ресурсов.

    С введением функции Kubernetes гарантирует, что Reclaim Policy со значением «Delete» будет применен, обеспечивая удаление объекта хранения независимо от последовательности удаления PV и PVC.

  • Распределение трафика для Services переходит в бета-тестирование и включено по умолчанию.

    Поле spec.trafficDistribution для Service позволяет устанавливать предпочтения по способу маршрутизации трафика. Например, значение PreferClose указывает предпочтительную маршрутизацию трафика на эндпоинты, находящиеся в той же зоне, что и клиент.

  • API VolumeAttributesClass находится в бета-тестировании.

    VolumeAttributesClass предоставляет универсальный API, поддерживаемый Kubernetes, для динамического изменения параметров тома, таких как предоставленный IO. Это позволяет рабочим нагрузкам вертикально масштабировать свои тома в реальном времени для оптимизации затрат и производительности, если это поддерживается их провайдером.

  • Поддержка Image Volume в альфа-тестировании.

    Сообщество Kubernetes стремится в будущем использовать больше возможностей искусственного интеллекта (AI) и машинного обучения (ML). Одним из требований, предъявляемых к этим вариантам использования, является поддержка образов и артефактов, совместимых с Open Container Initiative (OCI), непосредственно в качестве собственного источника тома. Это позволяет пользователям сосредоточиться на стандартах OCI, а также хранить и распространять любой контент с использованием реестров OCI.

    Учитывая это, в версию Kubernetes 1.31 добавлена новая функция, позволяющая подключать OCI-образ в volume в объекте Pod. Пользователи могут указывать ссылку на образ в volume в объекте Pod и повторно использовать его для монтирования томов в контейнерах. Чтобы опробовать это, необходимо включить функцию увеличения объема изображения.

  • Включив функцию AnonymousAuthConfigurableEndpoints, пользователи могут использовать файл конфигурации аутентификации для настройки эндпоинтов, к которым можно получить доступ с помощью анонимных запросов. Это позволяет пользователям защитить себя от неправильных конфигураций RBAC, которые могут предоставить анонимным пользователям широкий доступ к кластеру.

Архив версий