В чем разница между kubectl apply и kubectl create?

«В чем разница между kubectl apply и kubectl create?» — вопрос из категории Kubernetes, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основное отличие — в парадигме управления:

  • kubectl create — императивная команда. Она говорит кластеру: "Создай этот ресурс сейчас". Если ресурс с таким именем уже существует, команда завершится ошибкой AlreadyExists. Она не предназначена для обновлений.

    kubectl create deployment nginx --image=nginx:1.19
  • kubectl apply — декларативная команда. Вы предоставляете файл конфигурации (манифест), который описывает желаемое состояние ресурса. Команда применяет его: создаёт ресурс, если его нет, или вычисляет и применяет патч для приведения существующего ресурса к желаемому состоянию.

    kubectl apply -f deployment.yaml

Ключевые технические детали apply:

  1. Использует аннотацию kubectl.kubernetes.io/last-applied-configuration для хранения предыдущей конфигурации и вычисления diff.
  2. Идеально подходит для GitOps: ваш репозиторий Git хранит манифесты как источник истины, а apply синхронизирует состояние кластера.

На практике: Я почти всегда использую apply в CI/CD-пайплайнах и для ручного управления через манифесты. create использую редко, например, для быстрого создания тестового Pod без написания YAML: kubectl create -f - <<EOF ....