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

Kubernetes 1.28 Примечания к выпуску

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

CCE прошёл Certified Kubernetes Conformance Program и является сертифицированным предложением Kubernetes. CCE теперь поддерживает функции кластера Kubernetes 1.28. В этом разделе описаны изменения, внесённые в Kubernetes 1.28.

Индексы

Важные замечания

  • В Kubernetes 1.28 фреймворк планировщика улучшен для снижения бесполезных повторных попыток. Общая производительность планирования повышена. Если в кластере используется пользовательский плагин планировщика, вы можете выполнить адаптационное обновление, следуя инструкциям в GitHub.
  • Плагин Ceph FS in-tree устарел в Kubernetes 1.28 и будет удалён в Kubernetes 1.31. (Сообщество не планирует поддерживать миграцию CSI.) Вместо него используйте Ceph CSI driver.
  • Плагин Ceph RBD in-tree устарел в Kubernetes 1.28 и будет удалён в Kubernetes 1.31. (Сообщество не планирует поддерживать миграцию CSI.) Вместо него используйте RBD Ceph CSI driver.

Новые и улучшенные функции

Функции в альфа‑стадии отключены по умолчанию, функции в бета‑стадии включены по умолчанию, а функции в стадии GA всегда включены и их нельзя отключить. Возможность включения или отключения функций в стадии GA будет удалена в более поздних версиях Kubernetes. Политики CCE для новых функций совпадают с политиками сообщества.

  • Политика несовместимости версий расширена до трёх версий.

    Начиная с control planes 1.28 и worker nodes 1.25, Kubernetes skew policy расширяет поддерживаемый диапазон несовместимости control plane и worker node до трёх версий. Это позволяет выполнять ежегодные обновления минорных версий узлов, оставаясь на поддерживаемых минорных версиях. Для получения подробной информации см. Version Skew Policy.

  • Retroactive Default StorageClass переходит в GA.

    Назначение retroactive default StorageClass переходит в GA. Это улучшение значительно повышает способ назначения default StorageClasses для PersistentVolumeClaims (PVC).

    Контроллер PV был изменён так, чтобы автоматически назначать default StorageClass любому несвязанному PVC, у которого не настроен storageClassName. Кроме того, механизм проверки допуска PVC в API‑server был скорректирован, чтобы разрешать изменение значения из неустановленного состояния в фактическое имя StorageClass. Для получения подробной информации см. Retroactive default StorageClass assignment.

  • Native sidecar containers переходят в alpha.

    The native sidecar containers are available in alpha. Kubernetes 1.28 adds restartPolicy to Init containers. This field is available when the SidecarContainers feature gate is enabled. However, there are still some problems to be solved in the native sidecar containers. Therefore, the Kubernetes community recommends only using this feature gate in short lived testing clusters at the alpha phase. For details, see Introducing native sidecar containers.

  • Mixed version proxy переходит в alpha.

    Новый механизм (mixed version proxy) выпущен для улучшения обновления кластера. Это alpha‑функция в Kubernetes 1.28. При обновлении кластера API‑server’ы разных версий могут обслуживать разные наборы (группы, версии или ресурсы) встроенных ресурсов. Запрос ресурса в такой ситуации может быть обработан любым из доступных API‑server’ов, что может привести к тому, что запрос попадёт к API‑server, не знающему о запрашиваемом ресурсе. В результате запрос завершается ошибкой. Эта функция решает данную проблему. (Обратите внимание, что CCE обеспечивает безотказное обновление. Поэтому эта функция не используется в кластерах CCE.) Для получения подробной информации см. A New (alpha) Mechanism For Safer Cluster Upgrades.

  • Non-graceful node shutdown переходит в GA.

    The non-graceful node shutdown is now GA in Kubernetes 1.28. When a node was shut down and that shutdown was not detected by the kubelet's Node Shutdown Manager, the StatefulSet pods that run on this node will stay in the terminated state and cannot be moved to a running node. If you have confirmed that the shutdown node is irrecoverable, you can add an out-of-service taint to the node. This ensures that the StatefulSet pods and VolumeAttachments on this node can be forcibly deleted and the corresponding pods will be created on a healthy node. For details, see Non-Graceful Node Shutdown Moves to GA.

  • NodeSwap переходит в beta.

    Support for NodeSwap goes to beta in Kubernetes 1.28. NodeSwap is disabled by default and can be enabled using the NodeSwap feature gate. NodeSwap allows you to configure swap memory usage for Kubernetes workloads running on Linux on a per-node basis. Note that although NodeSwap has reached beta, there are still some problems to be solved and security risks to be enhanced. For details, see Beta Support for Using Swap on Linux.

  • Добавлены две функции, связанные с Джобой.

    Two alpha features are introduced: delayed creation of replacement pods and backoff limit per index.

    • Отложенное создание заменяющих pods

      По умолчанию, когда pod переходит в состояние terminating (например, из‑за вытеснения или выселения), Kubernetes немедленно создает заменяющий pod. Поэтому оба pods работают одновременно.

      В Kubernetes 1.28 эту функцию можно включить, включив feature gate JobPodReplacementPolicy. При включенном feature gate вы можете задать поле podReplacementPolicy в разделе spec задания в значение Failed. Таким образом, pods будут заменяться только после перехода в фазу failed, а не при состоянии terminating. Кроме того, вы можете проверить поле .status.termination задания. Значение этого поля указывает количество pods, связанных с заданием, во время termination.

    • Ограничение количества повторных попыток на индекс

      По умолчанию сбои pods для индексированных jobs фиксируются и ограничиваются глобальным лимитом повторных попыток, указанным в .spec.backoffLimit. Это означает, что если в job есть постоянно сбойный индекс, pods, указанные в job, будут перезапускаться неоднократно, пока сбои pods не исчерпают лимит. После достижения лимита job помечается как failed, и pods для остальных индексов в job могут никогда не запуститься.

      В Kubernetes 1.28 эту функцию можно включить, включив feature gate JobBackoffLimitPerIndex кластера. При включенном feature gate можно задать .spec.backoffLimitPerIndex при создании индексированного job. Только если сбои pods со всеми индексами, указанными в этом job, превысят верхний предел, pods, указанные в job, не будут перезапускаться.

  • Некоторые функции, связанные с CEL, улучшены.

    Функции, связанные с CEL, улучшены.

    • Поддержка CEL, используемая для проверки CRDs, переходит в бета.

      Эта функция была повышена до бета‑версии, начиная с Kubernetes 1.25. Встраивая выражения CEL в CRDs, разработчики могут решать большинство сценариев проверки CR без использования webhooks. В будущих версиях Kubernetes будут разработаны дополнительные функции CEL, такие как поддержка значений по умолчанию и конвертации CRD.

    • CEL admission control переходит в бета.

      CEL admission control настраиваемый. С помощью выражений CEL вы можете решать, принимать или отклонять запросы, полученные kube-apiserver. Выражения CEL также могут заменять admission webhooks. В Kubernetes 1.28 CEL admission control повышен до бета и добавлены новые функции, такие как:

      • ValidatingAdmissionPolicy может корректно обрабатывать переменную authorizer.
      • ValidatingAdmissionPolicy может проверять поле messageExpression.
      • Контроллер ValidatingAdmissionPolicy добавлен в kube-controller-manager для проверки типа CEL‑выражения в ValidatingAdmissionPolicy и сохранения причины в поле status.
      • CEL expressions могут содержать комбинацию из одной или нескольких переменных, которые могут быть определены в ValidatingAdmissionPolicy. Эти переменные могут использоваться для определения других переменных.
      • Функции библиотеки CEL могут использоваться для разбора ресурсов, указанных в resource.Quantity в Kubernetes.
  • Другие функции
    • Флаг функции ServiceNodePortStaticSubrange переходит в бета. При включённой этой функции можно зарезервировать статический диапазон портов, чтобы избежать конфликтов с динамически выделяемыми портами. Подробности см. Avoiding Collisions Assigning Ports to NodePort Services.
    • Добавлена альфа‑функция ConsistentListFromCache, позволяющая API‑серверу обслуживать согласованные списки из кэша. Запросы Get и List могут читать данные из кэша вместо etcd.
    • В Kubernetes 1.28 kubelet может настраивать каталог drop‑in (альфа). Эта функция позволяет добавить поддержку флага --config-dir для kubelet, чтобы можно было указать каталог вставки, который переопределяет конфигурацию kubelet в /etc/kubernetes/kubelet.conf.
    • ExpandedDNSConfig переходит в GA и включается по умолчанию. При включённой этой функции конфигурации DNS могут быть расширены.
    • Добавлена альфа‑функция CRDValidationRatcheting. Эта функция позволяет CR с не прошедшими проверками проходить, если запрос Patch или Update не изменяет ни одно из недействительных полей.
    • --concurrent-cron-job-syncs добавлен в kube-controller-manager для настройки количества рабочих потоков контроллера CronJob.

