Skip to content

Commit c21a55d

Browse files
authored
Merge pull request #19815 from ariscahyadi/id-ephemeral-container
Translating Ephemeral Container to ID Localization.
2 parents bd3ddc5 + b0175b6 commit c21a55d

File tree

1 file changed

+224
-0
lines changed

1 file changed

+224
-0
lines changed
Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
---
2+
title: Kontainer Sementara (Ephemeral)
3+
content_template: templates/concept
4+
weight: 80
5+
---
6+
7+
{{% capture overview %}}
8+
9+
{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
10+
11+
Halaman ini memberikan gambaran umum tentang kontainer sementara: satu jenis
12+
kontainer khusus yang berjalan sementara pada {{< glossary_tooltip term_id="pod" >}}
13+
yang sudah ada untuk melakukan tindakan yang diinisiasi oleh pengguna seperti
14+
dalam pemecahan masalah. Kamu menggunakan kontainer sementara untuk memeriksa
15+
layanan bukan untuk membangun aplikasi.
16+
17+
{{< warning >}}
18+
Kontainer sementara masih berada dalam fase alpha dan tidak cocok untuk
19+
klaster produksi. Kamu harus mengharapkan adanya suatu fitur yang tidak akan
20+
berfungsi dalam beberapa situasi tertentu, seperti saat menargetkan _namespace_
21+
dari suatu kontainer. Sesuai dengan Kubernetes
22+
[_Deprecation Policy_](/docs/reference/using-api/deprecation-policy/), fitur alpha
23+
ini dapat berubah secara signifikan di masa depan atau akan dihapus seluruhnya.
24+
{{< /warning >}}
25+
26+
{{% /capture %}}
27+
28+
{{% capture body %}}
29+
30+
## Memahami Kontainer Sementara
31+
32+
{{< glossary_tooltip text="Pod" term_id="pod" >}} adalah blok pembangun
33+
fundamental dalam aplikasi Kubernetes. Karena Pod diharapkan digunakan hanya
34+
sekali dan dapat diganti, sehingga kamu tidak dapat menambahkan kontainer ke
35+
dalam Pod setelah Pod tersebut dibuat. Sebaliknya, kamu biasanya menghapus dan
36+
mengganti beberapa Pod dengan cara yang terkontrol melalui
37+
{{< glossary_tooltip text="Deployment" term_id="deployment" >}}.
38+
39+
Namun, kadang-kadang perlu juga untuk memeriksa keadaan Pod yang telah ada,
40+
sebagai contoh untuk memecahkan masalah _bug_ yang sulit direproduksi. Dalam
41+
kasus ini, kamu dapat menjalankan sebuah kontainer sementara di dalam suatu Pod
42+
yang sudah ada untuk memeriksa statusnya dan menjalankannya segala macam
43+
perintah.
44+
45+
### Apa itu Kontainer Sementara?
46+
47+
Kontainer sementara berbeda dengan kontainer lainnya karena tidak memiliki
48+
jaminan sumber daya maupun akan eksekusi, dan mereka tidak akan pernah secara
49+
otomatis melakukan _restart_, jadi mereka tidak sesuai untuk membangun aplikasi.
50+
Kontainer sementara dideskripsikan dengan menggunakan ContainerSpec yang sama
51+
dengan kontainer biasa, tetapi banyak bagian yang tidak kompatibel dan tidak
52+
diperbolehkan untuk kontainer sementara.
53+
54+
- Kontainer sementara mungkin tidak memiliki port, sehingga bagian seperti
55+
`port`, `livenessProbe`, `readinessProbe` tidak diperbolehkan.
56+
- Alokasi sumber daya untuk Pod tidak dapat diubah, sehingga pengaturan
57+
sumber daya tidak diperbolehkan.
58+
- Untuk daftar lengkap bagian yang diperbolehkan, dapat di lihat
59+
[referensi dokumentasi Kontainer Sementara](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#ephemeralcontainer-v1-core).
60+
61+
Kontainer sementara dibuat dengan menggunakan _handler_ khusus
62+
EphemeralContainers dalam API tanpa menambahkannya langsung ke `pod.spec`,
63+
sehingga tidak memungkinan untuk menambahkan kontainer sementara dengan
64+
menggunakan `kubectl edit`.
65+
66+
Seperti dengan kontainer biasa, kamu tidak dapat mengubah atau menghapus
67+
kontainer sementara setelah kamu memasukkannya ke dalam sebuah Pod.
68+
69+
## Penggunaan Kontainer Sementara
70+
71+
Kontainer sementara berguna untuk pemecahan masalah secara interaktif pada saat
72+
`kubectl exec` tidak mencukupi karena sebuah kontainer telah hancur atau
73+
kontainer _image_ tidak memiliki utilitas untuk _debugging_.
74+
75+
Khususnya, untuk [_images_distroless_](https://github.com/GoogleContainerTools/distroless)
76+
memungkinkan kamu untuk menyebarkan kontainer *image* minimal yang mengurangi
77+
_surface attack_ dan paparan _bug_ dan _vulnerability_. Karena
78+
_image distroless_ tidak mempunyai sebuah _shell_ atau utilitas _debugging_ apa
79+
pun, sehingga sulit untuk memecahkan masalah _image distroless_ dengan
80+
menggunakan `kubectl exec` saja.
81+
82+
Saat menggunakan kontainer sementara, akan sangat membantu untuk mengaktifkan
83+
[_process namespace sharing_](/docs/tasks/configure-pod-container/share-process-namespace/)
84+
sehingga kamu dapat melihat proses pada kontainer lain.
85+
86+
### Contoh
87+
88+
{{< note >}}
89+
Contoh-contoh pada bagian ini membutuhkan `EphemeralContainers` [feature
90+
gate](/docs/reference/command-line-tools-reference/feature-gates/) untuk
91+
diaktifkan, dan membutuhkan Kubernetes klien dan server versi v1.16 atau
92+
yang lebih baru.
93+
{{< /note >}}
94+
95+
Contoh-contoh pada bagian ini menunjukkan bagaimana kontainer sementara muncul
96+
dalam API. Kamu biasanya dapat menggunakan plugin `kubectl` untuk mengatasi
97+
masalah untuk mengotomatiskan langkah-langkah ini.
98+
99+
Kontainer sementara dibuat menggunakan _subresource_ `ephemeralcontainers`
100+
Pod, yang dapat didemonstrasikan menggunakan `kubectl --raw`. Pertama-tama
101+
deskripsikan kontainer sementara untuk ditambahkan dalam daftar
102+
`EphemeralContainers`:
103+
104+
```json
105+
{
106+
"apiVersion": "v1",
107+
"kind": "EphemeralContainers",
108+
"metadata": {
109+
"name": "example-pod"
110+
},
111+
"ephemeralContainers": [{
112+
"command": [
113+
"sh"
114+
],
115+
"image": "busybox",
116+
"imagePullPolicy": "IfNotPresent",
117+
"name": "debugger",
118+
"stdin": true,
119+
"tty": true,
120+
"terminationMessagePolicy": "File"
121+
}]
122+
}
123+
```
124+
125+
Untuk memperbarui kontainer yang sudah berjalan dalam `example-pod`:
126+
127+
```shell
128+
kubectl replace --raw /api/v1/namespaces/default/pods/example-pod/ephemeralcontainers -f ec.json
129+
```
130+
131+
Ini akan menampilkan daftar baru dari seluruh kontainer sementara:
132+
133+
```json
134+
{
135+
"kind":"EphemeralContainers",
136+
"apiVersion":"v1",
137+
"metadata":{
138+
"name":"example-pod",
139+
"namespace":"default",
140+
"selfLink":"/api/v1/namespaces/default/pods/example-pod/ephemeralcontainers",
141+
"uid":"a14a6d9b-62f2-4119-9d8e-e2ed6bc3a47c",
142+
"resourceVersion":"15886",
143+
"creationTimestamp":"2019-08-29T06:41:42Z"
144+
},
145+
"ephemeralContainers":[
146+
{
147+
"name":"debugger",
148+
"image":"busybox",
149+
"command":[
150+
"sh"
151+
],
152+
"resources":{
153+
154+
},
155+
"terminationMessagePolicy":"File",
156+
"imagePullPolicy":"IfNotPresent",
157+
"stdin":true,
158+
"tty":true
159+
}
160+
]
161+
}
162+
```
163+
164+
Kamu dapat melihat kondisi kontainer sementara yang baru dibuat dengan
165+
menggunakan `kubectl describe`:
166+
167+
```shell
168+
kubectl describe pod example-pod
169+
```
170+
171+
```
172+
...
173+
Ephemeral Containers:
174+
debugger:
175+
Container ID: docker://cf81908f149e7e9213d3c3644eda55c72efaff67652a2685c1146f0ce151e80f
176+
Image: busybox
177+
Image ID: docker-pullable://busybox@sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
178+
Port: <none>
179+
Host Port: <none>
180+
Command:
181+
sh
182+
State: Running
183+
Started: Thu, 29 Aug 2019 06:42:21 +0000
184+
Ready: False
185+
Restart Count: 0
186+
Environment: <none>
187+
Mounts: <none>
188+
...
189+
```
190+
191+
Kamu dapat mengakses kontainer sementara yang baru menggunakan
192+
`kubectl attach`:
193+
194+
```shell
195+
kubectl attach -it example-pod -c debugger
196+
```
197+
198+
Jika proses berbagi _namespace_ diaktifkan, kamu dapat melihat proses dari semua
199+
kontainer dalam Pod tersebut. Misalnya, setelah mengakses, kamu jalankan
200+
`ps` di kontainer _debugger_:
201+
202+
```shell
203+
# Jalankan ini pada _shell_ dalam _debugger_ dari kontainer sementara
204+
ps auxww
205+
```
206+
Hasilnya akan seperti ini:
207+
```
208+
PID USER TIME COMMAND
209+
1 root 0:00 /pause
210+
6 root 0:00 nginx: master process nginx -g daemon off;
211+
11 101 0:00 nginx: worker process
212+
12 101 0:00 nginx: worker process
213+
13 101 0:00 nginx: worker process
214+
14 101 0:00 nginx: worker process
215+
15 101 0:00 nginx: worker process
216+
16 101 0:00 nginx: worker process
217+
17 101 0:00 nginx: worker process
218+
18 101 0:00 nginx: worker process
219+
19 root 0:00 /pause
220+
24 root 0:00 sh
221+
29 root 0:00 ps auxww
222+
```
223+
224+
{{% /capture %}}

0 commit comments

Comments
 (0)