Что я понял из документации, так это:
- kubectl create = Создает новый ресурс k8s в кластере
- kubectl replace = Обновляет ресурс в живом кластере
- kubectl apply = если я хочу сделать создать + заменить ( ссылка )
Мои вопросы
- Почему есть три операции для выполнения одной и той же задачи в кластере?
- Каковы варианты использования для этих операций?
- Чем они отличаются друг от друга под капотом?
kubernetes
kubectl
Суреш Вишной
источник
источник
kubectl create
иkubectl apply
имеет одинаковый эффект или нет.kubectl create
выдаст ошибку, если ресурс уже существует.kubectl apply
не будет. Разница в том, что вkubectl create
частности говорится «создай эту вещь», а вkubectl apply
другой - «делай все, что нужно (создай, обнови и т. Д.), Чтобы она выглядела так»При запуске в скрипте CI у вас будут проблемы с императивными командами, так как create вызывает ошибку, если ресурс уже существует.
Что вы можете сделать, это применить (декларативный шаблон) вывод вашей императивной команды, используя
--dry-run=true
и-o yaml
параметры:Приведенная выше команда не вызовет ошибку, если ресурс уже существует (и при необходимости обновит ресурс).
Это очень полезно в некоторых случаях, когда вы не можете использовать декларативный шаблон (например, при создании секрета реестра Docker).
источник
kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginx
Просто чтобы дать более прямой ответ, из моего понимания:
apply
- вносит постепенные изменения в существующий объектcreate
- создает совершенно новый объект (ранее не существовавший / удаленный).Взяв это из статьи DigitalOcean, которая была связана с веб-сайтом Kubernetes:
источник
apply
какdocker-compose up -d
+ использоватьcreate
какdocker-compose up -d --build
?Это обязательные команды :
kubectl run
знак равноkubectl create deployment
Преимущества:
Недостатки:
Это обязательный объект конфигурации :
kubectl create -f your-object-config.yaml
kubectl delete -f your-object-config.yaml
kubectl replace -f your-object-config.yaml
Преимущества по сравнению с императивными командами:
Недостатки по сравнению с императивными командами:
Преимущества по сравнению с декларативным объектом конфигурации:
Недостатки по сравнению с декларативной конфигурацией объекта:
Это декларативный объект конфигурации
kubectl diff -f configs/
kubectl apply -f configs/
Преимущества по сравнению с конфигурацией императивного объекта:
Недостатки по сравнению с императивной конфигурацией объекта:
источник
Ниже объяснение из официальной документации помогло мне понять
kubectl apply
.kubectl create
с другой стороны создаст (должен быть несуществующий) ресурс.источник
kubectl create может работать с одним файлом конфигурации объекта одновременно. Это также известно как императив управления
kubectl создать -f имя файла | URL
kubectl apply работает с каталогами и их подкаталогами, содержащими файлы конфигурации объектов yaml. Это также известно как декларативное управление. Можно выбрать несколько файлов конфигурации объектов из каталогов. kubectl применить -f каталог /
Подробности:
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/
источник
Мы любим Kubernetes, потому что, как только мы даем им то, что мы хотим, он продолжает выяснять, как достичь этого без нашего участия.
«творить» - это все равно что играть БОГА, взяв вещи в свои руки. Это хорошо для локальной отладки, когда вы хотите работать только с POD и не заботиться о Deployment / Replication Controller.
«Применить» играет по правилам. «Применить» - это как основной инструмент, который помогает вам создавать и изменять, и от вас ничего не требуется для управления модулями.
источник