|
| 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