From 557f95dcb7662067554bd71472918f982b39374d Mon Sep 17 00:00:00 2001 From: Giri Kuncoro <giri.kuncoro@go-jek.com> Date: Mon, 21 Sep 2020 09:34:43 +0700 Subject: [PATCH] Translate reserve compute resource page to Bahasa Indonesia --- .../reserve-compute-resources.md | 231 ++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 content/id/docs/tasks/administer-cluster/reserve-compute-resources.md diff --git a/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md b/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md new file mode 100644 index 0000000000..e1ac7b035e --- /dev/null +++ b/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md @@ -0,0 +1,231 @@ +--- +title: Melakukan Reservasi Sumber Daya Komputasi untuk Daemon Sistem +content_type: task +min-kubernetes-server-version: 1.8 +--- + +<!-- overview --> + +Node Kubernetes dapat dijadwalkan sesuai dengan kapasitas. Secara bawaan, Pod dapat menggunakan +semua kapasitas yang tersedia pada sebuah Node. Ini merupakan masalah karena Node +sebenarnya menjalankan beberapa _daemon_ sistem yang diperlukan oleh OS dan Kubernetes itu sendiri. +Jika sumber daya pada Node tidak direservasi untuk _daemon-daemon_ tersebut, maka +Pod dan _daemon_ akan berlomba-lomba menggunakan sumber daya yang tersedia, sehingga +menyebabkan _starvation_ sumber daya pada Node. + +Fitur bernama `Allocatable` pada Node diekspos oleh kubelet yang berfungsi untuk melakukan +reservasi sumber daya komputasi untuk _daemon_ sistem. Kubernetes merekomendasikan admin +klaster untuk mengatur `Allocatable` pada Node berdasarkan tingkat kepadatan (_density_) beban kerja setiap Node. + + + +## {{% heading "prerequisites" %}} + + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +Kamu harus menjalankan Kubernetes server dengan versi 1.17 atau yang lebih baru +untuk menggunakan perintah baris kubelet dengan opsi `--reserved-cpus` untuk +menyetel [daftar reservasi CPU secara eksplisit](#melakukan-reservasi-daftar-cpu-secara-eksplisit). + + + +<!-- steps --> + +## _Allocatable_ pada Node + +```text + Kapasitas Node +------------------------------ +| kube-reserved | +|----------------------------| +| system-reserved | +|----------------------------| +| eviction-threshold | +| (batas pengusiran) | +|----------------------------| +| | +| allocatable | +| (dapat digunakan oleh Pod) | +| | +| | +------------------------------ +``` + +`Allocatable` atau sumber daya yang dialokasikan pada sebuah Node Kubernetes merupakan +jumlah sumber daya komputasi yang dapat digunakan oleh Pod. Penjadwal tidak +dapat melakukan penjadwalan melebihi `Allocatable`. Saat ini dukungan terhadap +`CPU`, `memory` dan `ephemeral-storage` tersedia. + +`Allocatable` pada Node diekspos oleh objek API `v1.Node` dan merupakan +bagian dari baris perintah `kubectl describe node`. + +Sumber daya dapat direservasi untuk dua kategori _daemon_ sistem melalui kubelet. + +### Mengaktifkan QoS dan tingkatan cgroup dari Pod + +Untuk menerapkan batasan `Allocatable` pada Node, kamu harus mengaktifkan +hierarki cgroup yang baru melalui _flag_ `--cgroups-per-qos`. Secara bawaan, _flag_ ini +telah aktif. Saat aktif, kubelet akan memasukkan semua Pod pengguna di bawah +sebuah hierarki cgroup yang dikelola oleh kubelet. + +### Mengonfigurasi _driver_ cgroup + +Manipulasi terhadap hierarki cgroup pada hos melalui _driver_ cgroup didukung oleh kubelet. +_Driver_ dikonfigurasi melalui _flag_ `--cgroup-driver`. + +Nilai yang didukung adalah sebagai berikut: + +* `cgroupfs` merupakan _driver_ bawaan yang melakukan manipulasi secara langsung +terhadap _filesystem_ cgroup pada hos untuk mengelola _sandbox_ cgroup. +* `systemd` merupakan _driver_ alternatif yang mengelola _sandbox_ cgroup menggunakan +bagian dari sumber daya yang didukung oleh sistem _init_ yang digunakan. + +Tergantung dari konfigurasi _runtime_ Container yang digunakan, +operator dapat memilih _driver_ cgroup tertentu untuk memastikan perilaku sistem yang tepat. +Misalnya, jika operator menggunakan _driver_ cgroup `systemd` yang disediakan oleh +_runtime_ docker, maka kubelet harus diatur untuk menggunakan _driver_ cgroup `systemd`. + +### Kube Reserved + +- **_Flag_ Kubelet**: `--kube-reserved=[cpu=100m][,][memory=100Mi][,][ephemeral-storage=1Gi][,][pid=1000]` +- **_Flag_ Kubelet**: `--kube-reserved-cgroup=` + +`kube-reserved` berfungsi untuk mengambil informasi sumber daya reservasi +untuk _daemon_ sistem Kubernetes, seperti kubelet, _runtime_ Container, detektor masalah pada Node, dsb. +`kube-reserved` tidak berfungsi untuk mereservasi sumber daya untuk _daemon_ sistem yang berjalan +sebagai Pod. `kube-reserved` merupakan fungsi dari kepadatan Pod pada Node. + +Selain dari `cpu`, `memory`, dan `ephemeral-storage`,`pid` juga dapat +diatur untuk mereservasi jumlah ID proses untuk _daemon_ sistem Kubernetes. + +Secara opsional, kamu dapat memaksa _daemon_ sistem melalui setelan `kube-reserved`. +Ini dilakukan dengan menspesifikasikan _parent_ cgroup sebagai nilai dari _flag_ `--kube-reserved-cgroup` pada kubelet. + +Kami merekomendasikan _daemon_ sistem Kubernetes untuk ditempatkan pada +tingkatan cgroup yang tertinggi (contohnya, `runtime.slice` pada mesin systemd). +Secara ideal, setiap _daemon_ sistem sebaiknya dijalankan pada _child_ cgroup +di bawah _parent_ ini. Lihat [dokumentasi](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md#recommended-cgroups-setup) +untuk mengetahui rekomendasi hierarki cgroup secara detail. + +Catatan: kubelet **tidak membuat** `--kube-reserved-cgroup` jika cgroup +yang diberikan tidak ada pada sistem. Jika cgroup yang tidak valid diberikan, +maka kubelet akan mengalami kegagalan. + +### System Reserved + +- **_Flag_ Kubelet**: `--system-reserved=[cpu=100m][,][memory=100Mi][,][ephemeral-storage=1Gi][,][pid=1000]` +- **_Flag_ Kubelet**: `--system-reserved-cgroup=` + + +`system-reserved` berfungsi untuk mengetahui reservasi sumber daya untuk +_daemon_ sistem pada OS, seperti `sshd`, `udev`, dan lainnya. `system-reserved` sebaiknya +mereservasi memori untuk kernel juga, karena memori kernel tidak termasuk dalam +hitungan kalkulasi Pod pada Kubernetes. Kami juga merekomendasikan reservasi sumber daya +untuk sesi (_session_) login pengguna (contohnya, `user.slice` di dalam dunia systemd). + +### Melakukan Reservasi Daftar CPU secara Eksplisit +{{< feature-state for_k8s_version="v1.17" state="stable" >}} + +- **_Flag_ Kubelet**: `--reserved-cpus=0-3` + +`reserved-cpus` berfungsi untuk mendefinisikan [cpuset](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) secara eksplisit untuk +_daemon_ sistem OS dan _daemon_ sistem Kubernetes. `reserved-cpus` dimaksudkan untuk +sistem-sistem yang tidak mendefinisikan tingkatan cgroup tertinggi secara terpisah untuk +_daemon_ sistem OS dan _daemon_ sistem Kubernetes yang berkaitan dengan sumber daya cpuset. + +Jika kubelet **tidak memiliki** `--system-reserved-cgroup` dan `--kube-reserved-cgroup`, +cpuset akan diberikan secara eksplisit oleh `reserved-cpus`, yang akan menimpa definisi +yang diberikan oleh opsi `--kube-reserved` dan `--system-reserved`. + +Opsi ini dirancang secara spesifik untuk kasus-kasus Telco/NFV, di mana _interrupt_ atau _timer_ +yang tidak terkontrol bisa memengaruhi performa dari beban kerja. Kamu dapat menggunakan +opsi untuk untuk mendefinisikan cpuset secara eksplisit untuk _daemon_ sistem/Kubernetes dan +_interrupt_/_timer_, sehingga CPU sisanya dalam sistem akan digunakan untuk beban kerja saja, +dengan dampak yang sedikit terhadap _interrupt_/_timer_ yang tidak terkontrol. Untuk +memindahkan _daemon_ sistem, _daemon_ Kubernetes serta _interrrupt_/_timer_ Kubernetes supaya +menggunakan cpuset yang eksplisit didefinisikan oleh opsi ini, sebaiknya digunakan mekanisme lain di luar Kubernetes. Contohnya: pada Centos, kamu dapat melakukan ini dengan menggunakan +toolset yang sudah disetel. + +### Batas Pengusiran (_Eviction Threshold_) + +- **_Flag_ Kubelet**: `--eviction-hard=[memory.available<500Mi]` + +Tekanan memori pada tingkatan Node menyebabkan sistem OOM (_Out Of Memory_) yang +berdampak pada Node secara keseluruhan dan semua Pod yang dijalankan di dalamnya. +Node dapat berubah menjadi _offline_ sementara sampai memori berhasil diklaim kembali. +Untuk menghindari sistem OOM, atau mengurangi kemungkinan terjadinya OOM, kubelet +menyediakan fungsi untuk pengelolaan saat [Kehabisan Sumber Daya (_Out of Resource_)](/docs/tasks/administer-cluster/out-of-resource/). +Pengusiran dapat dilakukan hanya untuk kasus kehabisan `memory` dan `ephemeral-storage`. Dengan mereservasi +sebagian memori melalui _flag_ `--eviction-hard`, kubelet akan berusaha untuk "mengusir" (_evict_) +Pod ketika ketersediaan memori pada Node jatuh di bawah nilai yang telah direservasi. +Dalam bahasa sederhana, jika _daemon_ sistem tidak ada pada Node, maka Pod tidak dapat menggunakan +memori melebihi nilai yang ditentukan oleh _flag_ `--eviction-hard`. Karena alasan ini, +sumber daya yang direservasi untuk pengusiran tidak tersedia untuk Pod. + +### Memaksakan _Allocatable_ pada Node + +- **_Flag_ Kubelet**: `--enforce-node-allocatable=pods[,][system-reserved][,][kube-reserved]` + +Penjadwal menganggap `Allocatable` sebagai kapasitas yang tersedia untuk digunakan oleh Pod. + +Secara bawaan, kubelet memaksakan `Allocatable` untuk semua Pod. Pemaksaan dilakukan +dengan cara "mengusir" Pod-Pod ketika penggunaan sumber daya Pod secara keseluruhan telah +melewati nilai `Allocatable`. Lihat [bagian ini](/docs/tasks/administer-cluster/out-of-resource/#eviction-policy) +untuk mengetahui kebijakan pengusiran secara detail. Pemaksaan ini dikendalikan dengan +cara memberikan nilai Pod melalui _flag_ `--enforce-node-allocatable` pada kubelet. + +Secara opsional, kubelet dapat diatur untuk memaksakan `kube-reserved` dan +`system-reserved` dengan memberikan nilai melalui _flag_ tersebut. Sebagai catatan, +jika kamu mengatur `kube-reserved`, maka kamu juga harus mengatur `--kube-reserved-cgroup`. Begitu pula +jika kamu mengatur `system-reserved`, maka kamu juga harus mengatur `--system-reserved-cgroup`. + +## Panduan Umum + +_Daemon_ sistem dilayani mirip seperti Pod `Guaranteed` yang terjamin sumber dayanya. +_Daemon_ sistem dapat melakukan _burst_ di dalam jangkauan cgroup. Perilaku ini +dikelola sebagai bagian dari penggelaran (_deployment_) Kubernetes. Sebagai contoh, +kubelet harus memiliki cgroup sendiri dan membagikan sumber daya `kube-reserved` dengan +_runtime_ Container. Namun begitu, kubelet tidak dapat melakukan _burst_ dan menggunakan +semua sumber daya yang tersedia pada Node jika `kube-reserved` telah dipaksakan pada sistem. + +Kamu harus berhati-hati ekstra ketika memaksakan reservasi `system-reserved` karena dapat +menyebabkan layanan sistem yang terpenting mengalami CPU _starvation_, OOM _killed_, atau tidak +dapat melakukan _fork_ pada Node. Kami menyarankan untuk memaksakan `system-reserved` hanya +jika pengguna telah melakukan _profiling_ sebaik mungkin pada Node mereka untuk +mendapatkan estimasi yang akurat dan percaya diri terhadap kemampuan mereka untuk +memulihkan sistem ketika ada grup yang terkena OOM _killed_. + +* Untuk memulai, paksakan `Allocatable` pada Pod. +* Ketika _monitoring_ dan _alerting_ telah cukup dilakukan untuk memonitor _daemon_ +dari sistem Kubernetes, usahakan untuk memaksakan `kube-reserved` berdasarkan penggunakan heuristik. +* Jika benar-benar diperlukan, paksakan `system-reserved` secara bertahap. + +Sumber daya yang diperlukan oleh _daemon_ sistem Kubernetes dapat tumbuh seiring waktu dengan +adanya penambahan fitur-fitur baru. Proyek Kubernetes akan berusaha untuk menurunkan penggunaan sumber daya +dari _daemon_ sistem Node, tetapi belum menjadi prioritas untuk saat ini. +Kamu dapat berekspektasi bahwa fitur kapasitas `Allocatable` ini akan dihapus pada versi yang akan datang. + + + +<!-- discussion --> + +## Contoh Skenario + +Berikut ini merupakan contoh yang menggambarkan komputasi `Allocatable` pada Node: + +* Node memiliki 16 CPU, memori sebesar 32Gi, dan penyimpanan sebesar 100Gi. +* `--kube-reserved` diatur menjadi `cpu=1,memory=2Gi,ephemeral-storage=1Gi` +* `--system-reserved` diatur menjadi `cpu=500m,memory=1Gi,ephemeral-storage=1Gi` +* `--eviction-hard` diatur menjadi `memory.available<500Mi,nodefs.available<10%` + +Dalam skenario ini, `Allocatable` akan menjadi 14.5 CPU, memori 28.5Gi, dan penyimpanan +lokal 88Gi. +Penjadwal memastikan bahwa semua Pod yang berjalan pada Node ini secara total tidak meminta memori melebihi +28.5Gi dan tidak menggunakan penyimpanan lokal melebihi 88Gi. +Pengusiran Pod akan dilakukan kubelet ketika penggunaan memori keseluruhan oleh Pod telah melebihi 28.5Gi, +atau jika penggunaan penyimpanan keseluruhan telah melebihi 88Gi. Jika semua proses pada Node mengonsumsi +CPU sebanyak-banyaknya, Pod-Pod tidak dapat mengonsumsi lebih dari 14.5 CPU. + +Jika `kube-reserved` dan/atau `system-reserved` tidak dipaksakan dan _daemon_ sistem +melebihi reservasi mereka, maka kubelet akan mengusir Pod ketika penggunaan memori pada Node +melebihi 31.5Gi atau penggunaan penyimpanan melebihi 90Gi.