kubectl apply
a kubectl create
oba jsou dva různé přístupy k vytváření prostředků v prostředí clusteru Kubernetes.
Oba vytvářejí prostředky ze souboru nebo ze STDIN.
kubectl použít a vytvořit:Dva přístupy k vytváření zdrojů
Nyní pojďme do detailů a pochopíme, jak se aplikace kubectl při implementaci liší od sebe navzájem.
kubectl create:Nezbytná správa
kubectl create
je to, čemu říkáme imperativní řízení. Při tomto přístupu sdělíte rozhraní Kubernetes API, co chcete vytvořit, nahradit nebo odstranit.
Jednodušeji řečeno, create
vytvoří zcela nový objekt (dříve neexistující nebo odstraněný).
použít kubectl:deklarativní správa
kubectl apply
je součástí deklarativního přístupu k řízení, kde změny, které jste možná použili na živý objekt (tj. prostřednictvím scale
) bude „udržován ", i když apply
další změny objektu.
Jednodušeji řečeno, apply
- provádí postupné změny existujícího objektu definováním toho, co potřebujeme.
POZNÁMKA: Oba přístupy vytváření a používání kubectl akceptují formáty souborů JSON a YAML.
Pochopení rozdílu mezi kubectl vytvořit a použít s příkladem
K vytvoření modulu Kubernetes použiji níže uvedený soubor YAML.
[email protected]:~/pod-create# cat mypod.yml
apiVersion: v1
kind: Pod
metadata:
name: create-vs-apply-demo
labels:
app: front-end
rel: dev
spec:
containers:
- name: httpd
image: docker.io/httpd
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
Pojďme vytvořit Pod pomocí imperativního způsobu, tj. pomocí kubectl create
příkaz:
[email protected]:~/pod-create# kubectl create -f mypod.yml
pod/create-vs-apply-demo created
Vypište stav pod spolu se štítky:
[email protected]:~/pod-create# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
create-vs-apply-demo 1/1 Running 0 8s app=front-end,rel=dev
Nyní upravím soubor YAML a přidám k němu další štítek (demo:applyVscreate).
[email protected]:~/pod-create# cat mypod.yml
apiVersion: v1
kind: Pod
metadata:
name: create-vs-apply-demo
labels:
app: front-end
rel: dev
demo: applyVscreate
spec:
containers:
- name: httpd
image: docker.io/httpd
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
Nyní znovu použijeme imperativní přístup k aplikaci změn.
[email protected]:~/pod-create# kubectl create -f mypod.yml
Error from server (AlreadyExists): error when creating "mypod.yml": pods "create-vs-apply-demo" already exists
Vyvolá chybu a řekne, že zdroj již existuje.
Nyní proveďte stejnou operaci pomocí deklarativního přístupu, tj. kubectl apply
příkaz.
[email protected]:~/pod-create# kubectl apply -f mypod.yml
pod/create-vs-apply-demo configured
Takže zdroj byl tentokrát nakonfigurován. Ověřte provedené změny.
[email protected]:~/pod-create# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
create-vs-apply-demo 1/1 Running 0 3m19s app=front-end,demo=applyVscreate,rel=dev
Můžete vidět, že nový štítek byl aplikován na pod.
Věřím, že nyní byste měli těmto dvěma přístupům jasně rozumět.
Kubectl vytvořit nebo použít? Který použít?
Záleží na případu použití, jak chcete tyto koncepty nebo metodologii použít. Nejde o to, co je dobré nebo co špatné.
Pokud chcete ovládat verzi objekt k8s pak je lepší použít deklarativní způsobem (použít kubectl), který pomáhá určit přesnost dat v objektech k8s.
A pokud chcete jen vytvořit nějaký zdroj pro řešení problémů, učení nebo interaktivní experimentování použijte imperativ přístup (kubectl vytvořit).
Stále zmatený? Zanechte komentář a já se pokusím odpovědět na vaše pochybnosti.
Rakesh Jain
DevOps Professional | RHCA | Jenkins | Git | Docker | Kubernetes | Ansible | Prometheus | Grafana | AWS Cloud