O que entendi pela documentação é que:
- kubectl create = Cria um novo recurso k8s no cluster
- kubectl replace = Atualiza um recurso no cluster ativo
- kubectl apply = Se eu quiser criar + substituir ( Referência )
Minhas perguntas são
- Por que existem três operações para executar a mesma tarefa em um cluster?
- Quais são os casos de uso para essas operações?
- Como eles diferem um do outro sob o capô?
kubernetes
kubectl
Suresh Vishnoi
fonte
fonte
kubectl create
ekubectl apply
ter efeito ou não idênticas.kubectl create
gerará um erro se o recurso já existir.kubectl apply
não vai. A diferença é quekubectl create
especificamente diz "crie essa coisa", enquantokubectl apply
diz "faça o que for necessário (criar, atualizar, etc) para fazer com que pareça com isso".Ao executar em um script de IC, você terá problemas com comandos imperativos, pois create gera um erro se o recurso já existir.
O que você pode fazer é aplicar (padrão declarativo) a saída do seu comando imperativo, usando as opções
--dry-run=true
e-o yaml
:O comando acima não gerará um erro se o recurso já existir (e atualizará o recurso, se necessário).
Isso é muito útil em alguns casos em que você não pode usar o padrão declarativo (por exemplo, ao criar um segredo do estivador-registro).
fonte
kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginx
Apenas para dar uma resposta mais direta, do meu entendimento:
apply
- faz alterações incrementais em um objeto existentecreate
- cria um novo objeto (anteriormente inexistente / excluído).Retirando isso de um artigo da DigitalOcean que foi vinculado pelo site da Kubernetes:
fonte
apply
comodocker-compose up -d
+ usarcreate
comodocker-compose up -d --build
?Estes são comandos imperativos :
kubectl run
=kubectl create deployment
Vantagens:
Desvantagens:
Estas são configurações imperativas de objetos :
kubectl create -f your-object-config.yaml
kubectl delete -f your-object-config.yaml
kubectl replace -f your-object-config.yaml
Vantagens em comparação com comandos imperativos:
Desvantagens em comparação com comandos imperativos:
Vantagens em comparação com a configuração declarativa do objeto:
Desvantagens comparadas à configuração declarativa do objeto:
Estas são configurações declarativas de objetos
kubectl diff -f configs/
kubectl apply -f configs/
Vantagens em comparação com a configuração imperativa do objeto:
Desvantagens comparadas à configuração imperativa do objeto:
fonte
A explicação abaixo da documentação oficial me ajudou a entender
kubectl apply
.kubectl create
por outro lado, criará (deve ser inexistente) recursos.fonte
O kubectl create pode funcionar com um arquivo de configuração de objeto por vez. Isso também é conhecido como gerenciamento imperativo
kubectl create -f filename | url
O kubectl apply funciona com diretórios e seus subdiretórios que contêm arquivos yaml de configuração de objeto. Isso também é conhecido como gerenciamento declarativo. Vários arquivos de configuração de objeto dos diretórios podem ser selecionados. Diretório kubectl apply -f /
Detalhes:
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/
fonte
Adoramos o Kubernetes porque, uma vez que damos a eles o que queremos, ele descobre como alcançá-lo sem nosso envolvimento.
"criar" é como brincar de DEUS tomando as coisas em nossas próprias mãos. É bom para depuração local quando você deseja trabalhar apenas com o POD e não se importa com o Deployment / Replication Controller.
"aplicar" está seguindo as regras. "aplicar" é como uma ferramenta principal que ajuda a criar e modificar e não exige nada de você para gerenciar os pods.
fonte