|
| 1 | +--- |
| 2 | +title: Controller |
| 3 | +content_template: templates/concept |
| 4 | +weight: 30 |
| 5 | +--- |
| 6 | + |
| 7 | +{{% capture overview %}} |
| 8 | + |
| 9 | +Dalam bidang robotika dan otomatisasi, _control loop_ atau kontrol tertutup adalah |
| 10 | +lingkaran tertutup yang mengatur keadaan suatu sistem. |
| 11 | + |
| 12 | +Berikut adalah salah satu contoh kontrol tertutup: termostat di sebuah ruangan. |
| 13 | + |
| 14 | +Ketika kamu mengatur suhunya, itu mengisyaratkan ke termostat |
| 15 | +tentang *keadaan yang kamu inginkan*. Sedangkan suhu kamar yang sebenarnya |
| 16 | +adalah *keadaan saat ini*. Termostat berfungsi untuk membawa keadaan saat ini |
| 17 | +mendekati ke keadaan yang diinginkan, dengan menghidupkan atau mematikan |
| 18 | +perangkat. |
| 19 | + |
| 20 | +Di Kubernetes, _controller_ adalah kontrol tertutup yang mengawasi keadaan klaster |
| 21 | +{{< glossary_tooltip term_id="cluster" text="klaster" >}} kamu, lalu membuat atau meminta |
| 22 | +perubahan jika diperlukan. Setiap _controller_ mencoba untuk memindahkan status |
| 23 | +klaster saat ini mendekati keadaan yang diinginkan. |
| 24 | + |
| 25 | +{{< glossary_definition term_id="controller" length="short">}} |
| 26 | + |
| 27 | +{{% /capture %}} |
| 28 | + |
| 29 | + |
| 30 | +{{% capture body %}} |
| 31 | + |
| 32 | +## Pola _controller_ |
| 33 | + |
| 34 | +Sebuah _controller_ melacak sekurang-kurangnya satu jenis sumber daya dari |
| 35 | +Kubernetes. |
| 36 | +[objek-objek](/docs/concepts/overview/working-with-objects/kubernetes-objects/) ini |
| 37 | +memiliki *spec field* yang merepresentasikan keadaan yang diinginkan. Satu atau |
| 38 | +lebih _controller_ untuk *resource* tersebut bertanggung jawab untuk membuat |
| 39 | +keadaan sekarang mendekati keadaan yang diinginkan. |
| 40 | + |
| 41 | +_Controller_ mungkin saja melakukan tindakan itu sendiri; namun secara umum, di |
| 42 | +Kubernetes, _controller_ akan mengirim pesan ke |
| 43 | +{{< glossary_tooltip text="API server" term_id="kube-apiserver" >}} yang |
| 44 | +mempunyai efek samping yang bermanfaat. Kamu bisa melihat contoh-contoh |
| 45 | +di bawah ini. |
| 46 | + |
| 47 | +{{< comment >}} |
| 48 | +Beberapa _controller_ bawaan, seperti _controller namespace_, bekerja pada objek |
| 49 | +yang tidak memiliki *spec*. Agar lebih sederhana, halaman ini tidak |
| 50 | +menjelaskannya secara detail. |
| 51 | +{{< /comment >}} |
| 52 | + |
| 53 | +### Kontrol melalui server API |
| 54 | + |
| 55 | +_Controller_ {{< glossary_tooltip term_id="job" >}} adalah contoh dari _controller_ |
| 56 | +bawaan dari Kubernetes. _Controller_ bawaan tersebut mengelola status melalui |
| 57 | +interaksi dengan server API dari suatu klaster. |
| 58 | + |
| 59 | +Job adalah sumber daya dalam Kubernetes yang menjalankan a |
| 60 | +{{< glossary_tooltip term_id="pod" >}}, atau mungkin beberapa Pod sekaligus, |
| 61 | +untuk melakukan sebuah pekerjaan dan kemudian berhenti. |
| 62 | + |
| 63 | +(Setelah [dijadwalkan](../../../../en/docs/concepts/scheduling/), objek Pod |
| 64 | +akan menjadi bagian dari keadaan yang diinginkan oleh kubelet). |
| 65 | + |
| 66 | +Ketika _controller job_ melihat tugas baru, maka _controller_ itu memastikan bahwa, |
| 67 | +di suatu tempat pada klaster kamu, kubelet dalam sekumpulan Node menjalankan |
| 68 | +Pod-Pod dengan jumlah yang benar untuk menyelesaikan pekerjaan. _Controller job_ |
| 69 | +tidak menjalankan sejumlah Pod atau kontainer apa pun untuk dirinya sendiri. |
| 70 | +Namun, _controller job_ mengisyaratkan kepada server API untuk membuat atau |
| 71 | +menghapus Pod. Komponen-komponen lain dalam |
| 72 | +{{< glossary_tooltip text="control plane" term_id="control-plane" >}} |
| 73 | +bekerja berdasarkan informasi baru (adakah Pod-Pod baru untuk menjadwalkan dan |
| 74 | +menjalankan pekerjan), dan pada akhirnya pekerjaan itu selesai. |
| 75 | + |
| 76 | +Setelah kamu membuat Job baru, status yang diharapkan adalah bagaimana |
| 77 | +pekerjaan itu bisa selesai. _Controller job_ membuat status pekerjaan saat ini |
| 78 | +agar mendekati dengan keadaan yang kamu inginkan: membuat Pod yang melakukan |
| 79 | +pekerjaan yang kamu inginkan untuk Job tersebut, sehingga Job hampir |
| 80 | +terselesaikan. |
| 81 | + |
| 82 | +_Controller_ juga memperbarui objek yang mengkonfigurasinya. Misalnya: setelah |
| 83 | +pekerjaan dilakukan untuk Job tersebut, _controller job_ memperbarui objek Job |
| 84 | +dengan menandainya `Finished`. |
| 85 | + |
| 86 | +(Ini hampir sama dengan bagaimana beberapa termostat mematikan lampu untuk |
| 87 | +mengindikasikan bahwa kamar kamu sekarang sudah berada pada suhu yang kamu |
| 88 | +inginkan). |
| 89 | + |
| 90 | +### Kontrol Langsung |
| 91 | + |
| 92 | +Berbeda dengan sebuah Job, beberapa dari _controller_ perlu melakukan perubahan |
| 93 | +sesuatu di luar dari klaster kamu. |
| 94 | + |
| 95 | +Sebagai contoh, jika kamu menggunakan kontrol tertutup untuk memastikan apakah |
| 96 | +cukup {{< glossary_tooltip text="Node" term_id="node" >}} |
| 97 | +dalam kluster kamu, maka _controller_ memerlukan sesuatu di luar klaster saat ini |
| 98 | +untuk mengatur Node-Node baru apabila dibutuhkan. |
| 99 | + |
| 100 | +_controller_ yang berinteraksi dengan keadaan eksternal dapat menemukan keadaan |
| 101 | +yang diinginkannya melalui server API, dan kemudian berkomunikasi langsung |
| 102 | +dengan sistem eksternal untuk membawa keadaan saat ini mendekat keadaan yang |
| 103 | +diinginkan. |
| 104 | + |
| 105 | +(Sebenarnya ada sebuah _controller_ yang melakukan penskalaan node secara |
| 106 | +horizontal dalam klaster kamu. Silahkan lihat |
| 107 | +[_autoscaling_ klaster](/docs/tasks/administer-cluster/cluster-management/#cluster-autoscaling)). |
| 108 | + |
| 109 | +## Status sekarang berbanding status yang diinginkan {#sekarang-banding-diinginkan} |
| 110 | + |
| 111 | +Kubernetes mengambil pandangan sistem secara _cloud-native_, dan mampu menangani |
| 112 | +perubahan yang konstan. |
| 113 | + |
| 114 | +Klaster kamu dapat mengalami perubahan kapan saja pada saat pekerjaan sedang |
| 115 | +berlangsung dan kontrol tertutup secara otomatis memperbaiki setiap kegagalan. |
| 116 | +Hal ini berarti bahwa, secara potensi, klaster kamu tidak akan pernah mencapai |
| 117 | +kondisi stabil. |
| 118 | + |
| 119 | +Selama _controller_ dari klaster kamu berjalan dan mampu membuat perubahan yang |
| 120 | +bermanfaat, tidak masalah apabila keadaan keseluruhan stabil atau tidak. |
| 121 | + |
| 122 | +## Perancangan |
| 123 | + |
| 124 | +Sebagai prinsip dasar perancangan, Kubernetes menggunakan banyak _controller_ yang |
| 125 | +masing-masing mengelola aspek tertentu dari keadaan klaster. Yang paling umum, |
| 126 | +kontrol tertutup tertentu menggunakan salah satu jenis sumber daya |
| 127 | +sebagai suatu keadaan yang diinginkan, dan memiliki jenis sumber daya yang |
| 128 | +berbeda untuk dikelola dalam rangka membuat keadaan yang diinginkan terjadi. |
| 129 | + |
| 130 | +Sangat penting untuk memiliki beberapa _controller_ sederhana daripada hanya satu |
| 131 | +_controller_ saja, dimana satu kumpulan monolitik kontrol tertutup saling |
| 132 | +berkaitan satu sama lain. Karena _controller_ bisa saja gagal, sehingga Kubernetes |
| 133 | +dirancang untuk memungkinkan hal tersebut. |
| 134 | + |
| 135 | +Misalnya: _controller_ pekerjaan melacak objek pekerjaan (untuk menemukan |
| 136 | +adanya pekerjaan baru) dan objek Pod (untuk menjalankan pekerjaan tersebut dan |
| 137 | +kemudian melihat lagi ketika pekerjaan itu sudah selesai). Dalam hal ini yang |
| 138 | +lain membuat pekerjaan, sedangkan _controller_ pekerjaan membuat Pod-Pod. |
| 139 | + |
| 140 | +{{< note >}} |
| 141 | +Ada kemungkinan beberapa _controller_ membuat atau memperbarui jenis objek yang |
| 142 | +sama. Namun di belakang layar, _controller_ Kubernetes memastikan bahwa mereka |
| 143 | +hanya memperhatikan sumbr daya yang terkait dengan sumber daya yang mereka |
| 144 | +kendalikan. |
| 145 | + |
| 146 | +Misalnya, kamu dapat memiliki Deployment dan Job; dimana keduanya akan membuat |
| 147 | +Pod. _Controller Job_ tidak akan menghapus Pod yang dibuat oleh Deployment kamu, |
| 148 | +karena ada informasi ({{< glossary_tooltip term_id="label" text="labels" >}}) |
| 149 | +yang dapat oleh _controller_ untuk membedakan Pod-Pod tersebut. |
| 150 | +{{< /note >}} |
| 151 | + |
| 152 | +## Berbagai cara menjalankan beberapa _controller_ {#menjalankan-_controller_} |
| 153 | + |
| 154 | +Kubernetes hadir dengan seperangkat _controller_ bawaan yang berjalan di dalam |
| 155 | +{{< glossary_tooltip term_id="kube-controller-manager" >}}. Beberapa _controller_ |
| 156 | +bawaan memberikan perilaku inti yang sangat penting. |
| 157 | + |
| 158 | +_Controller Deployment_ dan _controller Job_ adalah contoh dari _controller_ yang |
| 159 | +hadir sebagai bagian dari Kubernetes itu sendiri (_controller_ "bawaan"). |
| 160 | +Kubernetes memungkinkan kamu menjalankan _control plane_ yang tangguh, sehingga |
| 161 | +jika ada _controller_ bawaan yang gagal, maka bagian lain dari _control plane_ akan |
| 162 | +mengambil alih pekerjaan. |
| 163 | + |
| 164 | +Kamu juga dapat menemukan pengontrol yang berjalan di luar _control plane_, untuk |
| 165 | +mengembangkan lebih jauh Kubernetes. Atau, jika mau, kamu bisa membuat |
| 166 | +_controller_ baru sendiri. Kamu dapat menjalankan _controller_ kamu sendiri sebagai |
| 167 | +satu kumpulan dari beberapa Pod, atau bisa juga sebagai bagian eksternal dari |
| 168 | +Kubernetes. Manakah yang paling sesuai akan tergantung pada apa yang _controller_ |
| 169 | +khusus itu lakukan. |
| 170 | + |
| 171 | +{{% /capture %}} |
| 172 | + |
| 173 | +{{% capture whatsnext %}} |
| 174 | +* Silahkan baca tentang [_control plane_ Kubernetes](/docs/concepts/#kubernetes-control-plane) |
| 175 | +* Temukan beberapa dasar tentang [objek-objek Kubernetes](/docs/concepts/#kubernetes-objects) |
| 176 | +* Pelajari lebih lanjut tentang [Kubernetes API](/docs/concepts/overview/kubernetes-api/) |
| 177 | +* Apabila kamu ingin membuat _controller_ sendiri, silakan lihat [pola perluasan](/docs/concepts/extend-kubernetes/extend-cluster/#extension-patterns) dalam memperluas Kubernetes. |
| 178 | +{{% /capture %}} |
0 commit comments