Translating Ephemeral Container to ID Localization.

Fix glossary warning and note.

Fixed formatting and Typos.
pull/19815/head
Aris Cahyadi Risdianto 2020-03-24 11:01:19 +08:00
parent fca1d58ce0
commit b0175b6323
1 changed files with 224 additions and 0 deletions

View File

@ -0,0 +1,224 @@
---
title: Kontainer Sementara (Ephemeral)
content_template: templates/concept
weight: 80
---
{{% capture overview %}}
{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
Halaman ini memberikan gambaran umum tentang kontainer sementara: satu jenis
kontainer khusus yang berjalan sementara pada {{< glossary_tooltip term_id="pod" >}}
yang sudah ada untuk melakukan tindakan yang diinisiasi oleh pengguna seperti
dalam pemecahan masalah. Kamu menggunakan kontainer sementara untuk memeriksa
layanan bukan untuk membangun aplikasi.
{{< warning >}}
Kontainer sementara masih berada dalam fase alpha dan tidak cocok untuk
klaster produksi. Kamu harus mengharapkan adanya suatu fitur yang tidak akan
berfungsi dalam beberapa situasi tertentu, seperti saat menargetkan _namespace_
dari suatu kontainer. Sesuai dengan Kubernetes
[_Deprecation Policy_](/docs/reference/using-api/deprecation-policy/), fitur alpha
ini dapat berubah secara signifikan di masa depan atau akan dihapus seluruhnya.
{{< /warning >}}
{{% /capture %}}
{{% capture body %}}
## Memahami Kontainer Sementara
{{< glossary_tooltip text="Pod" term_id="pod" >}} adalah blok pembangun
fundamental dalam aplikasi Kubernetes. Karena Pod diharapkan digunakan hanya
sekali dan dapat diganti, sehingga kamu tidak dapat menambahkan kontainer ke
dalam Pod setelah Pod tersebut dibuat. Sebaliknya, kamu biasanya menghapus dan
mengganti beberapa Pod dengan cara yang terkontrol melalui
{{< glossary_tooltip text="Deployment" term_id="deployment" >}}.
Namun, kadang-kadang perlu juga untuk memeriksa keadaan Pod yang telah ada,
sebagai contoh untuk memecahkan masalah _bug_ yang sulit direproduksi. Dalam
kasus ini, kamu dapat menjalankan sebuah kontainer sementara di dalam suatu Pod
yang sudah ada untuk memeriksa statusnya dan menjalankannya segala macam
perintah.
### Apa itu Kontainer Sementara?
Kontainer sementara berbeda dengan kontainer lainnya karena tidak memiliki
jaminan sumber daya maupun akan eksekusi, dan mereka tidak akan pernah secara
otomatis melakukan _restart_, jadi mereka tidak sesuai untuk membangun aplikasi.
Kontainer sementara dideskripsikan dengan menggunakan ContainerSpec yang sama
dengan kontainer biasa, tetapi banyak bagian yang tidak kompatibel dan tidak
diperbolehkan untuk kontainer sementara.
- Kontainer sementara mungkin tidak memiliki port, sehingga bagian seperti
`port`, `livenessProbe`, `readinessProbe` tidak diperbolehkan.
- Alokasi sumber daya untuk Pod tidak dapat diubah, sehingga pengaturan
sumber daya tidak diperbolehkan.
- Untuk daftar lengkap bagian yang diperbolehkan, dapat di lihat
[referensi dokumentasi Kontainer Sementara](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#ephemeralcontainer-v1-core).
Kontainer sementara dibuat dengan menggunakan _handler_ khusus
EphemeralContainers dalam API tanpa menambahkannya langsung ke `pod.spec`,
sehingga tidak memungkinan untuk menambahkan kontainer sementara dengan
menggunakan `kubectl edit`.
Seperti dengan kontainer biasa, kamu tidak dapat mengubah atau menghapus
kontainer sementara setelah kamu memasukkannya ke dalam sebuah Pod.
## Penggunaan Kontainer Sementara
Kontainer sementara berguna untuk pemecahan masalah secara interaktif pada saat
`kubectl exec` tidak mencukupi karena sebuah kontainer telah hancur atau
kontainer _image_ tidak memiliki utilitas untuk _debugging_.
Khususnya, untuk [_images_distroless_](https://github.com/GoogleContainerTools/distroless)
memungkinkan kamu untuk menyebarkan kontainer *image* minimal yang mengurangi
_surface attack_ dan paparan _bug_ dan _vulnerability_. Karena
_image distroless_ tidak mempunyai sebuah _shell_ atau utilitas _debugging_ apa
pun, sehingga sulit untuk memecahkan masalah _image distroless_ dengan
menggunakan `kubectl exec` saja.
Saat menggunakan kontainer sementara, akan sangat membantu untuk mengaktifkan
[_process namespace sharing_](/docs/tasks/configure-pod-container/share-process-namespace/)
sehingga kamu dapat melihat proses pada kontainer lain.
### Contoh
{{< note >}}
Contoh-contoh pada bagian ini membutuhkan `EphemeralContainers` [feature
gate](/docs/reference/command-line-tools-reference/feature-gates/) untuk
diaktifkan, dan membutuhkan Kubernetes klien dan server versi v1.16 atau
yang lebih baru.
{{< /note >}}
Contoh-contoh pada bagian ini menunjukkan bagaimana kontainer sementara muncul
dalam API. Kamu biasanya dapat menggunakan plugin `kubectl` untuk mengatasi
masalah untuk mengotomatiskan langkah-langkah ini.
Kontainer sementara dibuat menggunakan _subresource_ `ephemeralcontainers`
Pod, yang dapat didemonstrasikan menggunakan `kubectl --raw`. Pertama-tama
deskripsikan kontainer sementara untuk ditambahkan dalam daftar
`EphemeralContainers`:
```json
{
"apiVersion": "v1",
"kind": "EphemeralContainers",
"metadata": {
"name": "example-pod"
},
"ephemeralContainers": [{
"command": [
"sh"
],
"image": "busybox",
"imagePullPolicy": "IfNotPresent",
"name": "debugger",
"stdin": true,
"tty": true,
"terminationMessagePolicy": "File"
}]
}
```
Untuk memperbarui kontainer yang sudah berjalan dalam `example-pod`:
```shell
kubectl replace --raw /api/v1/namespaces/default/pods/example-pod/ephemeralcontainers -f ec.json
```
Ini akan menampilkan daftar baru dari seluruh kontainer sementara:
```json
{
"kind":"EphemeralContainers",
"apiVersion":"v1",
"metadata":{
"name":"example-pod",
"namespace":"default",
"selfLink":"/api/v1/namespaces/default/pods/example-pod/ephemeralcontainers",
"uid":"a14a6d9b-62f2-4119-9d8e-e2ed6bc3a47c",
"resourceVersion":"15886",
"creationTimestamp":"2019-08-29T06:41:42Z"
},
"ephemeralContainers":[
{
"name":"debugger",
"image":"busybox",
"command":[
"sh"
],
"resources":{
},
"terminationMessagePolicy":"File",
"imagePullPolicy":"IfNotPresent",
"stdin":true,
"tty":true
}
]
}
```
Kamu dapat melihat kondisi kontainer sementara yang baru dibuat dengan
menggunakan `kubectl describe`:
```shell
kubectl describe pod example-pod
```
```
...
Ephemeral Containers:
debugger:
Container ID: docker://cf81908f149e7e9213d3c3644eda55c72efaff67652a2685c1146f0ce151e80f
Image: busybox
Image ID: docker-pullable://busybox@sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
Port: <none>
Host Port: <none>
Command:
sh
State: Running
Started: Thu, 29 Aug 2019 06:42:21 +0000
Ready: False
Restart Count: 0
Environment: <none>
Mounts: <none>
...
```
Kamu dapat mengakses kontainer sementara yang baru menggunakan
`kubectl attach`:
```shell
kubectl attach -it example-pod -c debugger
```
Jika proses berbagi _namespace_ diaktifkan, kamu dapat melihat proses dari semua
kontainer dalam Pod tersebut. Misalnya, setelah mengakses, kamu jalankan
`ps` di kontainer _debugger_:
```shell
# Jalankan ini pada _shell_ dalam _debugger_ dari kontainer sementara
ps auxww
```
Hasilnya akan seperti ini:
```
PID USER TIME COMMAND
1 root 0:00 /pause
6 root 0:00 nginx: master process nginx -g daemon off;
11 101 0:00 nginx: worker process
12 101 0:00 nginx: worker process
13 101 0:00 nginx: worker process
14 101 0:00 nginx: worker process
15 101 0:00 nginx: worker process
16 101 0:00 nginx: worker process
17 101 0:00 nginx: worker process
18 101 0:00 nginx: worker process
19 root 0:00 /pause
24 root 0:00 sh
29 root 0:00 ps auxww
```
{{% /capture %}}