CCE прошел Программу соответствия Certified Kubernetes и является сертифицированным предложением 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 вместо.
Новые и расширенные функции
Функции в alpha stage отключены по умолчанию, функции в beta stage включены по умолчанию, а функции в GA stage всегда включены и их нельзя отключить. Возможность включения или отключения функций в GA stage будет удалена в последующих версиях Kubernetes. Политики CCE для новых функций такие же, как в сообществе.
- Политика version skew расширена до трёх версий.
Начиная с control plane версии 1.28 и worker node версии 1.25, политика Kubernetes skew расширяет поддерживаемый сдвиг control plane и worker node до трёх версий. Это позволяет ежегодно выполнять минорные обновления узлов, оставаясь на поддерживаемых минорных версиях. Для подробностей смотрите Политика Version Skew.
- Retroactive Default StorageClass переходит в GA.
Назначение retroactive default StorageClass переходит в GA. Это улучшение приносит значительное повышение того, как default StorageClasses назначаются PersistentVolumeClaims (PVCs).
Контроллер PV был изменён, чтобы автоматически назначать default StorageClass любому незакреплённому PVC с storageClassName не настроено. Кроме того, механизм проверки допуска PVC внутри API server был скорректирован, чтобы разрешить изменение значений из неустановленного состояния в реальное имя StorageClass. Для подробностей смотрите Назначение Retroactive default StorageClass.
- Native sidecar containers переходят в alpha.
Нативные sidecar контейнеры доступны в альфа. Kubernetes 1.28 добавляет restartPolicy к Init контейнерам. Это поле доступно, когда включён feature gate SidecarContainers. Однако всё ещё есть некоторые проблемы, которые нужно решить в нативных sidecar контейнерах. Поэтому сообщество Kubernetes рекомендует использовать этот feature gate только в короткоживущих тестовых кластеров на альфа-фазе. Для подробностей см. Введение нативных sidecar контейнеров.
- Прокси с разными версиями переходит в альфа.
Новый механизм (mixed version proxy) выпущен для улучшения обновления кластера. Это альфа‑функция в Kubernetes 1.28. Когда кластер проходит обновление, API‑серверы разных версий в кластере могут обслуживать разные наборы (группы, версии или ресурсы) встроенных ресурсов. Запрос ресурса, сделанный в этом сценарии, может быть обслужен любым из доступных API‑серверов, что потенциально приводит к тому, что запрос попадёт на API‑сервер, который может не знать о запрашиваемом ресурсе. В результате запрос завершается ошибкой. Эта функция может решить эту проблему. (Обратите внимание, что CCE предоставляет безпрерывное обновление. Поэтому эта функция не используется в кластерах CCE.) Для получения подробностей см. Новый (alpha) механизм для более безопасных обновлений кластера.
- Неаккуратное завершение работы узла переходит в GA.
Неаккуратное выключение узла теперь доступно в GA в Kubernetes 1.28. Когда узел был выключен, и это выключение не было обнаружено Node Shutdown Manager kubelet'а, Pods StatefulSet, работающие на этом узле, останутся в состоянии terminated и не смогут быть перемещены на работающий узел. Если вы подтвердили, что узел с выключением непоправим, вы можете добавить вне сервиса taint на узле. Это гарантирует, что pod'ы StatefulSet и VolumeAttachments на этом узле могут быть принудительно удалены, а соответствующие pod'ы будут созданы на здоровом узле. Для получения подробностей см. Non-Graceful Node Shutdown Moves to GA.
- NodeSwap переходит в beta.
Поддержка NodeSwap переходит в beta в Kubernetes 1.28. NodeSwap выключен по умолчанию и может быть включен с помощью переключателя функции NodeSwap. NodeSwap позволяет конфигурировать использование swap‑памяти для рабочих нагрузок Kubernetes, работающих на Linux, на уровне каждого узла. Обратите внимание, что хотя NodeSwap достиг beta, остаются некоторые проблемы, требующие решения, и необходимо усилить меры безопасности. Для получения подробностей см. Beta Support for Using Swap on Linux.
- Добавлены две функции, связанные с заданиями.
Введены две альфа‑функции: отложенное создание заменяющих pod'ов и лимит backoff на индекс.
- Отложенное создание заменяющих подов
По умолчанию, когда под переходит в состояние завершения (например, из‑за вытеснения или выселения), Kubernetes сразу создаёт заменяющий под. Поэтому оба пода работают одновременно.
В Kubernetes 1.28 эту возможность можно включить, включив фич‑гейт JobPodReplacementPolicy. При включённом фич‑гейте вы можете задать podReplacementPolicy поле в spec джобы для Сбой. Таким образом, поды будут заменяться только когда они достигают фазы сбоя, а не когда находятся в состоянии завершения. Кроме того, вы можете проверить .status.termination поле джобы. Значение этого поля определяет количество подов, связанных с джобой во время завершения.
- Предел отката на индекс
По умолчанию сбои подов для индексированных джоб записываются и ограничиваются глобальным пределом повторных попыток, указанным в .spec.backoffLimit. Это означает, что если в задаче есть постоянно сбойный индекс, pods, указанные в задаче, будут перезапускаться неоднократно, пока сбои pods не исчерпают лимит. Когда лимит достигается, задача помечается как неудачная, и pods для других индексов в задаче могут никогда не запуститься.
В Kubernetes 1.28 эту возможность можно включить, включив feature gate JobBackoffLimitPerIndex кластера. При включённом feature gate, .spec.backoffLimitPerIndex может быть указано при создании индексированной задачи. Только если сбои pods со всеми индексами, указанными в этой задаче, превысят верхний лимит, pods, указанные в задаче, не будут перезапускаться.
- Отложенное создание заменяющих подов
- Некоторые функции, связанные с CEL, улучшены.
Функции, связанные с CEL, улучшены.
- CEL, использующийся для проверки CRD, переходит в beta.
Эта возможность была повышена до beta, начиная с Kubernetes 1.25. Встраивая выражения CEL в CRD, разработчики могут решать большинство сценариев проверки CR без использования webhooks. Более функций CEL, таких как поддержка значений по умолчанию и конверсия CRD, будут разработаны в более поздних версиях Kubernetes.
- CEL admission control переходит в beta.
CEL admission control настраиваемый. С помощью CEL expressions вы можете решить, принимать или отклонять запросы, полученные kube-apiserver. CEL expressions также могут служить заменой admission webhooks. Kubernetes 1.28 обновил CEL admission control до beta и внедрил новые функции, такие как:
- ValidatingAdmissionPolicy может корректно обрабатывать авторизатор переменная.
- ValidatingAdmissionPolicy может иметь messageExpression поле проверено.
- Контроллер ValidatingAdmissionPolicy добавляется в kube-controller-manager для проверки типа CEL expression в ValidatingAdmissionPolicy и сохранения причины в status поле.
- CEL expressions могут содержать комбинацию одной или нескольких переменных, которые могут быть определены в ValidatingAdmissionPolicy. Эти переменные могут использоваться для определения других переменных.
- Функции библиотеки CEL могут использоваться для разбора ресурсов, указанных resource.Quantity в Kubernetes.
- CEL, использующийся для проверки CRD, переходит в beta.
- Другие функции
- Фича‑gate 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
- Этот podReplacementPolicy и завершающий поля добавляются к job API. При указании этих полей, как только ранее созданный Под завершится в задаче, задача немедленно запускает новый Под, заменяющий Под. Новые поля позволяют указать, заменять Под сразу после завершения предыдущего Пода (поведение по умолчанию) или заменять Под после полного завершения существующего Пода (новое поведение). Это альфа‑функция, и вы можете включить её, включив JobPodReplacementPolicy фича‑гейт в вашем кластере.
- Эта BackoffLimitPerIndex поле доступно в задаче. Поды, указанные в задаче, используют общий механизм обратного отката. Когда время обратного отката задачи достигает предела, эта задача помечается как неудачная, и ресурсы, включая неработающие индексы, освобождаются. Это поле позволяет настроить предел обратного отката для отдельного индекса. Подробности см. Предел обратного отката на индекс.
- Эта ServedVersions поле добавляется в StorageVersion API. Это изменение вводится смешанным прокси версии. Новое поле используется для указания версии, которую может предоставить сервер API.
- SelfSubjectReview добавлено к authentication.k8s.io/v1, и kubectl auth whoami переходит в GA.
- LastPhaseTransitionTime добавлено к PersistentVolume. Новое поле используется для хранения последнего времени, когда том переходит в другую фазу.
- resizeStatus в PVC.Status заменено на AllocatedResourceStatus. Новое поле указывает статусы операции изменения размера хранилища. Значение по умолчанию — пустая строка.
- Если hostNetwork установлен в true и порты указаны для pod, hostport поле будет автоматически настроено.
- Поды StatefulSet имеют индекс pod, установленный как метка pod statefulset.kubernetes.io/pod-index.
- PodHasNetwork в Condition поле pods было переименовано в PodReadyToStartContainers. Новое поле указывает, что контейнеры готовы к запуску после создания сети, томов и sandbox pod.
- Новая опция конфигурации delayCacheUntilActive добавлена в KubeSchedulerConfiguration для указания, когда начинать кэшировать данные. Этот параметр по умолчанию false. Если этот параметр установлен в true, включено избрание лидера. В этом случае планировщик начинает кэшировать информацию о расписании только после того, как узел управляющей плоскости становится лидером. Это уменьшает нагрузку на память узлов управляющей плоскости, но также замедляет скорость переключения в случае отказа.
- Поле namespaceParamRef добавлено в admissionregistration.k8s.io/v1alpha1.ValidatingAdmissionPolicy.
- Поле причина и fieldPath поля добавлены в правила валидации CRD, чтобы позволить вам указать причину и путь к полю, если проверка не удалась.
- CEL-выражение ValidatingAdmissionPolicy поддерживает доступ к namespace через namespaceObject.
- Группы API ValidatingAdmissionPolicy и ValidatingAdmissionPolicyBinding перенесены в betav1.
- У ValidatingAdmissionPolicy теперь есть messageExpression поле проверяется по разрешённым типам.
Feature Gate and Command Line Parameter Changes and Removals
- –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-адрес обратного цикла и 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 удалены.
Enhanced Kubernetes 1.28 on CCE
Во время периода технического обслуживания версии, CCE периодически обновляет Kubernetes 1.28 и предоставляет расширенные функции.
Для получения подробной информации об обновлениях версии кластера см Примечания к выпуску для версий кластера CCE.
Ссылки
Для получения дополнительных сведений о сравнении производительности и функциональной эволюции между Kubernetes 1.28 и другими версиями, см. Примечания к выпуску Kubernetes v1.28.