From 2b04d958192d07e7bba3e65cd71332cfe13fc729 Mon Sep 17 00:00:00 2001 From: Gede Wahyu Date: Sat, 4 Jul 2020 23:14:05 +0700 Subject: [PATCH 1/2] ID translation for static pod --- .../configure-pod-container/static-pod.md | 244 ++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 content/id/docs/tasks/configure-pod-container/static-pod.md diff --git a/content/id/docs/tasks/configure-pod-container/static-pod.md b/content/id/docs/tasks/configure-pod-container/static-pod.md new file mode 100644 index 00000000000..082c2e6cbbd --- /dev/null +++ b/content/id/docs/tasks/configure-pod-container/static-pod.md @@ -0,0 +1,244 @@ +--- +title: Membuat Pod Statis +weight: 170 +content_type: task +--- + + + +Pod statis dikelola langsung oleh kubelet daemon pada suatu Node spesifik, +tanpa {{< glossary_tooltip text="API server" term_id="kube-apiserver" >}} +mengobservasi mereka. +Tidak seperti Pod yang dikelola oleh _control plane_ (contohnya, +{{< glossary_tooltip text="Deployment" term_id="deployment" >}}); +kubelet akan memantau setiap Pod statis (dan menjalankan ulang jika +Pod mengalami kegagalan). + +Pod statis selalu terikat pada satu {{< glossary_tooltip term_id="kubelet" >}} +di dalam Node spesifik. + +Kubelet secara otomatis akan mengulang untuk membuat sebuah +{{< glossary_tooltip text="Pod mirror" term_id="mirror-pod" >}} +pada server API Kubernetes untuk setiap Pod statis. +Ini berarti Pod yang berjalan pada Node akan terlihat oleh API server, +namun tidak dapat mengontrol dari sana. + +{{< note >}} +Jika kamu menjalankan klaster Kubernetes dan menggunakan Pod statis +untuk menjalankan Pod pada setiap Node, kamu kemungkinan harus menggunakan +sebuah {{< glossary_tooltip text="DaemonSet" term_id="daemonset" >}}. +{{< /note >}} + +## {{% heading "prerequisites" %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +Laman ini mengasumsikan kamu menggunakan {{< glossary_tooltip term_id="docker" >}} +untuk menjalankan Pod, dan Node kamu berjalan menggunakan sistem operasi Fedora. +Instruksi untuk distribusi lain atau instalasi Kubernetes mungkin berbeda. + + + +## Membuat sebuah Pod statis + +Kamu dapat mengatur Pod statis dengan menggunakan sebuah +[berkas konfigurasi pada _file system_](#konfigurasi-melalui-berkas-sistem) +atau sebuah [berkas konfigurasi ditempatkan pada web](#konfigurasi-melalui-http). + +### Manifes Pod statis pada berkas sistem (_file system_) {#konfigurasi-melalui-berkas-sistem} + +Manifes adalah standar definisi Pod dalam format JSON atau YAML pada suatu direktori. +Gunakan _field_ `staticPodPath: ` pada +[berkas konfigurasi kubelet](/docs/tasks/administer-cluster/kubelet-config-file), +yang akan membaca direktori +secara berkala dan membuat atau menghapus Pod statis sesuai dengan berkas YAML/JSON +yang bertambah atau berkurang disana. + +Catatan bahwa kubelet akan mengabaikan berkas yang diawali dengan titik (_dot_) +ketika memindai suatu direktori. + +Sebagai contoh, ini cara untuk memulai server web sederhana sebagai Pod statis: + +1. Pilih Node yang kamu pilih untuk menjalankan Pod statis. Dalam contoh ini adalah `my-node1`. + + ```shell + ssh my-node1 + ``` + +2. Pilih sebuah direktori, katakan `/etc/kubelet.d` dan letakkan berkas definisi Pod untuk web server disana, contohnya `/etc/kubelet.d/static-web.yaml`: + + ```shell + # Jalankan perintah ini pada Node tempat kubelet sedang berjalan + mkdir /etc/kubelet.d/ + cat </etc/kubelet.d/static-web.yaml + apiVersion: v1 + kind: Pod + metadata: + name: static-web + labels: + role: myrole + spec: + containers: + - name: web + image: nginx + ports: + - name: web + containerPort: 80 + protocol: TCP + EOF + ``` + +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: + + ``` + KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/" + ``` + atau tambahkan _field_ `staticPodPath: ` pada [berkas konfigurasi kubelet](/docs/tasks/administer-cluster/kubelet-config-file). + +4. Jalankan ulang kubelet. Pada Fedora, kamu dapat menjalankan: + + ```shell + # Jalankan perintah berikut pada Node tempat kubelet berjalan + systemctl restart kubelet + ``` + +### Manifes Pod statis pada Web {#konfigurasi-melalui-http} + +Berkas yang ditentukan pada argumen `--manifest-utl=` akan diunduh oleh kubelet secara berkala +dan kubelet akan menginterpretasikannya sebagai sebuah berkas JSON/YAML yang berisikan definisi Pod. +Mirip dengan cara kerja [manifes pada filesystem](##konfigurasi-melalui-berkas-sistem), +kubelet akan mengambil manifes berdasarkan jadwal. Jika ada perubahan pada daftar +Pod statis, maka kubelet akan menerapkannya. + +Untuk menggunakan cara ini: + +1. Buat sebuah berkas YAML dan simpan pada suatu web server sehingga kamu pada memberikan URL tersebut pada kubelet. + + ```yaml + apiVersion: v1 + kind: Pod + metadata: + name: static-web + labels: + role: myrole + spec: + containers: + - name: web + image: nginx + ports: + - name: web + containerPort: 80 + protocol: TCP + ``` + +2. Atur kubelet pada suatu Node untuk menggunakan manifes pada web ini dengan menjalankan menggunakan argumen `--manifest-url=`. Pada Fedora, ubah pada `/etc/kubernetes/kubelet` untuk menambahkan baris ini: + + ``` + KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --manifest-url=" + ``` + +3. Jalankan ulang kubelet. Pada Fedora, kamu dapat menjalankan: + + ```shell + # Jalankan perintah ini pada Node tempat kubelet berjalan + systemctl restart kubelet + ``` + +## Mengobservasi perilaku Pod statis + +Ketika kubelet berjalan, secara otomatis akan menjalankan semua Pod statis yang terdefinisi. +Ketika kamu mendefinisikan Pod statis dan menjalankan ulang kubelet, Pod statis yang baru +akan dijalankan. + +Kamu dapat melihat Container yang berjalan (termasuk Pod statis) dengan menjalankan (pada Node): +```shell +# Jalankan perintah ini pada Node tempat kubelet berjalan +docker ps +``` + +Hasilnya akan seperti berikut: + +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +f6d05272b57e nginx:latest "nginx" 8 minutes ago Up 8 minutes k8s_web.6f802af4_static-web-fk-node1_default_67e24ed9466ba55986d120c867395f3c_378e5f3c +``` + +Kamu dapat melihat mirror Pod pada API server: + +```shell +kubectl get pods +``` +``` +NAME READY STATUS RESTARTS AGE +static-web-my-node1 1/1 Running 0 2m +``` + +{{< note >}} +Pastikan kubelet memiliki izin untuk membuat Pod mirror pada server API. Jika tidak, +pembuatannya akan ditolak oleh API server. Lihat +[PodSecurityPolicy](/id/docs/concepts/policy/pod-security-policy/). +{{< /note >}} + + +{{< glossary_tooltip term_id="label" text="Label" >}} dari Pod statis +akan dibuat juga pada mirror Pod. Kamu dapat menggunakan label tersebut +seperti biasa menggunakan {{< glossary_tooltip term_id="selector" text="selectors" >}}, +atau yang lainnya. + +Kamu dapat mencoba untuk menggunakan kubelet untuk menghapus mirror Pod pada API server, +namun kubelet tidak akan menghapus Pod statis: + +```shell +kubectl delete pod static-web-my-node1 +``` +``` +pod "static-web-my-node1" deleted +``` +Kamu akan melihat Pod tetap berjalan: +```shell +kubectl get pods +``` +``` +NAME READY STATUS RESTARTS AGE +static-web-my-node1 1/1 Running 0 12s +``` + +Kembali ke Node tempat kubelet berjalan, kamu dapat mencoba menghentikan Container +Docker secara manual. +Kamu akan melihat, setelah beberapa saat, kubelet akan mengetahui dan akan menjalankan ulang Pod +secara otomatis: + +```shell +# Jalankan perintah ini pada Node tempat kubelet berjalan +docker stop f6d05272b57e # ganti dengan ID pada Container-mu +sleep 20 +docker ps +``` +``` +CONTAINER ID IMAGE COMMAND CREATED ... +5b920cbaf8b1 nginx:latest "nginx -g 'daemon of 2 seconds ago ... +``` + +## Penambahan dan pengurangan secara dinamis pada Pod statis + +Direktori konfigurasi (`/etc/kubelet.d` pada contoh kita) akan dipindai secara berkala oleh kubelet +untuk melakukan perubahan dan penambahan/pengurangan +Pod sesuai dengan penambahan/pengurangan berkas pada direktori tersebut. + +```shell +# Ini mengasumsikan kamu menggunakan konfigurasi Pod statis pada filesystem +# Jalankan perintah ini pada Node tempat kubelet berjalan +# +mv /etc/kubelet.d/static-web.yaml /tmp +sleep 20 +docker ps +# Kamu mendapatkan bahwa tidak ada Container nginx yang berjalan +mv /tmp/static-web.yaml /etc/kubelet.d/ +sleep 20 +docker ps +``` +``` +CONTAINER ID IMAGE COMMAND CREATED ... +e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago +``` + From d1a1db57f3ab136dab21c7fa9711730f2b59e4c6 Mon Sep 17 00:00:00 2001 From: Gede Wahyu Adi Pramana Date: Fri, 7 Aug 2020 15:20:43 +0700 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Yudi A Phanama <11147376+phanama@users.noreply.github.com> Co-authored-by: Tim Bannister --- .../configure-pod-container/static-pod.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/content/id/docs/tasks/configure-pod-container/static-pod.md b/content/id/docs/tasks/configure-pod-container/static-pod.md index 082c2e6cbbd..6088b458db8 100644 --- a/content/id/docs/tasks/configure-pod-container/static-pod.md +++ b/content/id/docs/tasks/configure-pod-container/static-pod.md @@ -6,7 +6,7 @@ content_type: task -Pod statis dikelola langsung oleh kubelet daemon pada suatu Node spesifik, +Pod statis dikelola langsung oleh _daemon_ kubelet pada suatu Node spesifik, tanpa {{< glossary_tooltip text="API server" term_id="kube-apiserver" >}} mengobservasi mereka. Tidak seperti Pod yang dikelola oleh _control plane_ (contohnya, @@ -88,7 +88,7 @@ Sebagai contoh, ini cara untuk memulai server web sederhana sebagai Pod statis: EOF ``` -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: +3. Atur kubelet pada Node untuk menggunakan direktori ini dengan menjalankannya menggunakan argumen `--pod-manifest-path=/etc/kubelet.d/`. Pada Fedora, ubah berkas `/etc/kubernetes/kubelet` dengan menambahkan baris berikut: ``` KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/" @@ -104,9 +104,9 @@ Sebagai contoh, ini cara untuk memulai server web sederhana sebagai Pod statis: ### Manifes Pod statis pada Web {#konfigurasi-melalui-http} -Berkas yang ditentukan pada argumen `--manifest-utl=` akan diunduh oleh kubelet secara berkala -dan kubelet akan menginterpretasikannya sebagai sebuah berkas JSON/YAML yang berisikan definisi Pod. -Mirip dengan cara kerja [manifes pada filesystem](##konfigurasi-melalui-berkas-sistem), +Berkas yang ditentukan pada argumen `--manifest-url=` akan diunduh oleh kubelet secara berkala +dan kubelet akan menginterpretasinya sebagai sebuah berkas JSON/YAML yang berisikan definisi Pod. +Mirip dengan cara kerja [manifes pada _filesystem_](##konfigurasi-melalui-berkas-sistem), kubelet akan mengambil manifes berdasarkan jadwal. Jika ada perubahan pada daftar Pod statis, maka kubelet akan menerapkannya. @@ -156,14 +156,14 @@ Kamu dapat melihat Container yang berjalan (termasuk Pod statis) dengan menjalan docker ps ``` -Hasilnya akan seperti berikut: +Keluarannya kira-kira seperti berikut: ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f6d05272b57e nginx:latest "nginx" 8 minutes ago Up 8 minutes k8s_web.6f802af4_static-web-fk-node1_default_67e24ed9466ba55986d120c867395f3c_378e5f3c ``` -Kamu dapat melihat mirror Pod pada API server: +Kamu dapat melihat Pod _mirror_ tersebut pada API server: ```shell kubectl get pods @@ -174,18 +174,18 @@ static-web-my-node1 1/1 Running 0 2m ``` {{< note >}} -Pastikan kubelet memiliki izin untuk membuat Pod mirror pada server API. Jika tidak, +Pastikan kubelet memiliki izin untuk membuat Pod _mirror_ pada server API. Jika tidak, pembuatannya akan ditolak oleh API server. Lihat [PodSecurityPolicy](/id/docs/concepts/policy/pod-security-policy/). {{< /note >}} {{< glossary_tooltip term_id="label" text="Label" >}} dari Pod statis -akan dibuat juga pada mirror Pod. Kamu dapat menggunakan label tersebut -seperti biasa menggunakan {{< glossary_tooltip term_id="selector" text="selectors" >}}, +akan dibuat juga pada Pod _mirror_. Kamu dapat menggunakan label tersebut +seperti biasa menggunakan {{< glossary_tooltip term_id="selector" text="selector-selector" >}}, atau yang lainnya. -Kamu dapat mencoba untuk menggunakan kubelet untuk menghapus mirror Pod pada API server, +Kamu dapat mencoba untuk menggunakan kubelet untuk menghapus Pod _mirror_ tersebut pada API server, namun kubelet tidak akan menghapus Pod statis: ```shell @@ -194,7 +194,7 @@ kubectl delete pod static-web-my-node1 ``` pod "static-web-my-node1" deleted ``` -Kamu akan melihat Pod tetap berjalan: +Kamu akan melihat bahwa Pod tersebut tetap berjalan: ```shell kubectl get pods ``` @@ -226,7 +226,7 @@ untuk melakukan perubahan dan penambahan/pengurangan Pod sesuai dengan penambahan/pengurangan berkas pada direktori tersebut. ```shell -# Ini mengasumsikan kamu menggunakan konfigurasi Pod statis pada filesystem +# Ini mengasumsikan kamu menggunakan konfigurasi Pod statis pada _filesystem_ # Jalankan perintah ini pada Node tempat kubelet berjalan # mv /etc/kubelet.d/static-web.yaml /tmp @@ -241,4 +241,3 @@ docker ps CONTAINER ID IMAGE COMMAND CREATED ... e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago ``` -