145 lines
6.8 KiB
Markdown
145 lines
6.8 KiB
Markdown
---
|
||
title: Pola Operator
|
||
content_type: concept
|
||
weight: 30
|
||
---
|
||
|
||
<!-- overview -->
|
||
|
||
Operator adalah ekstensi perangkat lunak untuk Kubernetes yang memanfaatkan
|
||
[_custom resource_](/id/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
|
||
untuk mengelola aplikasi dan komponen-komponennya. Operator mengikuti prinsip
|
||
Kubernetes, khususnya dalam hal [_control loop_](/docs/concepts/#kubernetes-control-plane).
|
||
|
||
|
||
|
||
|
||
<!-- body -->
|
||
|
||
## Motivasi
|
||
|
||
Pola dari Operator bertujuan untuk menangkap tujuan utama dari Operator manusia
|
||
yang mengelola layanan atau suatu kumpulan layanan. Operator manusia yang
|
||
menjaga spesifik aplikasi dan layanan memiliki pengetahuan yang mendalam tentang
|
||
bagaimana sistem harus berperilaku, bagaimana cara menyebarkannya, dan
|
||
bagaimana bereaksi jika ada masalah.
|
||
|
||
Orang-orang yang menjalankan _workload-workload_ di Kubernetes pada umumnya suka
|
||
menggunakan otomatisasi untuk menangani tugas-tugas yang berulang. Pola
|
||
Operator menangkap bagaimana kamu dapat menulis kode untuk mengotomatiskan
|
||
sebuah tugas di luar batas apa yang dapat disediakan oleh Kubernetes itu
|
||
sendiri.
|
||
|
||
## Operator di Kubernetes
|
||
|
||
Kubernetes didesain untuk otomasi. Secara di luar nalar, kamu mendapatkan banyak
|
||
otomatisasi bawaan dari komponen inti Kubernetes. Kamu dapat menggunakan
|
||
Kubernetes untuk mengotomasikan penyebaran dan menjalankan _workload-workload_, *dan*
|
||
kamu juga dapat mengotomasikan cara Kubernetes melakukan pekerjaan itu.
|
||
|
||
Konsep dari {{< glossary_tooltip text="controller" term_id="controller" >}}
|
||
Kubernetes memungkinkan kamu memperluas perilaku klaster tanpa harus mengubah
|
||
kode dari Kubernetes itu sendiri.
|
||
|
||
Operator adalah klien API dari Kubernetes yang bertindak sebagai _controller_
|
||
untuk [_custome resource_](/docs/concepts/api-extension/custom-resources/).
|
||
|
||
## Contoh Operator {#contoh}
|
||
|
||
Beberapa hal yang dapat kamu gunakan untuk mengotomasi Operator meliputi:
|
||
|
||
* menyebarkan aplikasi sesuai dengan permintaan
|
||
* mengambil dan memulihkan backup status dari sebuah aplikasi
|
||
* menangani pembaruan kode aplikasi termasuk dengan perubahan terkait seperti
|
||
skema basis data atau pengaturan konfigurasi tambahan
|
||
* mempublikasikan layanan ke sebuah aplikasi yang tidak mendukung API Kubernetes
|
||
untuk menemukan mereka
|
||
* mensimulasikan kegagalan pada seluruh atau sebagian klaster kamu untuk
|
||
menguji resiliensinya
|
||
* memilih suatu pemimpin untuk aplikasi yang terdistribusi tanpa adanya proses
|
||
pemilihan anggota secara internal
|
||
|
||
Seperti apa sebuah Operator dalam kasus yang lebih terperinci? Berikut ini
|
||
adalah contoh yang lebih detail:
|
||
|
||
1. Sebuah _custom resource_ bernama SampleDB, bisa kamu konfigurasi ke
|
||
dalam klaster.
|
||
2. Sebuah Deployment memastikan sebuah Pod berjalan dimana didalamnya
|
||
berisi bagian _controller_ dari Operator.
|
||
3. Kontainer Image dari kode Operator.
|
||
4. Kode _controller_ yang menanyakan pada *control-plane* untuk mencari tahu
|
||
apakah itu sumber daya SampleDB telah dikonfigurasi.
|
||
5. Inti dari Operator adalah kode untuk memberi tahu server API bagaimana
|
||
membuatnya kondisi sebenarnya sesuai dengan sumber daya yang dikonfigurasi.
|
||
* Jika kamu menambahkan SampleDB baru, Operator menyiapkan
|
||
PersistentVolumeClaims untuk menyediakan penyimpanan basis data yang
|
||
tahan lama, sebuah StatefulSet untuk menjalankan SampleDB dan pekerjaan
|
||
untuk menangani konfigurasi awal.
|
||
* Jika kamu menghapusnya, Operator mengambil _snapshot_, lalu memastikannya
|
||
StatefulSet dan Volume juga dihapus.
|
||
6. Operator juga mengelola backup basis data yang reguler. Untuk setiap resource
|
||
SampleDB, Operator menentukan kapan membuat Pod yang dapat terhubung
|
||
ke database dan mengambil backup. Pod-Pod ini akan bergantung pada ConfigMap
|
||
dan / atau sebuah Secret yang memiliki basis data koneksi dan kredensial.
|
||
7. Karena Operator bertujuan untuk menyediakan otomatisasi yang kuat untuk
|
||
resource yang dikelola, maka akan ada kode pendukung tambahan. Sebagai contoh
|
||
, kode memeriksa untuk melihat apakah basis data menjalankan versi yang
|
||
lama dan, jika demikian, kode membuat objek Job yang melakukan pembaruan untuk
|
||
kamu.
|
||
|
||
## Menyebarkan Operator
|
||
|
||
Cara paling umum untuk menyebarkan Operator adalah dengan menambahkan
|
||
CustomResourceDefinition dan _controller_ yang berkaitan ke dalam klaster kamu.
|
||
_Controller_ biasanya akan berjalan di luar
|
||
{{< glossary_tooltip text="control plane" term_id="control-plane" >}},
|
||
seperti kamu akan menjalankan aplikasi apa pun yang dikontainerisasi.
|
||
Misalnya, kamu bisa menjalankan _controller_ di klaster kamu sebagai sebuah
|
||
Deployment.
|
||
|
||
## Menggunakan Operator {#menggunakan operator}
|
||
|
||
Setelah Operator disebarkan, kamu akan menggunakannya dengan menambahkan,
|
||
memodifikasi, atau menghapus jenis sumber daya yang digunakan Operator tersebut.
|
||
Melanjutkan contoh diatas, kamu akan menyiapkan Deployment untuk Operator itu
|
||
sendiri, dan kemudian:
|
||
|
||
```shell
|
||
kubectl get SampleDB # find configured databases
|
||
|
||
kubectl edit SampleDB/example-database # manually change some settings
|
||
```
|
||
|
||
…dan itu saja! Operator akan berhati-hati dalam menerapkan perubahan
|
||
serta menjaga layanan yang ada dalam kondisi yang baik.
|
||
|
||
## Menulis Operator Kamu Sendiri {#menulis-operator}
|
||
|
||
Jika tidak ada Operator dalam ekosistem yang mengimplementasikan perilaku kamu
|
||
inginkan, kamu dapat kode kamu sendiri. Dalam [Selanjutnya](#selanjutnya) kamu
|
||
akan menemukan beberapa tautan ke _library_ dan perangkat yang dapat kamu gunakan
|
||
untuk menulis Operator _Cloud Native_ kamu sendiri.
|
||
|
||
Kamu juga dapat mengimplementasikan Operator (yaitu, _Controller_) dengan
|
||
menggunakan bahasa / _runtime_ yang dapat bertindak sebagai
|
||
[klien dari API Kubernetes](/docs/reference/using-api/client-libraries/).
|
||
|
||
## {{% heading "whatsnext" %}}
|
||
|
||
* Memahami lebih lanjut tentang [_custome resources_](/id/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
|
||
* Temukan "ready-made" _operators_ dalam [OperatorHub.io](https://operatorhub.io/)
|
||
untuk memenuhi use case kamu
|
||
* Menggunakan perangkat yang ada untuk menulis Operator kamu sendiri, misalnya:
|
||
* menggunakan [KUDO](https://kudo.dev/) (Kubernetes Universal Declarative Operator)
|
||
* menggunakan [kubebuilder](https://book.kubebuilder.io/)
|
||
* menggunakan [Metacontroller](https://metacontroller.github.io/metacontroller/intro.html) bersama dengan
|
||
`WebHooks` yang kamu implementasikan sendiri
|
||
* menggunakan the [Operator _Framework_](https://github.com/operator-framework/getting-started)
|
||
* [Terbitkan](https://operatorhub.io/) Operator kamu agar dapat digunakan oleh
|
||
orang lain
|
||
* Baca [artikel asli dari CoreOS](https://coreos.com/blog/introducing-operators.html)
|
||
yang memperkenalkan pola Operator
|
||
* Baca sebuah [artikel](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps)
|
||
dari Google Cloud soal panduan terbaik membangun Operator
|
||
|