|
| 1 | +--- |
| 2 | +title: Membuat Pod Statis |
| 3 | +weight: 170 |
| 4 | +content_type: task |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | + |
| 9 | +Pod statis dikelola langsung oleh kubelet daemon pada suatu Node spesifik, |
| 10 | +tanpa {{< glossary_tooltip text="API server" term_id="kube-apiserver" >}} |
| 11 | +mengobservasi mereka. |
| 12 | +Tidak seperti Pod yang dikelola oleh _control plane_ (contohnya, |
| 13 | +{{< glossary_tooltip text="Deployment" term_id="deployment" >}}); |
| 14 | +kubelet akan memantau setiap Pod statis (dan menjalankan ulang jika |
| 15 | +Pod mengalami kegagalan). |
| 16 | + |
| 17 | +Pod statis selalu terikat pada satu {{< glossary_tooltip term_id="kubelet" >}} |
| 18 | +di dalam Node spesifik. |
| 19 | + |
| 20 | +Kubelet secara otomatis akan mengulang untuk membuat sebuah |
| 21 | +{{< glossary_tooltip text="Pod mirror" term_id="mirror-pod" >}} |
| 22 | +pada server API Kubernetes untuk setiap Pod statis. |
| 23 | +Ini berarti Pod yang berjalan pada Node akan terlihat oleh API server, |
| 24 | +namun tidak dapat mengontrol dari sana. |
| 25 | + |
| 26 | +{{< note >}} |
| 27 | +Jika kamu menjalankan klaster Kubernetes dan menggunakan Pod statis |
| 28 | +untuk menjalankan Pod pada setiap Node, kamu kemungkinan harus menggunakan |
| 29 | +sebuah {{< glossary_tooltip text="DaemonSet" term_id="daemonset" >}}. |
| 30 | +{{< /note >}} |
| 31 | + |
| 32 | +## {{% heading "prerequisites" %}} |
| 33 | + |
| 34 | +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} |
| 35 | + |
| 36 | +Laman ini mengasumsikan kamu menggunakan {{< glossary_tooltip term_id="docker" >}} |
| 37 | +untuk menjalankan Pod, dan Node kamu berjalan menggunakan sistem operasi Fedora. |
| 38 | +Instruksi untuk distribusi lain atau instalasi Kubernetes mungkin berbeda. |
| 39 | + |
| 40 | +<!-- steps --> |
| 41 | + |
| 42 | +## Membuat sebuah Pod statis |
| 43 | + |
| 44 | +Kamu dapat mengatur Pod statis dengan menggunakan sebuah |
| 45 | +[berkas konfigurasi pada _file system_](#konfigurasi-melalui-berkas-sistem) |
| 46 | +atau sebuah [berkas konfigurasi ditempatkan pada web](#konfigurasi-melalui-http). |
| 47 | + |
| 48 | +### Manifes Pod statis pada berkas sistem (_file system_) {#konfigurasi-melalui-berkas-sistem} |
| 49 | + |
| 50 | +Manifes adalah standar definisi Pod dalam format JSON atau YAML pada suatu direktori. |
| 51 | +Gunakan _field_ `staticPodPath: <direktori>` pada |
| 52 | +[berkas konfigurasi kubelet](/docs/tasks/administer-cluster/kubelet-config-file), |
| 53 | +yang akan membaca direktori |
| 54 | +secara berkala dan membuat atau menghapus Pod statis sesuai dengan berkas YAML/JSON |
| 55 | +yang bertambah atau berkurang disana. |
| 56 | + |
| 57 | +Catatan bahwa kubelet akan mengabaikan berkas yang diawali dengan titik (_dot_) |
| 58 | +ketika memindai suatu direktori. |
| 59 | + |
| 60 | +Sebagai contoh, ini cara untuk memulai server web sederhana sebagai Pod statis: |
| 61 | + |
| 62 | +1. Pilih Node yang kamu pilih untuk menjalankan Pod statis. Dalam contoh ini adalah `my-node1`. |
| 63 | + |
| 64 | + ```shell |
| 65 | + ssh my-node1 |
| 66 | + ``` |
| 67 | + |
| 68 | +2. Pilih sebuah direktori, katakan `/etc/kubelet.d` dan letakkan berkas definisi Pod untuk web server disana, contohnya `/etc/kubelet.d/static-web.yaml`: |
| 69 | + |
| 70 | + ```shell |
| 71 | + # Jalankan perintah ini pada Node tempat kubelet sedang berjalan |
| 72 | + mkdir /etc/kubelet.d/ |
| 73 | + cat <<EOF >/etc/kubelet.d/static-web.yaml |
| 74 | + apiVersion: v1 |
| 75 | + kind: Pod |
| 76 | + metadata: |
| 77 | + name: static-web |
| 78 | + labels: |
| 79 | + role: myrole |
| 80 | + spec: |
| 81 | + containers: |
| 82 | + - name: web |
| 83 | + image: nginx |
| 84 | + ports: |
| 85 | + - name: web |
| 86 | + containerPort: 80 |
| 87 | + protocol: TCP |
| 88 | + EOF |
| 89 | + ``` |
| 90 | +
|
| 91 | +3. Atur kubelet pada Node untuk menggunakan direktori ini dengan menjalankan menggunakan argumen `--pod-manifest-path=/etc/kubelet.d/`. Untuk Fedora ubah `/etc/kubernetes/kubelet` untuk menambahkan baris berikut: |
| 92 | +
|
| 93 | + ``` |
| 94 | + KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/" |
| 95 | + ``` |
| 96 | + atau tambahkan _field_ `staticPodPath: <direktori>` pada [berkas konfigurasi kubelet](/docs/tasks/administer-cluster/kubelet-config-file). |
| 97 | +
|
| 98 | +4. Jalankan ulang kubelet. Pada Fedora, kamu dapat menjalankan: |
| 99 | +
|
| 100 | + ```shell |
| 101 | + # Jalankan perintah berikut pada Node tempat kubelet berjalan |
| 102 | + systemctl restart kubelet |
| 103 | + ``` |
| 104 | +
|
| 105 | +### Manifes Pod statis pada Web {#konfigurasi-melalui-http} |
| 106 | +
|
| 107 | +Berkas yang ditentukan pada argumen `--manifest-utl=<URL>` akan diunduh oleh kubelet secara berkala |
| 108 | +dan kubelet akan menginterpretasikannya sebagai sebuah berkas JSON/YAML yang berisikan definisi Pod. |
| 109 | +Mirip dengan cara kerja [manifes pada filesystem](##konfigurasi-melalui-berkas-sistem), |
| 110 | +kubelet akan mengambil manifes berdasarkan jadwal. Jika ada perubahan pada daftar |
| 111 | +Pod statis, maka kubelet akan menerapkannya. |
| 112 | +
|
| 113 | +Untuk menggunakan cara ini: |
| 114 | +
|
| 115 | +1. Buat sebuah berkas YAML dan simpan pada suatu web server sehingga kamu pada memberikan URL tersebut pada kubelet. |
| 116 | +
|
| 117 | + ```yaml |
| 118 | + apiVersion: v1 |
| 119 | + kind: Pod |
| 120 | + metadata: |
| 121 | + name: static-web |
| 122 | + labels: |
| 123 | + role: myrole |
| 124 | + spec: |
| 125 | + containers: |
| 126 | + - name: web |
| 127 | + image: nginx |
| 128 | + ports: |
| 129 | + - name: web |
| 130 | + containerPort: 80 |
| 131 | + protocol: TCP |
| 132 | + ``` |
| 133 | +
|
| 134 | +2. Atur kubelet pada suatu Node untuk menggunakan manifes pada web ini dengan menjalankan menggunakan argumen `--manifest-url=<url-manifes>`. Pada Fedora, ubah pada `/etc/kubernetes/kubelet` untuk menambahkan baris ini: |
| 135 | +
|
| 136 | + ``` |
| 137 | + KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --manifest-url=<url-manifes>" |
| 138 | + ``` |
| 139 | +
|
| 140 | +3. Jalankan ulang kubelet. Pada Fedora, kamu dapat menjalankan: |
| 141 | +
|
| 142 | + ```shell |
| 143 | + # Jalankan perintah ini pada Node tempat kubelet berjalan |
| 144 | + systemctl restart kubelet |
| 145 | + ``` |
| 146 | +
|
| 147 | +## Mengobservasi perilaku Pod statis |
| 148 | +
|
| 149 | +Ketika kubelet berjalan, secara otomatis akan menjalankan semua Pod statis yang terdefinisi. |
| 150 | +Ketika kamu mendefinisikan Pod statis dan menjalankan ulang kubelet, Pod statis yang baru |
| 151 | +akan dijalankan. |
| 152 | +
|
| 153 | +Kamu dapat melihat Container yang berjalan (termasuk Pod statis) dengan menjalankan (pada Node): |
| 154 | +```shell |
| 155 | +# Jalankan perintah ini pada Node tempat kubelet berjalan |
| 156 | +docker ps |
| 157 | +``` |
| 158 | +
|
| 159 | +Hasilnya akan seperti berikut: |
| 160 | +
|
| 161 | +``` |
| 162 | +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| 163 | +f6d05272b57e nginx:latest "nginx" 8 minutes ago Up 8 minutes k8s_web.6f802af4_static-web-fk-node1_default_67e24ed9466ba55986d120c867395f3c_378e5f3c |
| 164 | +``` |
| 165 | +
|
| 166 | +Kamu dapat melihat mirror Pod pada API server: |
| 167 | +
|
| 168 | +```shell |
| 169 | +kubectl get pods |
| 170 | +``` |
| 171 | +``` |
| 172 | +NAME READY STATUS RESTARTS AGE |
| 173 | +static-web-my-node1 1/1 Running 0 2m |
| 174 | +``` |
| 175 | +
|
| 176 | +{{< note >}} |
| 177 | +Pastikan kubelet memiliki izin untuk membuat Pod mirror pada server API. Jika tidak, |
| 178 | +pembuatannya akan ditolak oleh API server. Lihat |
| 179 | +[PodSecurityPolicy](/id/docs/concepts/policy/pod-security-policy/). |
| 180 | +{{< /note >}} |
| 181 | +
|
| 182 | +
|
| 183 | +{{< glossary_tooltip term_id="label" text="Label" >}} dari Pod statis |
| 184 | +akan dibuat juga pada mirror Pod. Kamu dapat menggunakan label tersebut |
| 185 | +seperti biasa menggunakan {{< glossary_tooltip term_id="selector" text="selectors" >}}, |
| 186 | +atau yang lainnya. |
| 187 | +
|
| 188 | +Kamu dapat mencoba untuk menggunakan kubelet untuk menghapus mirror Pod pada API server, |
| 189 | +namun kubelet tidak akan menghapus Pod statis: |
| 190 | +
|
| 191 | +```shell |
| 192 | +kubectl delete pod static-web-my-node1 |
| 193 | +``` |
| 194 | +``` |
| 195 | +pod "static-web-my-node1" deleted |
| 196 | +``` |
| 197 | +Kamu akan melihat Pod tetap berjalan: |
| 198 | +```shell |
| 199 | +kubectl get pods |
| 200 | +``` |
| 201 | +``` |
| 202 | +NAME READY STATUS RESTARTS AGE |
| 203 | +static-web-my-node1 1/1 Running 0 12s |
| 204 | +``` |
| 205 | +
|
| 206 | +Kembali ke Node tempat kubelet berjalan, kamu dapat mencoba menghentikan Container |
| 207 | +Docker secara manual. |
| 208 | +Kamu akan melihat, setelah beberapa saat, kubelet akan mengetahui dan akan menjalankan ulang Pod |
| 209 | +secara otomatis: |
| 210 | +
|
| 211 | +```shell |
| 212 | +# Jalankan perintah ini pada Node tempat kubelet berjalan |
| 213 | +docker stop f6d05272b57e # ganti dengan ID pada Container-mu |
| 214 | +sleep 20 |
| 215 | +docker ps |
| 216 | +``` |
| 217 | +``` |
| 218 | +CONTAINER ID IMAGE COMMAND CREATED ... |
| 219 | +5b920cbaf8b1 nginx:latest "nginx -g 'daemon of 2 seconds ago ... |
| 220 | +``` |
| 221 | +
|
| 222 | +## Penambahan dan pengurangan secara dinamis pada Pod statis |
| 223 | +
|
| 224 | +Direktori konfigurasi (`/etc/kubelet.d` pada contoh kita) akan dipindai secara berkala oleh kubelet |
| 225 | +untuk melakukan perubahan dan penambahan/pengurangan |
| 226 | +Pod sesuai dengan penambahan/pengurangan berkas pada direktori tersebut. |
| 227 | +
|
| 228 | +```shell |
| 229 | +# Ini mengasumsikan kamu menggunakan konfigurasi Pod statis pada filesystem |
| 230 | +# Jalankan perintah ini pada Node tempat kubelet berjalan |
| 231 | +# |
| 232 | +mv /etc/kubelet.d/static-web.yaml /tmp |
| 233 | +sleep 20 |
| 234 | +docker ps |
| 235 | +# Kamu mendapatkan bahwa tidak ada Container nginx yang berjalan |
| 236 | +mv /tmp/static-web.yaml /etc/kubelet.d/ |
| 237 | +sleep 20 |
| 238 | +docker ps |
| 239 | +``` |
| 240 | +``` |
| 241 | +CONTAINER ID IMAGE COMMAND CREATED ... |
| 242 | +e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago |
| 243 | +``` |
| 244 | +
|
0 commit comments