Skip to content

Commit 21b4c85

Browse files
authored
Merge pull request #22847 from ariscahyadi/id-local-admin-cluster-sysctl
ID localization for administer cluster - sysctl
2 parents f8a2732 + 83c4b60 commit 21b4c85

File tree

1 file changed

+210
-0
lines changed

1 file changed

+210
-0
lines changed
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
---
2+
title: Menggunakan sysctl dalam Sebuah Klaster Kubernetes
3+
content_type: task
4+
---
5+
6+
<!-- overview -->
7+
{{< feature-state for_k8s_version="v1.12" state="beta" >}}
8+
9+
Dokumen ini menjelaskan tentang cara mengonfigurasi dan menggunakan parameter kernel dalam sebuah
10+
klaster Kubernetes dengan menggunakan antarmuka {{< glossary_tooltip term_id="sysctl" >}}.
11+
12+
13+
14+
## {{% heading "prerequisites" %}}
15+
16+
17+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
18+
19+
20+
21+
<!-- steps -->
22+
23+
## Melihat Daftar Semua Parameter Sysctl
24+
25+
Dalam Linux, antarmuka sysctl memungkinkan administrator untuk memodifikasi kernel
26+
parameter pada _runtime_. Parameter tersedia melalui sistem file virtual dari proses `/proc/sys/`.
27+
Parameter mencakup berbagai subsistem seperti:
28+
29+
- kernel (dengan prefiks umum: `kernel.`)
30+
- networking (dengan prefiks umum: `net.`)
31+
- virtual memory (dengan prefiks umum: `vm.`)
32+
- MDADM (dengan prefiks umum: `dev.`)
33+
- subsistem yang lainnya dideskripsikan pada [dokumentasi Kernel](https://www.kernel.org/doc/Documentation/sysctl/README).
34+
35+
Untuk mendapatkan daftar semua parameter, kamu bisa menjalankan perintah:
36+
37+
```shell
38+
sudo sysctl -a
39+
```
40+
41+
## Mengaktifkan Sysctl _Unsafe_
42+
43+
Sysctl dikelompokkan menjadi sysctl _safe_ dan sysctl _unsafe_. Sebagai tambahan untuk
44+
pengaturan _Namespace_ yang benar, sebuah sysctl _safe_ harus diisolasikan dengan benar diantara Pod dalam Node yang sama.
45+
Hal ini berarti mengatur sysctl _safe_ dalam satu Pod:
46+
47+
- tidak boleh mempengaruhi Pod lain dalam Node
48+
- tidak boleh membahayakan kesehatan dari Node
49+
- tidak mengizinkan untuk mendapatkan sumber daya CPU atau memori di luar batas sumber daya dari sebuah Pod.
50+
51+
52+
Sejauh ini, sebagian besar sysctl yang diatur sebagai Namespace belum tentu dianggap sysctl _safe_.
53+
Sysctl berikut ini didukung dalam kelompok _safe_:
54+
55+
- `kernel.shm_rmid_forced`,
56+
- `net.ipv4.ip_local_port_range`,
57+
- `net.ipv4.tcp_syncookies`,
58+
- `net.ipv4.ping_group_range` (sejak Kubernetes 1.18).
59+
60+
{{< note >}}
61+
Contoh `net.ipv4.tcp_syncookies` bukan merupakan Namespace pada kernel Linux versi 4.4 atau lebih rendah.
62+
63+
Daftar ini akan terus dikembangkan dalam versi Kubernetes berikutnya ketika kubelet
64+
mendukung mekanisme isolasi yang lebih baik.
65+
66+
Semua sysctl _safe_ diaktifkan secara bawaan.
67+
68+
Semua sysctl _unsafe_ dinon-aktifkan secara bawaan dan harus diizinkan secara manual oleh
69+
administrator klaster untuk setiap Node. Pod dengan sysctl _unsafe_ yang dinon-aktifkan akan dijadwalkan,
70+
tetapi akan gagal untuk dijalankan.
71+
72+
Dengan mengingat peringatan di atas, administrator klaster dapat mengizinkan sysctl _unsafe_ tertentu
73+
untuk situasi yang sangat spesial seperti pada saat kinerja tinggi atau
74+
penyetelan aplikasi secara _real-time_. _Unsafe_ syctl diaktifkan Node demi Node melalui
75+
_flag_ pada kubelet; sebagai contoh:
76+
77+
```shell
78+
kubelet --allowed-unsafe-sysctls \
79+
'kernel.msg*,net.core.somaxconn' ...
80+
```
81+
82+
Untuk {{< glossary_tooltip term_id="minikube" >}}, ini dapat dilakukan melalui _flag_ `extra-config`:
83+
84+
```shell
85+
minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.core.somaxconn"...
86+
```
87+
88+
Hanya sysctl yang diatur sebagai Namespace dapat diaktifkan dengan cara ini.
89+
90+
## Mnegatur Sysctl untuk Pod
91+
92+
Sejumlah sysctl adalah diatur sebagai Namespace dalam Kernel Linux hari ini. Ini berarti
93+
mereka dapat diatur secara independen untuk setiap Pod dalam sebuah Node. Hanya sysctl dengan Namespace
94+
yang dapat dikonfigurasi melalui Pod securityContext dalam Kubernetes.
95+
96+
Sysctl berikut dikenal sebagai Namespace. Daftar ini dapat berubah
97+
pada versi kernel Linux yang akan datang.
98+
99+
- `kernel.shm*`,
100+
- `kernel.msg*`,
101+
- `kernel.sem`,
102+
- `fs.mqueue.*`,
103+
- Parameter dibawah `net.*` dapat diatur sebagai Namespace dari _container networking_
104+
Namun, ada beberapa perkecualian (seperti
105+
`net.netfilter.nf_conntrack_max` dan `net.netfilter.nf_conntrack_expect_max`
106+
yang dapat diatur dalam Namespace _container networking_ padahal bukan merupakan Namespace).
107+
108+
Sysctl tanpa Namespace disebut dengan sysctl _node-level_. Jika kamu perlu mengatur
109+
mereka, kamu harus secara manual mengonfigurasi mereka pada sistem operasi setiap Node, atau dengan
110+
menggunakan DaemonSet melalui Container yang berwenang.
111+
112+
Gunakan securityContext dari Pod untuk mengonfigurasi sysctl Namespace. securityContext
113+
berlaku untuk semua Container dalam Pod yang sama.
114+
115+
116+
Contoh ini menggunakan securityContext dari Pod untuk mengatur sebuah sysctl _safe_
117+
`kernel.shm_rmid_forced`, dan dua buah sysctl _unsafe_ `net.core.somaxconn` dan
118+
`kernel.msgmax`. Tidak ada perbedaan antara sysctl _safe_ dan sysctl _unsafe_ dalam
119+
spesifikasi tersebut.
120+
121+
{{< warning >}}
122+
Hanya modifikasi parameter sysctl setelah kamu memahami efeknya, untuk menghindari
123+
gangguan pada kestabilan sistem operasi kamu.
124+
{{< /warning >}}
125+
126+
```yaml
127+
apiVersion: v1
128+
kind: Pod
129+
metadata:
130+
name: sysctl-example
131+
spec:
132+
securityContext:
133+
sysctls:
134+
- name: kernel.shm_rmid_forced
135+
value: "0"
136+
- name: net.core.somaxconn
137+
value: "1024"
138+
- name: kernel.msgmax
139+
value: "65536"
140+
...
141+
```
142+
143+
144+
<!-- discussion -->
145+
146+
{{< warning >}}
147+
Karena sifat alami dari sysctl _unsafe_, penggunaan sysctl _unsafe_
148+
merupakan resiko kamu sendiri dan dapat menyebabkan masalah parah seperti perilaku yang salah
149+
pada Container, kekurangan sumber daya, atau kerusakan total dari Node.
150+
{{< /warning >}}
151+
152+
Merupakan sebuah praktik yang baik untuk mempertimbangkan Node dengan pengaturan sysctl khusus sebagai
153+
Node yang tercemar (_tainted_) dalam sebuah cluster, dan hanya menjadwalkan Pod yang membutuhkan pengaturan sysctl.
154+
Sangat disarankan untuk menggunakan Kubernetes [fitur _taints and toleration_](/docs/reference/generated/kubectl/kubectl-commands/#taint) untuk mengimplementasikannya.
155+
156+
Pod dengan sysctl _unsafe_ akan gagal diluncurkan pada sembarang Node yang belum
157+
mengaktifkan kedua sysctl _unsafe_ secara eksplisit. Seperti halnya sysctl _node-level_ sangat
158+
disarankan untuk menggunakan [fitur _taints and toleration_](/docs/reference/generated/kubectl/kubectl-commands/#taint) atau
159+
[pencemaran dalam Node](/docs/concepts/scheduling-eviction/taint-and-toleration/)
160+
untuk Pod dalam Node yang tepat.
161+
162+
## PodSecurityPolicy
163+
164+
Kamu selanjutnya dapat mengontrol sysctl mana saja yang dapat diatur dalam Pod dengan menentukan daftar
165+
sysctl atau pola (_pattern_) sysctl dalam `forbiddenSysctls` dan/atau _field_
166+
`allowedUnsafeSysctls` dari PodSecurityPolicy. Pola sysctl diakhiri
167+
dengan karakter `*`, seperti `kernel.*`. Karakter `*` saja akan mencakup
168+
semua sysctl.
169+
170+
Secara bawaan, semua sysctl _safe_ diizinkan.
171+
172+
Kedua `forbiddenSysctls` dan `allowedUnsafeSysctls` merupakan daftar dari nama sysctl
173+
atau pola sysctl yang polos (yang diakhiri dengan karakter `*`). Karakter `*` saja berarti sesuai dengan semua sysctl.
174+
175+
_Field_ `forbiddenSysctls` tidak memasukkan sysctl tertentu. Kamu dapat melarang
176+
kombinasi sysctl _safe_ dan sysctl _unsafe_ dalam daftar tersebut. Untuk melarang pengaturan
177+
sysctl, hanya gunakan `*` saja.
178+
179+
Jika kamu menyebutkan sysctl _unsafe_ pada _field_ `allowedUnsafeSysctls` dan
180+
tidak ada pada _field_ `forbiddenSysctls`, maka sysctl dapat digunakan pada Pod
181+
dengan menggunakan PodSecurityPolicy ini. Untuk mengizinkan semua sysctl _unsafe_ diatur dalam
182+
PodSecurityPolicy, gunakan karakter `*` saja.
183+
184+
Jangan mengonfigurasi kedua _field_ ini sampai tumpang tindih, dimana
185+
sysctl yang diberikan akan diperbolehkan dan dilarang sekaligus.
186+
187+
{{< warning >}}
188+
Jika kamu mengizinkan sysctl _unsafe_ melalui _field_ `allowUnsafeSysctls`
189+
pada PodSecurityPolicy, Pod apa pun yang menggunakan sysctl seperti itu akan gagal dimulai
190+
jika sysctl _unsafe_ tidak diperbolehkan dalam _flag_ kubelet `--allowed-unsafe-sysctls`
191+
pada Node tersebut.
192+
{{< /warning >}}
193+
194+
Ini merupakan contoh sysctl _unsafe_ yang diawali dengan `kernel.msg` yang diperbolehkan dan
195+
sysctl `kernel.shm_rmid_forced` yang dilarang.
196+
197+
```yaml
198+
apiVersion: policy/v1beta1
199+
kind: PodSecurityPolicy
200+
metadata:
201+
name: sysctl-psp
202+
spec:
203+
allowedUnsafeSysctls:
204+
- kernel.msg*
205+
forbiddenSysctls:
206+
- kernel.shm_rmid_forced
207+
...
208+
```
209+
210+

0 commit comments

Comments
 (0)