Perbedaan Strategic Merge Patch vs JSON Patch di Kubectl

Inti Perbedaan Patching di Kubernetes

Dalam ekosistem Kubernetes, kubectl patch mendukung dua metode utama untuk memperbarui objek: Strategic Merge Patch dan JSON Patch. Strategic Merge Patch adalah metode default yang dirancang khusus untuk memahami skema API Kubernetes, memungkinkan penggabungan (merge) daftar (list) berdasarkan kunci unik (seperti name). Sebaliknya, JSON Patch (RFC 6902) adalah format standar industri yang melakukan operasi spesifik seperti add, remove, replace, move, atau test pada path tertentu dalam dokumen JSON.

Tabel Perbandingan Teknis

FiturStrategic Merge PatchJSON Patch (RFC 6902)
FormatJSON/YAML parsialArray operasi JSON
KonteksKhusus KubernetesStandar Industri
Penanganan ListMerge berdasarkan kunciIndeks array (posisi)
OperasiMerge (gabung)Add, Remove, Replace, Move, Test
FleksibilitasTerbatas pada skemaSangat tinggi

Strategic Merge Patch

Metode ini sangat berguna untuk memperbarui daftar kontainer atau volume tanpa harus mengetahui indeks array-nya. Kubernetes menggunakan patchStrategy dan patchMergeKey yang didefinisikan dalam struct API untuk menentukan bagaimana elemen digabungkan.

kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.14.2"}]}}}}'

Pada contoh di atas, Kubernetes mencari kontainer bernama 'nginx' dan memperbarui field image saja, tanpa menghapus konfigurasi lain dalam array tersebut.

JSON Patch (RFC 6902)

JSON Patch memberikan kontrol presisi. Anda harus menentukan operasi yang tepat. Jika Anda salah menentukan indeks array, operasi akan gagal atau mengubah elemen yang salah.

kubectl patch deployment nginx-deployment --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": 3}]'

Kapan Menggunakan Masing-masing Metode?

  • Gunakan Strategic Merge Patch: Saat Anda ingin memperbarui konfigurasi standar Kubernetes (seperti Deployment, Service, atau Pod) dan ingin menghindari kerumitan indeks array. Ini adalah pilihan paling aman untuk pemula dan skenario umum.
  • Gunakan JSON Patch: Saat Anda membutuhkan kontrol absolut, seperti menghapus elemen spesifik berdasarkan indeks, memindahkan nilai, atau melakukan validasi (test) sebelum melakukan perubahan. JSON Patch wajib digunakan untuk Custom Resource Definitions (CRD) yang tidak memiliki definisi patchStrategy.

Troubleshooting Lapangan

Kesalahan umum saat menggunakan kubectl patch adalah tipe patch yang tidak sesuai. Jika Anda mencoba menggunakan JSON Patch pada objek yang mengharapkan Strategic Merge, API server akan menolak permintaan tersebut. Selalu pastikan flag --type (default: strategic) disesuaikan dengan format payload yang Anda kirimkan. Untuk debugging, gunakan flag --dry-run=client -o yaml untuk melihat perubahan yang akan diterapkan sebelum benar-benar mengeksekusi perintah ke cluster.