Я сейчас обновляю кластер до 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