|
| 1 | +--- |
| 2 | +title: Menetapkan Sumber Daya Memori untuk Container dan Pod |
| 3 | +content_type: task |
| 4 | +weight: 10 |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | + |
| 9 | +Laman ini menunjukkan bagaimana menetapkan permintaan dan batasan memori untuk Container. |
| 10 | +Container dijamin memiliki memori sebanyak yang diminta, |
| 11 | +tetapi tidak diperbolehkan untuk menggunakan memori melebihi batas. |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | + |
| 16 | +## {{% heading "prerequisites" %}} |
| 17 | + |
| 18 | + |
| 19 | +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} |
| 20 | + |
| 21 | +Setiap Node pada klaster kamu harus memiliki memori setidaknya 300 MiB. |
| 22 | + |
| 23 | +Beberapa langkah pada laman ini mengharuskan kamu menjalankan Service |
| 24 | +[_metrics-server_](https://github.com/kubernetes-incubator/metrics-server) |
| 25 | +pada klaster kamu. Jika kamu memiliki _metrics-server_ |
| 26 | +yang sudah berjalan, kamu dapat melewati langkah-langkah berikut ini. |
| 27 | + |
| 28 | +Jika kamu menjalankan Minikube, jalankan perintah berikut untuk mengaktifkan |
| 29 | +_metrics-server_: |
| 30 | + |
| 31 | +```shell |
| 32 | +minikube addons enable metrics-server |
| 33 | +``` |
| 34 | + |
| 35 | +Untuk melihat apakah _metrics-server_ sudah berjalan, atau penyedia lain dari API metrik sumber daya |
| 36 | +(`metrics.k8s.io`), jalankan perintah berikut ini: |
| 37 | + |
| 38 | +```shell |
| 39 | +kubectl get apiservices |
| 40 | +``` |
| 41 | + |
| 42 | +Jika API metrik sumber daya telah tersedia, keluarannya meliputi seperti |
| 43 | +acuan pada `metrics.k8s.io`. |
| 44 | + |
| 45 | +```shell |
| 46 | +NAME |
| 47 | +v1beta1.metrics.k8s.io |
| 48 | +``` |
| 49 | + |
| 50 | + |
| 51 | + |
| 52 | +<!-- steps --> |
| 53 | + |
| 54 | +## Membuat Namespace |
| 55 | + |
| 56 | +Buat Namespace sehingga sumber daya yang kamu buat dalam latihan ini |
| 57 | +terisolasi dari klaster kamu yang lain. |
| 58 | + |
| 59 | +```shell |
| 60 | +kubectl create namespace mem-example |
| 61 | +``` |
| 62 | + |
| 63 | +## Menentukan permintaan memori dan batasan memori |
| 64 | + |
| 65 | +Untuk menentukan permintaan memori untuk Container, sertakan _field_ `resources:requests` |
| 66 | +pada manifes sumber daya dari Container. Untuk menentukan batasan memori, sertakan `resources:limits`. |
| 67 | + |
| 68 | +Dalam latihan ini, kamu akan membuat Pod yang memiliki satu Container. Container memiliki permintaan memori |
| 69 | +sebesar 100 MiB dan batasan memori sebesar 200 MiB. Berikut berkas konfigurasi |
| 70 | +untuk Pod: |
| 71 | + |
| 72 | +{{< codenew file="pods/resource/memory-request-limit.yaml" >}} |
| 73 | + |
| 74 | +Bagian `args` dalam berkas konfigurasi memberikan argumen untuk Container pada saat dimulai. |
| 75 | +Argumen`"--vm-bytes", "150M"` memberi tahu Container agar mencoba mengalokasikan memori sebesar 150 MiB. |
| 76 | + |
| 77 | +Buatlah Pod: |
| 78 | + |
| 79 | +```shell |
| 80 | +kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit.yaml --namespace=mem-example |
| 81 | +``` |
| 82 | + |
| 83 | +Verifikasi apakah Container dalam Pod sudah berjalan: |
| 84 | + |
| 85 | +```shell |
| 86 | +kubectl get pod memory-demo --namespace=mem-example |
| 87 | +``` |
| 88 | + |
| 89 | +Lihat informasi mendetil tentang Pod: |
| 90 | + |
| 91 | +```shell |
| 92 | +kubectl get pod memory-demo --output=yaml --namespace=mem-example |
| 93 | +``` |
| 94 | + |
| 95 | +Keluarannya menunjukkan bahwa satu Container dalam Pod memiliki permintaan memori sebesar 100 MiB |
| 96 | +dan batasan memori sebesar 200 MiB. |
| 97 | + |
| 98 | +```yaml |
| 99 | +... |
| 100 | +resources: |
| 101 | + limits: |
| 102 | + memory: 200Mi |
| 103 | + requests: |
| 104 | + memory: 100Mi |
| 105 | +... |
| 106 | +``` |
| 107 | + |
| 108 | +Jalankan `kubectl top` untuk mengambil metrik dari Pod: |
| 109 | + |
| 110 | +```shell |
| 111 | +kubectl top pod memory-demo --namespace=mem-example |
| 112 | +``` |
| 113 | + |
| 114 | +Keluarannya menunjukkan bahwa Pod menggunakan memori sekitar 162.900.000 byte, dimana |
| 115 | +sekitar 150 MiB. Ini lebih besar dari permintaannya sebesar 100 MiB Pod, tetapi masih di dalam |
| 116 | +batasan Pod sebesar 200 MiB. |
| 117 | + |
| 118 | + |
| 119 | +``` |
| 120 | +NAME CPU(cores) MEMORY(bytes) |
| 121 | +memory-demo <something> 162856960 |
| 122 | +``` |
| 123 | + |
| 124 | +Hapuslah Pod: |
| 125 | + |
| 126 | +```shell |
| 127 | +kubectl delete pod memory-demo --namespace=mem-example |
| 128 | +``` |
| 129 | + |
| 130 | +## Melebihi batasan memori dari Container |
| 131 | + |
| 132 | +Container dapat melebihi permintaan memorinya jika Node memiliki memori yang tersedia. Tapi sebuah Container |
| 133 | +tidak diperbolehkan untuk menggunakan lebih dari batasan memorinya. Jika Container mengalokasikan lebih banyak memori daripada |
| 134 | +batasannya, Container menjadi kandidat untuk dihentikan. Jika Container terus berlanjut |
| 135 | +mengkonsumsi memori melebihi batasnya, maka Container akan diakhiri. Jika Container dihentikan dan bisa |
| 136 | +di mulai ulang, kubelet akan memulai ulang, sama seperti jenis kegagalan _runtime_ yang lainnya. |
| 137 | + |
| 138 | +Dalam latihan ini, kamu membuat Pod yang mencoba mengalokasikan lebih banyak memori dari batasannya. |
| 139 | +Berikut adalah berkas konfigurasi untuk Pod yang memiliki satu Container dengan berkas |
| 140 | +permintaan memori sebesar 50 MiB dan batasan memori sebesar 100 MiB: |
| 141 | + |
| 142 | +{{< codenew file="pods/resource/memory-request-limit-2.yaml" >}} |
| 143 | + |
| 144 | +Dalam bagian `args` dari berkas konfigurasi, kamu dapat melihat bahwa Container tersebut |
| 145 | +akan mencoba mengalokasikan memori sebesar 250 MiB, yang jauh di atas batas yaitu 100 MiB. |
| 146 | + |
| 147 | +Buatlah Pod: |
| 148 | + |
| 149 | +```shell |
| 150 | +kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-2.yaml --namespace=mem-example |
| 151 | +``` |
| 152 | + |
| 153 | +Lihat informasi mendetail tentang Pod: |
| 154 | + |
| 155 | +```shell |
| 156 | +kubectl get pod memory-demo-2 --namespace=mem-example |
| 157 | +``` |
| 158 | + |
| 159 | +Sampai sini, Container mungkin sedang berjalan atau dimatikan. Ulangi perintah sebelumnya hingga Container dimatikan: |
| 160 | + |
| 161 | +```shell |
| 162 | +NAME READY STATUS RESTARTS AGE |
| 163 | +memory-demo-2 0/1 OOMKilled 1 24s |
| 164 | +``` |
| 165 | + |
| 166 | +Dapatkan tampilan yang lebih mendetail tentang status Container: |
| 167 | + |
| 168 | +```shell |
| 169 | +kubectl get pod memory-demo-2 --output=yaml --namespace=mem-example |
| 170 | +``` |
| 171 | + |
| 172 | +Keluarannya menunjukkan bahwa Container dimatikan karena kehabisan memori (OOM): |
| 173 | + |
| 174 | +```shell |
| 175 | +lastState: |
| 176 | + terminated: |
| 177 | + containerID: docker://65183c1877aaec2e8427bc95609cc52677a454b56fcb24340dbd22917c23b10f |
| 178 | + exitCode: 137 |
| 179 | + finishedAt: 2017-06-20T20:52:19Z |
| 180 | + reason: OOMKilled |
| 181 | + startedAt: null |
| 182 | +``` |
| 183 | + |
| 184 | +Container dalam latihan ini dapat dimulai ulang, sehingga kubelet akan memulai ulangnya. Ulangi |
| 185 | +perintah ini beberapa kali untuk melihat bahwa Container berulang kali dimatikan dan dimulai ulang: |
| 186 | + |
| 187 | +```shell |
| 188 | +kubectl get pod memory-demo-2 --namespace=mem-example |
| 189 | +``` |
| 190 | + |
| 191 | +Keluarannya menunjukkan bahwa Container dimatikan, dimulai ulang, dimatikan lagi, dimulai ulang lagi, dan seterusnya: |
| 192 | + |
| 193 | +``` |
| 194 | +kubectl get pod memory-demo-2 --namespace=mem-example |
| 195 | +NAME READY STATUS RESTARTS AGE |
| 196 | +memory-demo-2 0/1 OOMKilled 1 37s |
| 197 | +``` |
| 198 | +``` |
| 199 | +
|
| 200 | +kubectl get pod memory-demo-2 --namespace=mem-example |
| 201 | +NAME READY STATUS RESTARTS AGE |
| 202 | +memory-demo-2 1/1 Running 2 40s |
| 203 | +``` |
| 204 | + |
| 205 | +Lihat informasi mendetail tentang riwayat Pod: |
| 206 | + |
| 207 | +``` |
| 208 | +kubectl describe pod memory-demo-2 --namespace=mem-example |
| 209 | +``` |
| 210 | + |
| 211 | + |
| 212 | +Keluarannya menunjukkan bahwa Container dimulai dan gagal berulang kali: |
| 213 | + |
| 214 | +``` |
| 215 | +... Normal Created Created container with id 66a3a20aa7980e61be4922780bf9d24d1a1d8b7395c09861225b0eba1b1f8511 |
| 216 | +... Warning BackOff Back-off restarting failed container |
| 217 | +``` |
| 218 | + |
| 219 | +Lihat informasi mendetail tentang Node klaster Anda: |
| 220 | + |
| 221 | +``` |
| 222 | +kubectl describe nodes |
| 223 | +``` |
| 224 | + |
| 225 | +Keluarannya mencakup rekaman Container yang dimatikan karena kondisi kehabisan memori: |
| 226 | + |
| 227 | + |
| 228 | +``` |
| 229 | +Warning OOMKilling Memory cgroup out of memory: Kill process 4481 (stress) score 1994 or sacrifice child |
| 230 | +``` |
| 231 | + |
| 232 | +Hapus Pod kamu: |
| 233 | + |
| 234 | +```shell |
| 235 | +kubectl delete pod memory-demo-2 --namespace=mem-example |
| 236 | +``` |
| 237 | + |
| 238 | +## Menentukan permintaan memori yang terlalu besar untuk Node kamu |
| 239 | + |
| 240 | +Permintaan dan batasan memori yang dikaitkan dengan Container, berguna untuk berpikir |
| 241 | +apakah sebuah Pod yang memiliki permintaan dan batasan memori. Permintaan memori untuk Pod tersebut adalah |
| 242 | +jumlah permintaan memori untuk semua Container dalam Pod. Begitu juga dengan batasan memori |
| 243 | +untuk Pod adalah jumlah batasan memori dari semua Container di dalam Pod. |
| 244 | + |
| 245 | +Penjadwalan Pod didasarkan pada permintaan. Sebuah Pod dijadwalkan untuk berjalan di sebuah Node hanya jika sebuah Node |
| 246 | +memiliki cukup memori yang tersedia untuk memenuhi permintaan memori dari Pod tersebut. |
| 247 | + |
| 248 | +Dalam latihan ini, kamu membuat Pod yang memiliki permintaan memori yang sangat besar sehingga melebihi |
| 249 | +kapasitas dari Node mana pun dalam klaster kamu. Berikut adalah berkas konfigurasi untuk Pod yang memiliki |
| 250 | +Container dengan permintaan memori 1000 GiB, yang kemungkinan besar melebihi kapasitas |
| 251 | +dari setiap Node dalam klaster kamu. |
| 252 | + |
| 253 | +{{< codenew file="pods/resource/memory-request-limit-3.yaml" >}} |
| 254 | + |
| 255 | +Buatlah Pod: |
| 256 | + |
| 257 | +```shell |
| 258 | +kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-3.yaml --namespace=mem-example |
| 259 | +``` |
| 260 | + |
| 261 | +Lihat status Pod: |
| 262 | + |
| 263 | +```shell |
| 264 | +kubectl get pod memory-demo-3 --namespace=mem-example |
| 265 | +``` |
| 266 | + |
| 267 | +Keluarannya menunjukkan bahwa status Pod adalah PENDING. Artinya, Pod tidak dijadwalkan untuk berjalan di Node mana pun, dan Pod akan tetap dalam status PENDING tanpa batas waktu: |
| 268 | + |
| 269 | +``` |
| 270 | +kubectl get pod memory-demo-3 --namespace=mem-example |
| 271 | +NAME READY STATUS RESTARTS AGE |
| 272 | +memory-demo-3 0/1 Pending 0 25s |
| 273 | +``` |
| 274 | + |
| 275 | +Lihat informasi mendetail tentang Pod, termasuk _event_: |
| 276 | + |
| 277 | +```shell |
| 278 | +kubectl describe pod memory-demo-3 --namespace=mem-example |
| 279 | +``` |
| 280 | + |
| 281 | +Keluarannya menunjukkan bahwa Container tidak dapat dijadwalkan karena memori yang tidak cukup pada Node: |
| 282 | + |
| 283 | +```shell |
| 284 | +Events: |
| 285 | + ... Reason Message |
| 286 | + ------ ------- |
| 287 | + ... FailedScheduling No nodes are available that match all of the following predicates:: Insufficient memory (3). |
| 288 | +``` |
| 289 | + |
| 290 | +## Satuan Memori |
| 291 | + |
| 292 | +Sumber daya memori diukur dalam satuan _byte_. Kamu dapat mengekspresikan memori sebagai bilangan bulat biasa atau |
| 293 | +bilangan bulan _fixed-point_ dengan salah satu akhiran ini: E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki. |
| 294 | +Contoh berikut ini mewakili nilai yang kira-kira sama: |
| 295 | + |
| 296 | +```shell |
| 297 | +128974848, 129e6, 129M , 123Mi |
| 298 | +``` |
| 299 | + |
| 300 | +Hapuslah Pod kamu: |
| 301 | + |
| 302 | +```shell |
| 303 | +kubectl delete pod memory-demo-3 --namespace=mem-example |
| 304 | +``` |
| 305 | + |
| 306 | +## Jika kamu tidak menentukan batasan memori |
| 307 | + |
| 308 | +Jika kamu tidak menentukan batasan memori untuk sebuah Container, salah satu dari situasi berikut ini berlaku: |
| 309 | + |
| 310 | +* Container tidak memiliki batasan maksimum jumlah memori yang digunakannya. Container |
| 311 | +dapat menggunakan semua memori yang tersedia dalam Node dimana Container itu berjalan yang pada gilirannya dapat memanggil penyetop OOM (_out-of-memory_). |
| 312 | +Lebih lanjut, dalam kasus menghentikan OOM, Container tanpa batas sumber daya akan memiliki peluang lebih besar untuk dihentikan. |
| 313 | + |
| 314 | +* Container berjalan pada Namespace yang memiliki batasan bawaan memori, dan |
| 315 | +Container secara otomatis menetapkan batasan bawaan. Administrator klaster dapat menggunakan |
| 316 | +[LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core) |
| 317 | +untuk menentukan batasan memori secara bawaan. |
| 318 | + |
| 319 | +## Motivasi untuk permintaan dan batasan memori |
| 320 | + |
| 321 | +Dengan mengonfigurasi permintaan dan batasan memori untuk Container yang berjalan pada berkas |
| 322 | +klaster, kamu dapat menggunakan sumber daya memori yang tersedia pada Node klaster kamu secara efisien. |
| 323 | +Dengan menjaga permintaan memori pada Pod tetap rendah, kamu memberikan kesempatan yang baik untuk Pod tersebut |
| 324 | +dijadwalkan. Dengan memiliki batas memori yang lebih besar dari permintaan memori, Anda mencapai dua hal: |
| 325 | + |
| 326 | +* Pod dapat memiliki aktivitas yang bersifat _burst_ dengan memanfaatkan memori yang kebetulan tersedia. |
| 327 | +* Jumlah memori yang dapat digunakan Pod selama keadaan _burst_ dibatasi pada jumlah yang wajar. |
| 328 | + |
| 329 | +## Membersihkan |
| 330 | + |
| 331 | +Hapus Namespace kamu. Ini akan menghapus semua Pod yang kamu buat untuk tugas ini: |
| 332 | + |
| 333 | +```shell |
| 334 | +kubectl delete namespace mem-example |
| 335 | +``` |
| 336 | + |
| 337 | + |
| 338 | + |
| 339 | +## {{% heading "whatsnext" %}} |
| 340 | + |
| 341 | + |
| 342 | +### Untuk pengembang aplikasi |
| 343 | + |
| 344 | +* [Menetapkan sumber daya CPU ke Container dan Pod](/docs/tasks/configure-pod-container/assign-cpu-resource/) |
| 345 | + |
| 346 | +* [Mengonfigurasi _Quality of Service_ untuk Pod](/docs/tasks/configure-pod-container/quality-service-pod/) |
| 347 | + |
| 348 | +### Untuk administrator klaster |
| 349 | + |
| 350 | +* [Mengonfigurasi permintaan dan batasan bawaan memori untuk Namespace](/id/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/) |
| 351 | + |
| 352 | +* [Mengonfigurasi permintaan dan batasan bawaan CPU untuk Namespace](/id/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/) |
| 353 | + |
| 354 | +* [Mengonfigurasi batasan memori minimum dan maksimum untuk Namespace](/id/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/) |
| 355 | + |
| 356 | +* [Mengonfigurasi batasan CPU minimum dan maksimum untuk Namespace](/id/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace/) |
| 357 | + |
| 358 | +* [Mengonfigurasi kuota CPU dan memori untuk Namespace](/id/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/) |
| 359 | + |
| 360 | +* [Mengonfigurasi kuota Pod untuk Namespace](/id/docs/tasks/administer-cluster/manage-resources/quota-pod-namespace/) |
| 361 | + |
| 362 | +* [Mengonfigurasi kuota untuk objek API](/id/docs/tasks/administer-cluster/quota-api-object/) |
| 363 | + |
| 364 | + |
| 365 | + |
| 366 | + |
| 367 | + |
0 commit comments