Изменения и удаление API

  • NetworkPolicyStatus удалён. В сетевой политике нет атрибута status.
  • annotationbatch.kubernetes.io/cronJob-scheduled-timestamp добавлен к объектам job для указания времени создания job.
  • В API job добавлены поля podReplacementPolicy и terminating. При указании этих полей, после завершения ранее созданного pod в job, job немедленно запускает новый pod для замены. Новые поля позволяют указать, заменять pod сразу после завершения предыдущего pod (исходное поведение) или заменять pod после полного завершения существующего pod (новое поведение). Это альфа‑функция, и её можно включить, активировав флаг функции JobPodReplacementPolicy в кластере.
  • Поле BackoffLimitPerIndex доступно в job. Pod, указанные в job, используют общий механизм backoff. Когда время backoff для job достигает предела, job помечается как неудачный, и ресурсы, включая неработающие индексы, освобождаются. Это поле позволяет настроить предел backoff для отдельного индекса. Подробности см. Backoff limit per index.
  • В API StorageVersion добавлено поле ServedVersions. Это изменение введено mixed version proxy. Новое поле используется для указания версии, которую может предоставить API‑сервер.
  • SelfSubjectReview добавлен в authentication.k8s.io/v1, а kubectl auth whoami переходит в GA.
  • LastPhaseTransitionTime добавлен в PersistentVolume. Новое поле используется для хранения последнего времени, когда том переходит в другую фазу.
  • resizeStatus в PVC.Status заменено на AllocatedResourceStatus. Новое поле указывает статусы операции изменения размера хранилища. Значение по умолчанию — пустая строка.
  • Если hostNetwork установлен в true и для pod указаны порты, поле hostport будет автоматически сконфигурировано.
  • Pod'ы StatefulSet имеют индекс pod, установленный как метка pod statefulset.kubernetes.io/pod-index.
  • PodHasNetwork в поле Condition pod'ов переименовано в PodReadyToStartContainers. Новое поле указывает, что контейнеры готовы к запуску после создания сети, томов и sandbox pod.
  • Новая опция конфигурации delayCacheUntilActive добавлена в KubeSchedulerConfiguration для указания, когда начинать кэшировать данные. Параметр по умолчанию имеет значение false. Если параметр установлен в true, включается выбор лидера. В этом случае планировщик начинает кэшировать информацию о планировании только после того, как узел управляющей плоскости станет лидером. Это уменьшает нагрузку на память узлов управляющей плоскости, но также замедляет скорость переключения в случае отказа.
  • Поле namespaceParamRef добавлено в admissionregistration.k8s.io/v1alpha1.ValidatingAdmissionPolicy.
  • Поля reason и fieldPath добавлены в правила валидации CRD, чтобы позволить указать причину и путь к полю при ошибке проверки.
  • Выражение CEL в ValidatingAdmissionPolicy поддерживает доступ к пространству имён через namespaceObject.
  • Группы API ValidatingAdmissionPolicy и ValidatingAdmissionPolicyBinding повышены до betav1.
  • Теперь у ValidatingAdmissionPolicy поле messageExpression проверяется относительно разрешённых типов.

