Ответ
Основное отличие — в парадигме управления:
-
kubectl create— императивная команда. Она говорит кластеру: "Создай этот ресурс сейчас". Если ресурс с таким именем уже существует, команда завершится ошибкойAlreadyExists. Она не предназначена для обновлений.kubectl create deployment nginx --image=nginx:1.19 -
kubectl apply— декларативная команда. Вы предоставляете файл конфигурации (манифест), который описывает желаемое состояние ресурса. Команда применяет его: создаёт ресурс, если его нет, или вычисляет и применяет патч для приведения существующего ресурса к желаемому состоянию.kubectl apply -f deployment.yaml
Ключевые технические детали apply:
- Использует аннотацию
kubectl.kubernetes.io/last-applied-configurationдля хранения предыдущей конфигурации и вычисления diff. - Идеально подходит для GitOps: ваш репозиторий Git хранит манифесты как источник истины, а
applyсинхронизирует состояние кластера.
На практике: Я почти всегда использую apply в CI/CD-пайплайнах и для ручного управления через манифесты. create использую редко, например, для быстрого создания тестового Pod без написания YAML: kubectl create -f - <<EOF ....