Посібник з міграції від застарілих API
Під час еволюції API Kubernetes періодично переглядаються або оновлюються. Коли API розвиваються, старий API стає застарілим і, зрештою, вилучається. Ця сторінка містить інформацію, яку вам потрібно знати у випадку міграції від застарілих версій API на новіші та стабільніші версії API.
Вилучені API в розрізі версій
v1.32
У випуску v1.32 перестали обслуговуватися наступні застарілі версії API:
Ресурси контролю потоку
Версія API flowcontrol.apiserver.k8s.io/v1beta3 FlowSchema та PriorityLevelConfiguration більше не обслуговуються починаючи з v1.32.
- Перенесіть маніфести та клієнти API на використання версії API flowcontrol.apiserver.k8s.io/v1, доступної з версії v1.29.
- Усі наявні збережені обʼєкти доступні через новий API
- Значні зміни у flowcontrol.apiserver.k8s.io/v1:
- Поле
spec.limited.nominalConcurrencySharesPriorityLevelConfiguration має стандартне значення 30, коли не вказане, і явне значення 0 не змінюється на 30.
- Поле
v1.29
У випуску v1.29 перестали обслуговуватися наступні застарілі версії API:
Ресурси контролю потоку
Версія API flowcontrol.apiserver.k8s.io/v1beta2 FlowSchema та PriorityLevelConfiguration більше не обслуговується з версії v1.29.
- Перенесіть маніфести та клієнти API на використання версії API flowcontrol.apiserver.k8s.io/v1, доступної з версії v1.29, або версії API flowcontrol.apiserver.k8s.io/v1beta3, доступної з версії v1.26.
- Усі наявні збережені обʼєкти доступні через новий API
- Значні зміни в flowcontrol.apiserver.k8s.io/v1:
- Поле
spec.limited.assuredConcurrencySharesPriorityLevelConfiguration перейменоване наspec.limited.nominalConcurrencySharesі має стандартне значення 30, коли не вказане, і явне значення 0 не змінюється на 30.
- Поле
- Значні зміни в flowcontrol.apiserver.k8s.io/v1beta3:
- Поле
spec.limited.assuredConcurrencySharesPriorityLevelConfiguration перейменоване наspec.limited.nominalConcurrencyShares
- Поле
v1.27
Випуск v1.27 припинив обслуговування наступних застарілих версій API:
CSIStorageCapacity
Версія API CSIStorageCapacity storage.k8s.io/v1beta1 більше не обслуговується з версії v1.27.
- Перенесіть маніфести та клієнти API на версію API storage.k8s.io/v1, доступну з версії v1.24.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
v1.26
Випуск v1.26 припинив обслуговування наступних застарілих версій API:
Ресурси керування потоком
Версія API FlowSchema та PriorityLevelConfiguration flowcontrol.apiserver.k8s.io/v1beta1 більше не обслуговується з версії v1.26.
- Перенесіть маніфести та клієнти API на версію API flowcontrol.apiserver.k8s.io/v1beta2.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
HorizontalPodAutoscaler
Версія API HorizontalPodAutoscaler autoscaling/v2beta2 більше не обслуговується з версії v1.26.
- Перенесіть маніфести та клієнти API на версію API autoscaling/v2, доступну з версії v1.23.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни:
targetAverageUtilizationзамінено наtarget.averageUtilizationтаtarget.type: Utilization. Див. Автомасштабування за декількома метриками та власними метриками.
v1.25
Випуск v1.25 припинив обслуговування наступних застарілих версій API:
CronJob
Версія API CronJob batch/v1beta1 більше не обслуговується з версії v1.25.
- Перенесіть маніфести та клієнти API на версію API batch/v1, доступну з версії v1.21.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
EndpointSlice
Версія API EndpointSlice discovery.k8s.io/v1beta1 більше не обслуговується з версії v1.25.
- Перенесіть маніфести та клієнти API на версію API discovery.k8s.io/v1, доступну з версії v1.21.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни в discovery.k8s.io/v1:
- використовуйте поле
nodeNameдля кожного Endpoint замість застарілого поляtopology["kubernetes.io/hostname"] - використовуйте поле
zoneдля кожного Endpoint замість застарілого поляtopology["topology.kubernetes.io/zone"] topologyзамінено полемdeprecatedTopology, яке не доступне для запису у v1
- використовуйте поле
Event
Версія API Event events.k8s.io/v1beta1 більше не обслуговується з версії v1.25.
- Перенесіть маніфести та клієнти API на версію API events.k8s.io/v1, доступну з версії v1.19.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни в events.k8s.io/v1:
typeобмежено доNormalтаWarninginvolvedObjectперейменовано вregardingaction,reason,reportingControllerтаreportingInstanceє обовʼязковими при створенні нових events.k8s.io/v1 Events- використовуйте
eventTimeзамість застарілого поляfirstTimestamp(яке перейменовано вdeprecatedFirstTimestampта не допускається в нових events.k8s.io/v1 Events) - використовуйте
series.lastObservedTimeзамість застарілого поляlastTimestamp(яке перейменовано вdeprecatedLastTimestampта не допускається в нових **events.k8ерсіях API events.k8s.io/v1 Events) - використовуйте
series.countзамість застарілого поляcount(яке перейменовано вdeprecatedCountта не допускається в нових events.k8s.io/v1 Events) - використовуйте
reportingControllerзамість застарілого поляsource.component(яке перейменовано вdeprecatedSource.componentта не допускається в нових events.k8s.io/v1 Events) - використовуйте
reportingInstanceзамість застарілого поляsource.host(яке перейменовано вdeprecatedSource.hostта не допускається в нових events.k8s.io/v1 Events)
HorizontalPodAutoscaler
Версія API HorizontalPodAutoscaler autoscaling/v2beta1 більше не обслуговується з версії v1.25.
- Перенесіть маніфести та клієнти API на версію API autoscaling/v2, доступну з версії v1.23.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни:
targetAverageUtilizationзамінено наtarget.averageUtilizationтаtarget.type: Utilization. Див. Автомасштабування за декількома метриками та власними метриками.
PodDisruptionBudget
Версія API PodDisruptionBudget policy/v1beta1 більше не обслуговується з версії v1.25.
- Перенесіть маніфести та клієнти API на версію API policy/v1, доступну з версії v1.21.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни в policy/v1:
- пустий
spec.selector({}), записаний доpolicy/v1PodDisruptionBudget, вибирає всі теки в просторі імен (уpolicy/v1beta1пустийspec.selectorне вибирав жодні теки). Неустановленийspec.selectorвибирає жодні теки в обох версіях API.
- пустий
PodSecurityPolicy
PodSecurityPolicy в версії API policy/v1beta1 більше не обслуговується з версії v1.25, і контролер допуску PodSecurityPolicy буде видалено.
Перейдіть до Pod Security Admission або виклику стороннього вебхуку допуску. Для настанов з міграції, див. Міграція з PodSecurityPolicy до вбудованого контролера допуску PodSecurity Admission Controller. Для отримання додаткової інформації про застарілість, див. ВPodSecurityPolicy Deprecation: Past, Present, and Future.
RuntimeClass
RuntimeClass в версії API node.k8s.io/v1beta1 більше не обслуговується з версії v1.25.
- Перенесіть маніфести та клієнти API на версію API node.k8s.io/v1, доступну з версії v1.20.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
v1.22
Випуск v1.22 припинив обслуговування наступних застарілих версій API:
Ресурси вебхуків
Версія API admissionregistration.k8s.io/v1beta1 для MutatingWebhookConfiguration та ValidatingWebhookConfiguration більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API admissionregistration.k8s.io/v1, доступну з версії v1.16.
- Усі наявні обʼєкти, які зберігаються, доступні через нові API
- Помітні зміни:
- стандартно
webhooks[*].failurePolicyзмінено зIgnoreнаFailдля v1 - стандартно
webhooks[*].matchPolicyзмінено зExactнаEquivalentдля v1 - стандартно
webhooks[*].timeoutSecondsзмінено з30sна10sдля v1 - поле
webhooks[*].sideEffectsстандартно видалено, і тепер воно обовʼязкове, і дозволяється лишеNoneтаNoneOnDryRunдля v1 - стандартно видалено значення поля
webhooks[*].admissionReviewVersionsта робиться обовʼязковим для v1 (підтримувані версії для AdmissionReview -v1таv1beta1) - поле
webhooks[*].nameповинно бути унікальним в списку для обʼєктів, створених черезadmissionregistration.k8s.io/v1
- стандартно
CustomResourceDefinition
Версія API apiextensions.k8s.io/v1beta1 для CustomResourceDefinition більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API apiextensions.k8s.io/v1, доступну з версії v1.16.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни:
- поле
spec.scopeтепер не має станадртного значенняNamespacedі повинно бути явно вказано - поле
spec.versionвилучено в v1; використовуйте замість цьогоspec.versions - поле
spec.validationвилучено в v1; використовуйте замість цьогоspec.versions[*].schema - поле
spec.subresourcesвилучено в v1; використовуйте замість цьогоspec.versions[*].subresources - поле
spec.additionalPrinterColumnsвилучено в v1; використовуйте замість цьогоspec.versions[*].additionalPrinterColumns spec.conversion.webhookClientConfigпереміщено вspec.conversion.webhook.clientConfigв v1spec.conversion.conversionReviewVersionsпереміщено вspec.conversion.webhook.conversionReviewVersionsв v1- поле
spec.versions[*].schema.openAPIV3Schemaтепер обовʼязкове при створенні обʼєктів CustomResourceDefinition для v1, і повинно бути структурною схемою spec.preserveUnknownFields: trueзаборонено при створенні обʼєктів CustomResourceDefinition для v1; воно повинно бути вказано у визначеннях схем якx-kubernetes-preserve-unknown-fields: true- В елементах
additionalPrinterColumnsполеJSONPathперейменовано вjsonPathв v1 (виправлення #66531)
- поле
APIService
Версія API apiregistration.k8s.io/v1beta1 для APIService більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API apiregistration.k8s.io/v1, доступну з версії v1.10.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
TokenReview
Версія API authentication.k8s.io/v1beta1 для TokenReview більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API authentication.k8s.io/v1, доступну з версії v1.6.
- Немає помітних змін
Ресурси SubjectAccessReview
Версія API authorization.k8s.io/v1beta1 для LocalSubjectAccessReview, SelfSubjectAccessReview, SubjectAccessReview та SelfSubjectRulesReview більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API authorization.k8s.io/v1, доступну з версії v1.6.
- Помітні зміни:
- Поле
spec.groupперейменовано наspec.groupsв v1 (виправляє #32709)
- Поле
CertificateSigningRequest
Версія API certificates.k8s.io/v1beta1 для CertificateSigningRequest більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API certificates.k8s.io/v1, доступну з версії v1.19.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни в
certificates.k8s.io/v1:- Для API-клієнтів, що запитують сертифікати:
- Поле
spec.signerNameтепер обовʼязкове (див. відомі підписувачи Kubernetes), і запити наkubernetes.io/legacy-unknownне дозволяються бути створеними через APIcertificates.k8s.io/v1 - Поле
spec.usagesтепер обовʼязкове, не може містити дубльованих значень та повинно містити лише відомі використання
- Поле
- Для API-клієнтів, що схвалюють або підписують сертифікати:
status.conditionsне може містити дублюються типиstatus.conditions[*].statusтепер обовʼязковеstatus.certificateповинно бути в кодуванні PEM та містити лише блокиCERTIFICATE
- Для API-клієнтів, що запитують сертифікати:
Lease
Версія API coordination.k8s.io/v1beta1 для Lease більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API coordination.k8s.io/v1, доступну з версії v1.14.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
Ingress
Версії API extensions/v1beta1 та networking.k8s.io/v1beta1 для Ingress більше не обслуговуються з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API networking.k8s.io/v1, доступну з версії v1.19.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Помітні зміни:
- Поле
spec.backendперейменовано наspec.defaultBackend - Поле
serviceNameбекенду перейменовано наservice.name - Числові поля
servicePortбекенду перейменовані наservice.port.number - Рядкові поля
servicePortбекенду перейменовані наservice.port.name pathTypeтепер обовʼязковий для кожного вказаного шляху. Варіанти —Prefix,Exact, таImplementationSpecific. Для відповідності невизначеній поведінціv1beta1використовуйтеImplementationSpecific.
- Поле
IngressClass
Версія API networking.k8s.io/v1beta1 для IngressClass більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API networking.k8s.io/v1, доступну з версії v1.19.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API
- Немає помітних змін
Ресурси RBAC
Версія API rbac.authorization.k8s.io/v1beta1 для ClusterRole, ClusterRoleBinding, Role та RoleBinding більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API rbac.authorization.k8s.io/v1, доступну з версії v1.8.
- Усі наявні обʼєкти, які зберігаються, доступні через нові API
- Немає помітних змін
PriorityClass
Версія API scheduling.k8s.io/v1beta1 для PriorityClass більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API scheduling.k8s.io/v1, доступну з версії v1.14.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API.
- Немає помітних змін.
Ресурси зберігання
Версія API storage.k8s.io/v1beta1 для CSIDriver, CSINode, StorageClass та VolumeAttachment більше не обслуговується з версії v1.22.
- Перенесіть маніфести та клієнти API на версію API storage.k8s.io/v1
- CSIDriver доступний у storage.k8s.io/v1 починаючи з версії v1.19.
- CSINode доступний у storage.k8s.io/v1 починаючи з версії v1.17.
- StorageClass доступний у storage.k8s.io/v1 починаючи з версії v1.6.
- VolumeAttachment доступний у storage.k8s.io/v1 з версії v1.13.
- Усі наявні обʼєкти, які зберігаються, доступні через нові API.
- Немає помітних змін.
v1.16
Випуск v1.16 припинив обслуговування наступних застарілих версій API:
Мережева політика
Версія API extensions/v1beta1 для NetworkPolicy більше не обслуговується з версії v1.16.
- Перенесіть маніфести та клієнти API на версію API networking.k8s.io/v1, доступну з версії v1.8.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API.
DaemonSet
Версії API extensions/v1beta1 та apps/v1beta2 для DaemonSet більше не обслуговуються з версії v1.16.
- Перенесіть маніфести та клієнти API на версію API apps/v1, доступну з версії v1.9.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API.
- Помітні зміни:
spec.templateGenerationвидалено.spec.selectorтепер є обовʼязковим і незмінним після створення; використовуйте наявні мітки шаблону як селектор для безшовного оновлення.spec.updateStrategy.typeтепер стандартно встановлено наRollingUpdate(стандартно вextensions/v1beta1булоOnDelete).
Deployment
Версії API extensions/v1beta1, apps/v1beta1 та apps/v1beta2 для Deployment більше не обслуговуються з версії v1.16.
- Перенесіть маніфести та клієнти API на версію API apps/v1, доступну з версії v1.9.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API.
- Помітні зміни:
spec.rollbackToвидалено.spec.selectorтепер є обовʼязковим і незмінним після створення; використовуйте наявні мітки шаблону як селектор для безшовного оновлення.spec.progressDeadlineSecondsтепер стандартно встановлено на600секунд (стандартно вextensions/v1beta1було без крайнього терміну).spec.revisionHistoryLimitтепер стандартно встановлено на10(стандартно вapps/v1beta1було2, стандартно вextensions/v1beta1було зберігати всі).maxSurgeтаmaxUnavailableтепер стандартно встановлено на25%(стандартно вextensions/v1beta1було1).
StatefulSet
Версії API apps/v1beta1 та apps/v1beta2 для StatefulSet більше не обслуговуються з версії v1.16.
- Перенесіть маніфести та клієнти API на версію API apps/v1, доступну з версії v1.9.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API.
- Помітні зміни:
spec.selectorтепер є обовʼязковим і незмінним після створення; використовуйте наявні мітки шаблону як селектор для безшовного оновлення.spec.updateStrategy.typeтепер стандартно встановлено наRollingUpdate(вapps/v1beta1булоOnDelete).
ReplicaSet
Версії API extensions/v1beta1, apps/v1beta1 та apps/v1beta2 для ReplicaSet більше не обслуговуються з версії v1.16.
- Перенесіть маніфести та клієнти API на версію API apps/v1, доступну з версії v1.9.
- Усі наявні обʼєкти, які зберігаються, доступні через новий API.
- Помітні зміни:
spec.selectorтепер є обовʼязковим і незмінним після створення; використовуйте наявні мітки шаблону як селектор для безшовного оновлення.
PodSecurityPolicy
Версія API extensions/v1beta1 для PodSecurityPolicy більше не обслуговується з версії v1.16.
- Перенесіть маніфести та клієнти API на версію API policy/v1beta1, доступну з версії v1.10.
- Зауважте, що версія API policy/v1beta1 для PodSecurityPolicy буде видалена у версії v1.25.
Що робити
Тестування з вимкненими застарілими API
Ви можете протестувати свої кластери, запустивши API сервер зі конкретними вимкненими версіями API, щоб змоделювати майбутні видалення. Додайте наступний прапорець до аргументів запуску API сервера:
--runtime-config=<group>/<version>=false
Наприклад:
--runtime-config=admissionregistration.k8s.io/v1beta1=false,apiextensions.k8s.io/v1beta1,...
Пошук використання застарілих API
Використовуйте попередження клієнтів, метрики та інформацію аудиту, доступні в версії 1.19+ для визначення використання застарілих API.
Перехід на незастарілі API
Оновіть власні інтеграції та контролери, щоб викликати незастарілі API.
Змініть YAML файли, щоб вони посилалися на незастарілі API.
Ви можете використовувати команду
kubectl convertдля автоматичного перетворення наявного обʼєкта:kubectl convert -f <file> --output-version <group>/<version>.Наприклад, щоб перетворити старий Deployment на
apps/v1, ви можете виконати:kubectl convert -f ./my-deployment.yaml --output-version apps/v1Це перетворення може використовувати не ідеальні стандартні значення. Щоб дізнатися більше про конкретний ресурс, зверніться до довідника API Kubernetes.
Примітка:
Інструмент
kubectl convertне стандартно встановлюється, хоча раніше він був частиною самогоkubectl. Для отримання додаткової інформації ви можете прочитати питання про застарілість та видалення для вбудованої підкоманди.Щоб дізнатися, як налаштувати
kubectl convertна вашому компʼютері, відвідайте сторінку, яка відповідає вашій операційній системі: Linux, macOS або Windows.