Feature Gate и изменения параметров командной строки, а также их удаление.

  • –short удалён из kubelet. Поэтому вывод по умолчанию команды kubectl version совпадает с выводом команды kubectl version –short.
  • --volume-host-cidr-denylist и --volume-host-allow-local-loopback удалены из kube-controller-manager. --volume-host-cidr-denylist представляет собой список CIDR‑диапазонов, разделённых запятыми. Плагины томов по этим IP‑адресам не разрешены. Если --volume-host-allow-local-loopback установлен в false, локальный IP‑адрес loopback и CIDR‑диапазоны, указанные в --volume-host-cidr-denylist, отключаются.
  • --azure-container-registry-config устарел в kubelet и будет удалён в более поздних версиях Kubernetes. Используйте --image-credential-provider-config и --image-credential-provider-bin-dir вместо этого.
  • --lock-object-namespace и --lock-object-name удалены из kube-scheduler. Используйте --leader-elect-resource-namespace и --leader-elect-resource-name или ComponentConfig вместо этого. --lock-object-namespace используется для определения пространства имён объекта блокировки, а --lock-object-name используется для определения имени объекта блокировки.
  • KMS v1 устарел и будет получать только обновления безопасности. Используйте KMS v2 вместо этого. В более поздних версиях Kubernetes используйте --feature-gates=KMSv1=true для настройки провайдера KMS v1.
  • Флаги функций DelegateFSGroupToCSIDriver, DevicePlugins, KubeletCredentialProviders, MixedProtocolLBService, ServiceInternalTrafficPolicy, ServiceIPStaticSubrange и EndpointSliceTerminatingCondition удалены.

Улучшенный Kubernetes 1.28 в CCE

Во время периода обслуживания версии CCE периодически обновляет Kubernetes 1.28 и предоставляет расширенные функции.

Для получения подробной информации об обновлениях версии кластера см. Release Notes for CCE Cluster Versions.

Ссылки

Для получения более подробной информации о сравнении производительности и эволюции функций между Kubernetes 1.28 и другими версиями см. Kubernetes v1.28 Release Notes.