#python #kubernetes #devops
Вопрос:
Не удается воспроизвести kubectl apply -f
функциональность с помощью клиента Python
Я создал развертывание с create_namespced_deployment
помощью(https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/AppsV1Api.md#create_namespaced_deployment) на языке python.
Но когда я попытался обновить развертывание вручную , используя kubectl apply -f
, я получаю предупреждение, как показано ниже
Warning: resource deployments/fronend-deployment is missing the
kubectl.kubernetes.io/last-applied-configuration annotation which is
required by kubectl apply.
kubectl apply should only be used on resources created declaratively
by either kubectl create --save-config or kubectl apply.
The missing annotation will be patched automatically
Я хочу избавиться от этого предупреждающего сообщения.Есть ли какой-нибудь другой способ?
Я думаю create_namespced_deployment
, что метод внутренне использует kubectl create -f
функциональность.Есть ли какой-либо метод, который использует kubectl apply -f
.
Дайте мне знать, если у вас возникнут какие-либо вопросы
Ответ №1:
Чтобы дать полный ответ, давайте начнем с объяснения разницы между
kubectl apply
Для kubectl create
kubectl apply
против kubectl create
Ключевое различие между kubectl apply
и kubectl create
заключается в том, что apply создает объекты Kubernetes с помощью декларативного синтаксиса, в то время create
как команда является обязательной.
apply
- Это команда
kubectl apply
cli, используемая для создания или изменения ресурсов Kubernetes, определенных в файле манифеста. - Файл манифеста называется
Declarative
. - Используя
Declarative
файлы, мы «описываем», каким должно быть наше конечное состояние нашего кластера (в отношении ресурсов, которые мы определяем). - Состояние ресурса объявляется в файле манифеста, и именно отсюда берется имя, которое затем
kubectl apply
используется для реализации этого состояния.
create
- В отличие от
apply
, команда createkubectl create
используется для непосредственного создания ресурса Kubernetes. (например:kubectl create ns XXX
который создаст пространство имен. - Это обязательное использование.
- Вы также можете использовать
kubectl create
файл манифеста для создания нового экземпляра ресурса. Однако, если ресурс уже существует, вы должны получить сообщение об ошибке 9, но, скорее всего, K8S допустит это, и в большинстве случаев вы не увидите ошибку).
Надеюсь, теперь вы можете понять ошибки, которые вы продолжаете получать.
Комментарии:
1. Спасибо за объяснение между
kubectl create
иkubectl apply
. Есть ли какой-либо метод, который делаетkubectl apply
это внутренне или любой другой метод, который вы можете предложить, чтобы избежать приведенного выше предупреждения? в Kubernetes /клиент-python. Поскольку в настоящее время я использую create_namespaced_deployment ( github.com/kubernetes-client/python/blob/master/kubernetes/docs/… ), который не работает в этом сценарии.2. Могу ли я использовать любой другой метод в python-Kubernetes(Примечание: в качестве входных данных у меня есть только файл спецификации и пространство имен)? Так что я не могу видеть вышеупомянутое предупреждающее сообщение в
kubectl apply
файле спецификации.3. Похоже, @amanagantiramreddy пытается изменить поведение kubernetes по умолчанию, чтобы отключить предупреждающие сообщения, которые приходят при использовании
apply
после использованияcreate
. Это интересно, и мне любопытно узнать решение.4. Если нам нужно изменить поведение по умолчанию или подавить предупреждающие сообщения, изменения должны применяться только
kubectl apply
к команде, но не для других операций, так как это может негативно повлиять на @CodeWizard какие-либо мысли?