Не удается обновить Deployment с расширений apiVersion / v1beta1 до apps / v1, он использует расширения / v1beta1 автоматически - PullRequest
2 голосов
/ 19 марта 2020

У меня сейчас кластер GKE Kubernetes 1.15, и я планирую обновить его до 1.16. Поскольку 1.16 не поддерживает определенные API, я должен изменить свои развертывания с extensions / v1beta1 на apps / v1.

Используя этот простой deploy.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Когда я применяю его в мой кластер 1.15: kubectl -n mynamespace deployment.yml, что на самом деле выглядит следующим образом (kubectl -n mynamespace get deployments nginx-deployment):

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
    kubectl.kubernetes.io/last-applied-configuration: |
...

Как вы можете видеть, фактическим apiVersion является extensions / v1beta1 вместо apps / v1. Почему он не применяет указанную мной версию?

ОБНОВЛЕНИЕ:

Это моя версия kubectl:

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T23:41:24Z", GoVersion:"go1.14", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15+", GitVersion:"v1.15.9-gke.24", GitCommit:"39e41a8d6b7221b901a95d3af358dea6994b4a40", GitTreeState:"clean", BuildDate:"2020-02-29T01:24:35Z", GoVersion:"go1.12.12b4", Compiler:"gc", Platform:"linux/amd64"}

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Значение apiVersion, возвращаемое из kubectl get, не обязательно совпадает с фактическим apiVersion вашей текущей конфигурации.

См. Здесь: https://github.com/kubernetes/kubernetes/issues/62283#issuecomment -380968868

Цитата:

kubectl get использует предпочитаемый сервером порядок, который предпочтет группу API extensions для обратной совместимости, пока не будет удалено extensions. То есть kubectl get deployment по умолчанию использует конечную точку extensions / v1beta1.

Чтобы получить развертывания в рамках apps группы API, вы можете использовать kubectl get deployment.apps, который возвращает apps/v1 развертываний.

0 голосов
/ 26 марта 2020

К счастью, у швейцарского ножа CLI есть инструмент, который поможет с этим преобразованием. Если у вас есть какие-либо старые манифесты, которые выдают эту ошибку, добавьте kubectl convert в конвейер, и он должен корректно работать с Kubernetes 1.16.

Пожалуйста, посмотрите здесь: apiversions-update . Команда

kubectl convert изменила версии API для совместимости с k8s 1.16. Вам просто нужно убедиться, что вы используете последнюю версию kubectl, чтобы встроить в нее опцию convert.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...