GNU/Linux >> Belajar Linux >  >> Linux

kubectl apply vs create:Mana yang Digunakan untuk Membuat Sumber Daya di Lingkungan Cluster Kubernetes?

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

Linux
  1. Debian vs. Ubuntu untuk Penggunaan Server, Mana yang Harus Dipilih

  2. Jenis Sistem File Linux Dijelaskan, Yang Mana Yang Harus Anda Gunakan

  3. [Panduan] perintah apt vs apt-get, dan yang mana yang digunakan?

  1. Jalur Mana yang Digunakan `Sudo ` Untuk Mencari “?

  2. Linux – Aplikasi Mana yang Digunakan Untuk Kalender?

  3. Apa tujuan dari tanda '-' di Kubernetes apply -f -

  1. Cara men-deploy pod pertama Anda di Cluster Kubernetes

  2. Buat lingkungan virtual untuk versi Python yang berbeda menggunakan Conda

  3. Bagaimana Cara Membuat Lingkungan Shell yang Bersih Untuk Penggunaan Sementara?