Как создать развертывание с помощью python, который использует «kubectll apply-f» внутри

#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 , команда create kubectl 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 какие-либо мысли?