Назад | Перейти на главную страницу

Как изменить apiVersion объекта в Kubernetes?

Я сейчас обновляю кластер до Kubernetes v1.16. Есть некоторые примечания об устаревании в этом обновлении. Одна из этих заметок заключается в том, что apiVersion extensions/v1beta1 для Deployment удален, и что следует использовать apiVersion apps/v1 перед обновлением.

Это звучит достаточно просто, но я не могу понять, как на самом деле повлиять на это изменение.

Мы обновили файл YAML, включив в него более новую apiVersion; то есть файл YAML, содержащий наши Deployment начинается с,

apiVersion: apps/v1
kind: Deployment

Однако если мы kubectl apply это на наш сервер, а затем kubectl get deployment -o yaml его обратно, чтобы проверить изменение, он не обновлялся; то apiVerison сообщается сервером по-прежнему:

apiVersion: extensions/v1beta1
kind: Deployment
metadata
  annotations:
    [...]
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion": "apps/v1", ...}

Я включил metadata.annotations поле здесь; вы можете увидеть аннотацию из kubectl который даже подтверждает, что применяет манифест с правильным apiVersion, но ресурс все равно возвращается со старой версией!

В связанном уведомлении об устаревании также говорится об использовании kubectl convert; мы тоже пробовали это. AFAICT, kubectl convert просто работает с автономными YAML-представлениями ресурса и даже kubectl apply- результат kubectl convert не меняет вышеуказанное поведение.

Я также пробовал kubectl patch чтобы исправить это конкретное поле, но, опять же, проверка показывает, что никаких фактических изменений не происходит. (Выход из kubectl patch тоже говорит, что ничего не изменилось.)

Как мне на самом деле обновить версию этого ресурса в Kubernetes?

(Некоторые незначительные примечания: этот кластер является экземпляром Azure AKS; Azure фактически пометила этот ресурс как требующий внимания.)

Спасибо за обратную совместимость !!!

kubectl get deployment XXX очевидно неоднозначно, поскольку сервер имеет развертывания в нескольких группах API. Когда ресурс существует в нескольких группах API, kubectl использует первую группу, указанную в документах по обнаружению, опубликованных сервером, который содержит ресурс. Для обратной совместимости это группа api расширений.

Пытаться: kubectl get deploy.extensions XXX и kubectl get deploy.apps XXX чтобы убедиться, что ваше развертывание действительно существует в двух группах API.

https://github.com/kubernetes/kubernetes/issues/58131#issuecomment-356823588