From 83c4b6096679eac1d70910bf86c30c63b242ffaf Mon Sep 17 00:00:00 2001
From: Aris Cahyadi Risdianto <aris.risdianto@gmail.com>
Date: Fri, 31 Jul 2020 16:28:39 +0800
Subject: [PATCH] ID localization for administer cluster - sysctl

---
 .../administer-cluster/sysctl-cluster.md      | 210 ++++++++++++++++++
 1 file changed, 210 insertions(+)
 create mode 100644 content/id/docs/tasks/administer-cluster/sysctl-cluster.md

diff --git a/content/id/docs/tasks/administer-cluster/sysctl-cluster.md b/content/id/docs/tasks/administer-cluster/sysctl-cluster.md
new file mode 100644
index 0000000000..9adbb50a9f
--- /dev/null
+++ b/content/id/docs/tasks/administer-cluster/sysctl-cluster.md
@@ -0,0 +1,210 @@
+---
+title: Menggunakan sysctl dalam Sebuah Klaster Kubernetes
+content_type: task
+---
+
+<!-- overview -->
+{{< feature-state for_k8s_version="v1.12" state="beta" >}}
+
+Dokumen ini menjelaskan tentang cara mengonfigurasi dan menggunakan parameter kernel dalam sebuah
+klaster Kubernetes dengan menggunakan antarmuka {{< glossary_tooltip term_id="sysctl" >}}.
+
+
+
+## {{% heading "prerequisites" %}}
+
+
+{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+
+
+
+<!-- steps -->
+
+## Melihat Daftar Semua Parameter Sysctl
+
+Dalam Linux, antarmuka sysctl memungkinkan administrator untuk memodifikasi kernel
+parameter pada _runtime_. Parameter tersedia melalui sistem file virtual dari proses `/proc/sys/`.
+Parameter mencakup berbagai subsistem seperti:
+
+- kernel (dengan prefiks umum: `kernel.`)
+- networking (dengan prefiks umum: `net.`)
+- virtual memory (dengan prefiks umum: `vm.`)
+- MDADM (dengan prefiks umum: `dev.`)
+- subsistem yang lainnya dideskripsikan pada [dokumentasi Kernel](https://www.kernel.org/doc/Documentation/sysctl/README).
+
+Untuk mendapatkan daftar semua parameter, kamu bisa menjalankan perintah:
+
+```shell
+sudo sysctl -a
+```
+
+## Mengaktifkan Sysctl _Unsafe_
+
+Sysctl dikelompokkan menjadi sysctl _safe_ dan sysctl _unsafe_. Sebagai tambahan untuk
+pengaturan _Namespace_ yang benar, sebuah sysctl _safe_ harus diisolasikan dengan benar diantara Pod dalam Node yang sama.
+Hal ini berarti mengatur sysctl _safe_ dalam satu Pod:
+
+- tidak boleh mempengaruhi Pod lain dalam Node
+- tidak boleh membahayakan kesehatan dari Node
+- tidak mengizinkan untuk mendapatkan sumber daya CPU atau memori di luar batas sumber daya dari sebuah Pod.
+
+
+Sejauh ini, sebagian besar sysctl yang diatur sebagai Namespace belum tentu dianggap sysctl _safe_.
+Sysctl berikut ini didukung dalam kelompok _safe_:
+
+- `kernel.shm_rmid_forced`,
+- `net.ipv4.ip_local_port_range`,
+- `net.ipv4.tcp_syncookies`,
+- `net.ipv4.ping_group_range` (sejak Kubernetes 1.18).
+
+{{< note >}}
+Contoh `net.ipv4.tcp_syncookies` bukan merupakan Namespace pada kernel Linux versi 4.4 atau lebih rendah.
+
+Daftar ini akan terus dikembangkan dalam versi Kubernetes berikutnya ketika kubelet
+mendukung mekanisme isolasi yang lebih baik.
+
+Semua sysctl _safe_ diaktifkan secara bawaan.
+
+Semua sysctl _unsafe_ dinon-aktifkan secara bawaan dan harus diizinkan secara manual oleh
+administrator klaster untuk setiap Node. Pod dengan sysctl _unsafe_ yang dinon-aktifkan akan dijadwalkan, 
+tetapi akan gagal untuk dijalankan.
+
+Dengan mengingat peringatan di atas, administrator klaster dapat mengizinkan sysctl _unsafe_ tertentu
+untuk situasi yang sangat spesial seperti pada saat kinerja tinggi atau
+penyetelan aplikasi secara _real-time_. _Unsafe_ syctl diaktifkan Node demi Node melalui
+_flag_ pada kubelet; sebagai contoh:
+
+```shell
+kubelet --allowed-unsafe-sysctls \
+  'kernel.msg*,net.core.somaxconn' ...
+```
+
+Untuk {{< glossary_tooltip term_id="minikube" >}}, ini dapat dilakukan melalui _flag_ `extra-config`:
+
+```shell
+minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.core.somaxconn"...
+```
+
+Hanya sysctl yang diatur sebagai Namespace dapat diaktifkan dengan cara ini.
+
+## Mnegatur Sysctl untuk Pod
+
+Sejumlah sysctl adalah diatur sebagai Namespace dalam Kernel Linux hari ini. Ini berarti
+mereka dapat diatur secara independen untuk setiap Pod dalam sebuah Node. Hanya sysctl dengan Namespace
+yang dapat dikonfigurasi melalui Pod securityContext dalam Kubernetes.
+
+Sysctl berikut dikenal sebagai Namespace. Daftar ini dapat berubah
+pada versi kernel Linux yang akan datang.
+
+- `kernel.shm*`,
+- `kernel.msg*`,
+- `kernel.sem`,
+- `fs.mqueue.*`,
+- Parameter dibawah `net.*` dapat diatur sebagai Namespace dari _container networking_
+  Namun, ada beberapa perkecualian (seperti
+  `net.netfilter.nf_conntrack_max` dan `net.netfilter.nf_conntrack_expect_max`
+  yang dapat diatur dalam Namespace _container networking_ padahal bukan merupakan Namespace).
+
+Sysctl tanpa Namespace disebut dengan sysctl _node-level_. Jika kamu perlu mengatur
+mereka, kamu harus secara manual mengonfigurasi mereka pada sistem operasi setiap Node, atau dengan
+menggunakan DaemonSet melalui Container yang berwenang.
+
+Gunakan securityContext dari Pod untuk mengonfigurasi sysctl Namespace. securityContext
+berlaku untuk semua Container dalam Pod yang sama.
+
+
+Contoh ini menggunakan securityContext dari Pod untuk mengatur sebuah sysctl _safe_
+`kernel.shm_rmid_forced`, dan dua buah sysctl _unsafe_ `net.core.somaxconn` dan
+`kernel.msgmax`. Tidak ada perbedaan antara sysctl _safe_ dan sysctl _unsafe_ dalam
+spesifikasi tersebut.
+
+{{< warning >}}
+Hanya modifikasi parameter sysctl setelah kamu memahami efeknya, untuk menghindari
+gangguan pada kestabilan sistem operasi kamu.
+{{< /warning >}}
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: sysctl-example
+spec:
+  securityContext:
+    sysctls:
+    - name: kernel.shm_rmid_forced
+      value: "0"
+    - name: net.core.somaxconn
+      value: "1024"
+    - name: kernel.msgmax
+      value: "65536"
+  ...
+```
+
+
+<!-- discussion -->
+
+{{< warning >}}
+Karena sifat alami dari sysctl _unsafe_, penggunaan sysctl _unsafe_
+merupakan resiko kamu sendiri dan dapat menyebabkan masalah parah seperti perilaku yang salah
+pada Container, kekurangan sumber daya, atau kerusakan total dari Node.
+{{< /warning >}}
+
+Merupakan sebuah praktik yang baik untuk mempertimbangkan Node dengan pengaturan sysctl khusus sebagai
+Node yang tercemar (_tainted_) dalam sebuah cluster, dan hanya menjadwalkan Pod yang membutuhkan pengaturan sysctl.
+Sangat disarankan untuk menggunakan Kubernetes [fitur _taints and toleration_](/docs/reference/generated/kubectl/kubectl-commands/#taint) untuk mengimplementasikannya.
+
+Pod dengan sysctl _unsafe_ akan gagal diluncurkan pada sembarang Node yang belum
+mengaktifkan kedua sysctl _unsafe_ secara eksplisit. Seperti halnya sysctl _node-level_ sangat
+disarankan untuk menggunakan [fitur _taints and toleration_](/docs/reference/generated/kubectl/kubectl-commands/#taint) atau
+[pencemaran dalam Node](/docs/concepts/scheduling-eviction/taint-and-toleration/)
+untuk Pod dalam Node yang tepat.
+
+## PodSecurityPolicy
+
+Kamu selanjutnya dapat mengontrol sysctl mana saja yang dapat diatur dalam Pod dengan menentukan daftar
+sysctl atau pola (_pattern_) sysctl dalam `forbiddenSysctls` dan/atau _field_
+`allowedUnsafeSysctls` dari PodSecurityPolicy. Pola sysctl diakhiri
+dengan karakter `*`, seperti `kernel.*`. Karakter `*` saja akan mencakup
+semua sysctl.
+
+Secara bawaan, semua sysctl _safe_ diizinkan.
+
+Kedua `forbiddenSysctls` dan `allowedUnsafeSysctls` merupakan daftar dari nama sysctl
+atau pola sysctl yang polos (yang diakhiri dengan karakter `*`). Karakter `*` saja berarti sesuai dengan semua sysctl.
+
+_Field_ `forbiddenSysctls` tidak memasukkan sysctl tertentu. Kamu dapat melarang 
+kombinasi sysctl _safe_ dan sysctl _unsafe_ dalam daftar tersebut. Untuk melarang pengaturan
+sysctl, hanya gunakan `*` saja.
+
+Jika kamu menyebutkan sysctl _unsafe_ pada _field_ `allowedUnsafeSysctls` dan 
+tidak ada pada _field_ `forbiddenSysctls`, maka sysctl dapat digunakan pada Pod
+dengan menggunakan PodSecurityPolicy ini. Untuk mengizinkan semua sysctl _unsafe_ diatur dalam
+PodSecurityPolicy, gunakan karakter `*` saja.
+
+Jangan mengonfigurasi kedua _field_ ini sampai tumpang tindih, dimana
+sysctl yang diberikan akan diperbolehkan dan dilarang sekaligus.
+
+{{< warning >}}
+Jika kamu mengizinkan sysctl _unsafe_ melalui _field_ `allowUnsafeSysctls`
+pada PodSecurityPolicy, Pod apa pun yang menggunakan sysctl seperti itu akan gagal dimulai
+jika sysctl _unsafe_ tidak diperbolehkan dalam _flag_ kubelet `--allowed-unsafe-sysctls`
+pada Node tersebut.
+{{< /warning >}}
+
+Ini merupakan contoh sysctl _unsafe_ yang diawali dengan `kernel.msg` yang diperbolehkan dan
+sysctl `kernel.shm_rmid_forced` yang dilarang.
+
+```yaml
+apiVersion: policy/v1beta1
+kind: PodSecurityPolicy
+metadata:
+  name: sysctl-psp
+spec:
+  allowedUnsafeSysctls:
+  - kernel.msg*
+  forbiddenSysctls:
+  - kernel.shm_rmid_forced
+ ...
+```
+
+