Skip to content

Commit 2b04d95

Browse files
committed
ID translation for static pod
1 parent 731e250 commit 2b04d95

File tree

1 file changed

+244
-0
lines changed

1 file changed

+244
-0
lines changed
Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
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

Comments
 (0)