kubectl apply
dan kubectl create
keduanya adalah dua pendekatan berbeda untuk membuat resource di lingkungan cluster Kubernetes.
Keduanya membuat sumber daya dari file atau dari STDIN.
kubectl apply dan create:Dua pendekatan untuk membuat resource
Sekarang mari kita masuk ke beberapa detail dan memahami bagaimana kubectl apply dan create berbeda satu sama lain saat mengimplementasikan.
kubectl create:Manajemen imperatif
kubectl create
adalah apa yang kita sebut manajemen imperatif. Pada pendekatan ini, Anda memberi tahu Kubernetes API apa yang ingin Anda buat, ganti, atau hapus.
Dengan kata yang lebih sederhana, create
membuat objek yang sama sekali baru (sebelumnya tidak ada atau dihapus).
kubectl apply:manajemen deklaratif
kubectl apply
adalah bagian dari pendekatan manajemen deklaratif, di mana perubahan yang mungkin telah Anda terapkan ke objek langsung (yaitu melalui scale
) akan "dipertahankan " bahkan jika Anda apply
perubahan lain pada objek.
Dengan kata yang lebih sederhana, apply
- membuat perubahan tambahan pada objek yang ada dengan mendefinisikan apa yang kita butuhkan.
CATATAN: Kedua pendekatan kubectl create dan apply menerima format file JSON dan YAML.
Memahami perbedaan antara kubectl create dan apply with example
Saya akan menggunakan file YAML di bawah ini untuk membuat pod Kubernetes.
[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
Mari kita membuat Pod dengan cara imperatif, yaitu menggunakan kubectl create
perintah:
[email protected]:~/pod-create# kubectl create -f mypod.yml
pod/create-vs-apply-demo created
Cantumkan status pod beserta labelnya:
[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
Sekarang saya akan mengedit file YAML dan menambahkan label tambahan (demo:applyVscreate) ke dalamnya.
[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
Sekarang mari kita kembali menggunakan pendekatan imperatif untuk menerapkan perubahan.
[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
Itu memunculkan kesalahan dan mengatakan sumber daya sudah ada.
Sekarang mari kita lakukan operasi yang sama menggunakan pendekatan deklaratif, yaitu kubectl apply
perintah.
[email protected]:~/pod-create# kubectl apply -f mypod.yml
pod/create-vs-apply-demo configured
Jadi, sumber daya telah dikonfigurasi kali ini. Verifikasi perubahan yang dibuat.
[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
Anda dapat melihat label baru telah diterapkan ke pod.
Saya yakin sekarang Anda harus memiliki pemahaman yang jelas tentang kedua pendekatan tersebut.
Kubectl membuat atau menerapkan? Yang mana yang harus digunakan?
Itu tergantung pada kasus penggunaan bagaimana Anda ingin menggunakan konsep atau metodologi ini. Ini bukan tentang mana yang baik atau mana yang buruk.
Jika Anda ingin kontrol versi objek k8s maka lebih baik menggunakan deklaratif way (kubectl apply) yang membantu menentukan keakuratan data dalam objek k8s.
Dan jika Anda hanya ingin membuat beberapa sumber daya untuk tujuan pemecahan masalah, pembelajaran, atau eksperimen interaktif ikuti persyaratan pendekatan (kubectl create).
Masih bingung? Jangan tinggalkan komentar dan saya akan mencoba menjawab keraguan Anda.
Rakesh Jain
DevOps Profesional | RHCA | Jenkins | Git | buruh pelabuhan | Kubernet | Mungkin | Prometheus | Grafana | AWS Cloud