- Этот ответ является дополнением к ответу @Cmag, и я намерен предоставить больше информации об этой проблеме, чтобы помочь сообществу.
Согласно Kubernetes Политика перегиба версии :
kubectl
поддерживается в одной вспомогательной версии (старой или более новой) из kube-apiserver
.
IF kube-apiserver
в 1.15 : kubectl
поддерживается в 1.16 , 1.15 и 1.14 .
Примечание: Если между экземплярами kube-apiserver в кластере HA существует перекос версии, например, kube-apiserver
экземпляры имеют значения 1.15 и 1.14 , kubectl
будет поддерживать только 1.15 и 1.14 , поскольку любые другие версии будут иметь более одной перекошенной версии.
Даже запуск гораздо более новых версий клиента может вызвать некоторые проблемы
- В K8s 1.10
kubectl run
имел стандартное поведение при создании развертываний:
❯ ./kubectl-110 run ubuntu --image=ubuntu
deployment.apps "ubuntu" created
- Начиная с 1.12
kubectl run
было устарело для всех генераторов, кроме pods, вот пример с kubectl 1.16 :
❯ ./kubectl-116 run ubuntu --image=ubuntu --dry-run
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/ubuntu created (dry run)
- Помимо предупреждения, оно все еще работает как задумано, но оно изменилось в клиенте K8s 1.18:
❯ ./kubectl-118 version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:56:40Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/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"}
$ kubectl run --generator=deployment/apps.v1 ubuntu --image=ubuntu --dry-run=client
Flag --generator has been deprecated, has no effect and will be removed in the future.
pod/ubuntu created (dry run)
Он игнорировал флаг и создавал только модуль. Этот флаг поддерживается в kubernetes 1.15, как мы видели в тесте, но kubectl 1.18 претерпел значительные изменения, которые не позволили его запустить.
- Это простой пример, иллюстрирующий важность соблюдения перекоса. политика в Kubernetes, это может сэкономить много времени на устранение неполадок в будущем!