Translating Ephemeral Container to ID Localization.
Fix glossary warning and note. Fixed formatting and Typos.pull/19815/head
parent
fca1d58ce0
commit
b0175b6323
|
@ -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 %}}
|
Loading…
Reference in New Issue