CCE прошел Программу сертификации совместимости Kubernetes и является сертифицированным решением Kubernetes. CCE позволяет создавать кластеры Kubernetes 1.28. В этом разделе описаны изменения, внесённые в Kubernetes 1.28.
Индексы
Important Notes
- В 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 вместо.
New and Enhanced Features
Функции в альфа‑стадии отключены по умолчанию, функции в бета‑стадии включены по умолчанию, а функции в GA‑стадии всегда включены и их нельзя отключить. Возможность включения или отключения функций в GA‑стадии будет удалена в более поздних версиях Kubernetes. Политики CCE для новых функций такие же, как в сообществе.
- Политика несовместимости версий расширена до трёх вариантов.
Начиная с control planes 1.28 и worker nodes 1.25, политика Kubernetes skew расширяет поддерживаемый сдвиг control plane и worker node до трёх версий. Это позволяет выполнять ежегодные минорные обновления узлов, оставаясь на поддерживаемых минорных версиях. Для подробностей см Политика несоответствия версий.
- Retroactive Default StorageClass переходит в GA.
Назначение retroactive default StorageClass переходит в GA. Это улучшение обеспечивает значительное повышение того, как default StorageClasses назначаются PersistentVolumeClaims (PVCs).
Контроллер PV был изменён, чтобы автоматически назначать default StorageClass любому незакреплённому PVC с storageClassName не настроено. Кроме того, механизм проверки PVC при приёме (admission) в API‑сервере был скорректирован, чтобы разрешить изменение значений из состояния unset в фактическое имя StorageClass. Для подробностей см Retroactive default StorageClass assignment.
- Внедрены native sidecar контейнеры.
Нативные sidecar‑контейнеры доступны в альфа. Kubernetes 1.28 добавляет restartPolicy к Init контейнерам. Это поле доступно, когда включён шлюз функции SidecarContainers. Однако всё ещё есть некоторые проблемы, которые нужно решить в нативных sidecar‑контейнерах. Поэтому сообщество Kubernetes рекомендует использовать этот шлюз функции только в кратковременные тестовые кластеры на альфа‑фазе. Подробнее см. Введение нативных sidecar‑контейнеров.
- Введён прокси смешанной версии.
Выпущен новый механизм (mixed version proxy) для улучшения обновления кластера. Это альфа‑функция в Kubernetes 1.28. Когда кластер проходит обновление, API‑серверы разных версий в кластере могут обслуживать разные наборы (группы, версии или ресурсы) встроенных ресурсов. Запрос ресурса в этом сценарии может быть обслужен любым из доступных API‑серверов, что может привести к тому, что запрос окажется на API‑сервере, не знающем запрошенный ресурс. В результате запрос завершается ошибкой. Эта функция может решить эту проблему. (Обратите внимание, что CCE обеспечивает беспрерывное обновление. Поэтому эта функция не используется в кластерах CCE.) Для деталей см Новый (альфа) механизм для более безопасных обновлений кластера.
- Неаккуратное завершение работы узла переходит в GA.
Неаккуратное завершение работы узла теперь GA в Kubernetes 1.28. Когда узел был выключен, и это выключение не было обнаружено Node Shutdown Manager kubelet, поды StatefulSet, работающие на этом узле, останутся в состоянии terminated и не могут быть перемещены на работающий узел. Если вы подтвердили, что узел, завершивший работу, невозможно восстановить, вы можете добавить an вне эксплуатации taint узла. Это обеспечивает, что pod‑ы StatefulSet и VolumeAttachments на этом узле могут быть принудительно удалены, а соответствующие pod‑ы будут созданы на здоровом узле. Подробности см Non-Graceful Node Shutdown переходит в GA.
- NodeSwap переходит в бета.
Поддержка NodeSwap переходит в бета в Kubernetes 1.28. NodeSwap отключён по умолчанию и может быть включён с помощью feature gate NodeSwap. NodeSwap позволяет настроить использование swap‑памяти для Kubernetes‑нагрузок, работающих под Linux, на уровне отдельного узла. Обратите внимание, что хотя NodeSwap достиг бета‑статуса, всё ещё остаются нерешённые проблемы и необходимо укрепить безопасность. Подробности см Бета‑поддержка использования swap на Linux.
- Добавлены две функции, связанные с заданиями.
Введены две alpha‑фичи: отложенное создание под‑ов‑заменителей и лимит backoff на индекс.
- Отложенное создание заменяющих подов
По умолчанию, когда pod входит в состояние terminating (например, из‑за вытеснения или выселения), Kubernetes немедленно создаёт заменяющий pod. Таким образом, оба pod работают одновременно.
В Kubernetes 1.28 эта функция может быть включена включением feature gate JobPodReplacementPolicy. При включённом feature gate вы можете установить podReplacementPolicy поле spec для задания Failed. Таким образом, pod будут заменяться только когда они достигнут фазы failed, а не когда находятся в состоянии terminating. Кроме того, вы можете проверить .status.termination поле задания. Значение этого поля — количество pod, принадлежащих заданию и находящихся в состоянии terminating.
- Лимит отката на индекс
По умолчанию сбои pod для индексированных заданий фиксируются и ограничиваются глобальным лимитом повторных попыток, указанным .spec.backoffLimit. Это означает, что если в джобе есть постоянно неудачный индекс, поды, указанные в джобе, будут перезапускаться повторно, пока сбои подов не исчерпают лимит. После того как лимит будет достигнут, джоба помечается как неудачная, и поды для других индексов в джобе могут даже не запуститься.
В Kubernetes 1.28 эту функцию можно включить, включив feature gate JobBackoffLimitPerIndex кластера. При включённом этом feature gate, .spec.backoffLimitPerIndex может быть указано при создании индексированной джобы. Только если сбои подов со всеми индексами, указанными в этой джобе, превысят верхний предел, поды, указанные в джобе, не будут перезапущены.
- Отложенное создание заменяющих подов
- Некоторые функции, связанные с CEL, улучшены.
Возможности, связанные с CEL, расширены.
- CEL, используемый для проверки CRD, переходит в бета.
Эта функция обновлена до бета-версии начиная с Kubernetes 1.25. Внедряя CEL‑выражения в CRD, разработчики могут решать большинство сценариев проверки CR без использования вебхуков. Более функции 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 и сохранения причины в статус поле.
- CEL expressions могут содержать комбинацию одной или более переменных, которые могут быть определены в ValidatingAdmissionPolicy. Эти переменные могут использоваться для определения других переменных.
- Функции библиотеки CEL можно использовать для разбора ресурсов, указанных resource.Quantity в Kubernetes.
- CEL, используемый для проверки CRD, переходит в бета.
- Other features
- Функция 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. Эта функция позволяет CRs с неуспешными проверками проходить, если запрос Patch или Update не изменяет ни одно из недействительных полей.
- --concurrent-cron-job-syncs добавлен в kube-controller-manager для настройки количества рабочих процессов контроллера cron job.
API Изменения и удаления
- NetworkPolicyStatus удалён. В network policy нет атрибута status.
- annotationbatch.kubernetes.io/cronJob-scheduled-timestamp добавлен к объектам job, чтобы указать время создания job.
- Эта podReplacementPolicy и завершающий добавляются поля в API задач. При указании этих полей, после завершения ранее созданного pod в задаче, задача сразу запускает новый pod для замены pod. Новые поля позволяют указать, заменять pod сразу после завершения предыдущего pod (поведение по умолчанию) или заменять pod после полного завершения существующего pod (новое поведение). Это альфа‑фича, и вы можете включить её, включив JobPodReplacementPolicy feature gate в вашем кластере.
- Поле BackoffLimitPerIndex поле доступно в задаче. Pods, указанные в задаче, используют общий механизм backoff. Когда время backoff задачи достигает предела, эта задача помечается как неуспешная, и ресурсы, включая индексы, которые не работают, освобождаются. Это поле позволяет настроить лимит backoff для отдельного индекса. Для подробностей см. Лимит backoff на индекс.
- Поле ServedVersions поле добавлено в StorageVersion API. Это изменение вводится прокси смешанной версии. Новое поле используется для указания версии, которую может предоставить 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 в Условие поле pod'ов было переименовано в PodReadyToStartContainers. Новое поле указывает, что контейнеры готовы к запуску после создания сети, томов и sandbox pod.
- Новая конфигурационная опция delayCacheUntilActive добавлен в KubeSchedulerConfiguration указать, когда начинать кэшировать данные. Этот параметр по умолчанию false. Если этот параметр установлен в true, включено избрание лидера. В этом случае планировщик начинает кэшировать информацию о планировании только после того, как узел управляющей плоскости становится лидером. Это уменьшает нагрузку по памяти на узлы управляющей плоскости, но также замедляет скорость переключения в случае отказа.
- Поле namespaceParamRef добавляется в admissionregistration.k8s.io/v1alpha1.ValidatingAdmissionPolicy.
- Поле reason и fieldPath поля добавляются в правила проверки CRD, чтобы позволить указать reason и fieldPath после сбоя проверки.
- 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 удалены.
Улучшенный Kubernetes 1.28 на CCE
В период обслуживания версии CCE периодически обновляет Kubernetes 1.28 и предоставляет расширенные функции.
Подробную информацию об обновлениях версии кластера смотрите Примечания к выпуску для версий кластера CCE.
Ссылки
Для получения более подробной информации о сравнении производительности и эволюции функций между Kubernetes 1.28 и другими версиями см. Примечания к выпуску Kubernetes v1.28.