Skip to content

Commit 8354119

Browse files
authored
Merge pull request #23833 from ariscahyadi/id-local-config-pod-assign-memory
ID localization for configure pod and container - assign memory resource
2 parents 428e826 + 22da0fa commit 8354119

File tree

4 files changed

+415
-0
lines changed

4 files changed

+415
-0
lines changed
Lines changed: 367 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,367 @@
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+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: memory-demo-2
5+
namespace: mem-example
6+
spec:
7+
containers:
8+
- name: memory-demo-2-ctr
9+
image: polinux/stress
10+
resources:
11+
requests:
12+
memory: "50Mi"
13+
limits:
14+
memory: "100Mi"
15+
command: ["stress"]
16+
args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]

0 commit comments

Comments
 (0)