website/content/id/docs/concepts/cluster-administration/kubelet-garbage-collection.md

98 lines
5.7 KiB
Markdown

---
title: Konfigurasi Garbage Collection pada kubelet
content_type: concept
weight: 70
---
<!-- overview -->
*Garbage collection* merupakan fitur kubelet yang sangat bermanfaat, yang akan membersihkan *image-image* dan juga kontainer-kontainer
yang tidak lagi digunakan. Kubelet akan melakukan *garbage collection* untuk kontainer setiap satu menit dan *garbage collection* untuk
*image* setiap lima menit.
Perangkat *garbage collection* eksternal tidak direkomendasikan karena perangkat tersebut berpotensi merusak perilaku kubelet dengan
menghilangkan kontainer-kontainer yang sebenarnya masih diperlukan.
<!-- body -->
## *Garbage Collection* untuk *Image*
Kubernetes mengelola *lifecycle* untuk seluruh *image* melalui *imageManager*, dengan bantuan cadvisor.
*Policy* untuk melakukan *garbage collection* memperhatikan dua hal: `HighThresholdPercent` dan `LowThresholdPercent`.
Penggunaan disk yang melewati batas atas (*high threshold*) akan men-*trigger* *garbage collection*.
*Garbage collection* akan mulai menghapus dari *image-image* yang paling jarang digunakan (*least recently used*)
sampai menemui batas bawah (*low threshold*) kembali.
## *Garbage Collection* untuk Kontainer
*Policy* untuk melakukan *garbage collection* pada kontainer memperhatikan tiga variabel yang ditentukan oleh pengguna (*user-defined*).
`MinAge` merupakan umur minimal dimana suatu kontainer dapat terkena *garbage collection*.
`MaxPerPodContainer` merupakan jumlah maksimum yang diperbolehkan untuk setiap pod (UID, container name) *pair* memiliki
kontainer-kontainer yang sudah mati (*dead containers*). `MaxContainers` merupakan jumlah maksimal total dari seluruh kontainer yang sudah mati.
Semua variabel ini dapat dinonaktifkan secara individual, dengan mengatur `MinAge` ke angka nol serta mengatur `MaxPerPodContainer` dan `MaxContainers`
ke angka di bawah nol.
Kubelet akan mengambil tindakan untuk kontainer-kontainer yang tidak dikenal, sudah dihapus, atau diluar batasan-batasan yang diatur
sebelumnya melalui *flag*. Kontainer-kontainer yang paling lama (tertua) biasanya akan dihapus terlebih dahulu. `MaxPerPodContainer` dan `MaxContainer`
berpotensi mengalami konflik satu sama lain pada situasi saat menjaga jumlah maksimal kontainer per pod (`MaxPerPodContainer`) akan melebihi
jumlah kontainer mati (*dead containers*) yang diperbolehkan (`MaxContainers`).
`MaxPerPodContainer` dapat diatur sedemikian rupa dalam situasi ini: Seburuk-buruhknya dengan melakukan *downgrade* `MaxPerPodContainer` ke angka 1
dan melakukan *evict* kontainer-kontainer yang paling lama. Selain itu, kontainer-kontainer milik Pod yang telah dihapus akan dihilangkan
saat umur mereka telah melebihi `MinAge`.
Kontainer-kontainer yang tidak dikelola oleh kubelet akan terbebas dari *garbage collection*.
## Konfigurasi Pengguna
Para pengguna dapat mengatur *threshold-threshold* untuk melakukan *tuning* pada *garbage collection image*
melalui *flag-flag* kubelet sebagai berikut:
1. `image-gc-high-threshold`, persentase dari penggunaan disk yang men-*trigger* proses *garbage collection* untuk *image*.
*Default*-nya adalah 85%.
2. `image-gc-low-threshold`, persentase dari penggunaan disk dimana *garbage collection* berusaha menghapus *image*.
*Default*-nya adalah 80%.
Kami juga memperbolehkan para pengguna untuk menyesuaikan *policy garbage collection* melalui
*flag-flag* kubelet sebagai berikut:
1. `minimum-container-ttl-duration`, umur minimal untuk setiap kontainer yang sudah selesai (*finished*) sebelum
terkena *garbage collection*. *Default*-nya adalah 0 menit, yang berarti setiap kontainer yang telah selesai akan
terkena *garbage collection*.
2. `maximum-dead-containers-per-container`, jumlah maksimal dari kontainer-kontainer lama yang diperbolehkan ada
secara global. *Default*-nya adalah -1, yang berarti tidak ada batasannya untuk global.
Kontainer-kontainer dapat berpotensi terkena *garbage collection* sebelum kegunaannya telah usang. Kontainer-kontainer
ini memliki log dan data lainnya yang bisa saja berguna saat *troubleshoot*. Sangat direkomendasikan untuk menetapkan
angka yang cukup besar pada `maximum-dead-containers-per-container`, untuk memperbolehkan paling tidak 1 kontainer mati
untuk dijaga (*retained*) per jumlah kontainer yang diharapkan. Angka yang lebih besar untuk `maximum-dead-containers`
juga direkomendasikan untuk alasan serupa.
Lihat [isu ini](https://github.com/kubernetes/kubernetes/issues/13287) untuk penjelasan lebih lanjut.
## *Deprecation*
Beberapa fitur *Garbage Collection* pada kubelet di laman ini akan digantikan oleh fitur *eviction* nantinya, termasuk:
| *Flag Existing* | *Flag* Baru | Alasan |
| ------------- | -------- | --------- |
| `--image-gc-high-threshold` | `--eviction-hard` atau `--eviction-soft` | sinyal *eviction* yang ada (*existing*) dapat men-*trigger* *garbage collection* |
| `--image-gc-low-threshold` | `--eviction-minimum-reclaim` | hal serupa dapat diperoleh dengan *eviction reclaim* |
| `--maximum-dead-containers` | | *deprecated* saat log yang telah usang tersimpan di luar konteks kontainer |
| `--maximum-dead-containers-per-container` | | *deprecated* saat log yang telah usang tersimpan di luar konteks kontainer |
| `--minimum-container-ttl-duration` | | *deprecated* saat log yang telah usang tersimpan di luar konteks kontainer |
| `--low-diskspace-threshold-mb` | `--eviction-hard` atau `eviction-soft` | *eviction* memberi generalisasi *threshold* disk untuk *resource-resource* lainnya |
| `--outofdisk-transition-frequency` | `--eviction-pressure-transition-period` | *eviction* memberi generalisasi transisi tekanan *disk* (*disk pressure*)untuk *resource-resource* lainnya |
## {{% heading "whatsnext" %}}
Lihat [Konfigurasi untuk Menangani Kehabisan *Resource*](/docs/tasks/administer-cluster/out-of-resource/) untuk penjelasan lebih lanjut.