|
| 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