Существует небольшая разница между командами kubectl create
и kubectl apply
.
Команда kubectl create
создает новый ресурс.Таким образом, если команда будет выполнена снова, она выдаст ошибку, так как имена ресурсов должны быть уникальными в пространстве имен.
kubectl get pods
No resources found.
kubectl create -f pod.xml
pod/myapp-pod created
kubectl create -f pod.xml
Error from server (AlreadyExists): error when creating "pod.xml": pods "myapp-pod" already exists
2) Команда kubectl apply
применяет конфигурацию к ресурсу.Если ресурса нет, он будет создан.Команда kubectl apply
может быть запущена второй раз, поскольку она просто применяет конфигурацию, как показано ниже.В этом случае конфигурация не изменилась.Таким образом, модуль не изменился.
kubectl delete pod/myapp-pod
pod "myapp-pod" deleted
kubectl apply -f pod.xml
pod/myapp-pod created
kubectl apply -f pod.xml
pod/myapp-pod unchanged
В kubectl create
мы указываем определенное действие, в данном случае create
, и поэтому оно обязательно .В команде kubectl apply
мы указываем целевое состояние системы и не указываем определенное действие, поэтому декларативное .Мы позволяем системе решать, какие действия предпринять.Если ресурса там нет, он его создаст, если ресурс там, тогда он применит конфигурацию к существующему ресурсу.
С точки зрения исполнения, нет разницы, когда ресурс создается для первоговремя между kubectl create
и kubectl apply
, как показано выше.Но во второй раз kubectl create
выдаст ошибку.
Мне потребовалось некоторое время, чтобы обойти это, но теперь это имеет смысл.