-
Notifications
You must be signed in to change notification settings - Fork 14.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #22344 from wahyuoi/id/static-pod
ID translation for static pod
- Loading branch information
Showing
1 changed file
with
243 additions
and
0 deletions.
There are no files selected for viewing
243 changes: 243 additions & 0 deletions
243
content/id/docs/tasks/configure-pod-container/static-pod.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,243 @@ | ||
--- | ||
title: Membuat Pod Statis | ||
weight: 170 | ||
content_type: task | ||
--- | ||
|
||
<!-- overview --> | ||
|
||
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, | ||
{{< 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. | ||
|
||
<!-- steps --> | ||
|
||
## 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: <direktori>` 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 <<EOF >/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 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/" | ||
``` | ||
atau tambahkan _field_ `staticPodPath: <direktori>` 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-url=<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. | ||
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=<url-manifes>`. 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=<url-manifes>" | ||
``` | ||
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 | ||
``` | ||
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 Pod _mirror_ tersebut 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 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 Pod _mirror_ tersebut 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 bahwa Pod tersebut 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 | ||
``` |