Beban kerja Kubernetes adalah kumpulan pod dan kontainer yang menjalankan aplikasi atau layanan dalam kluster Kubernetes. Untuk memastikan stabilitas pod dan kelangsungan layanan, Anda dapat melakukan operasi seperti menyebarkan, menskalakan, memperbarui, dan memulihkan beban kerja. Topik ini memperkenalkan berbagai jenis beban kerja Kubernetes, termasuk Deployment, StatefulSet, Job, dan CronJob.
Pods
Pod adalah unit terkecil yang dapat disebarkan yang dapat Anda buat atau kelola untuk aplikasi di Kubernetes. Pod mengenkapsulasi satu atau lebih kontainer, sumber daya penyimpanan, alamat IP unik, dan konfigurasi yang menentukan cara kontainer berjalan. Dalam kebanyakan kasus, pengguna Kubernetes tidak langsung membuat pod. Sebagai gantinya, Kubernetes memungkinkan Anda mengelola pod dengan menggunakan pengontrol, seperti Deployments dan StatefulSets.
Deployments dan StatefulSets
Deployment
Sebelumnya, Kubernetes menggunakan pengontrol ReplicaSet untuk menentukan jumlah pod yang direplikasi, pemilih label, dan template pod. Saat ini, Kubernetes menggunakan pengontrol Deployment untuk mengelola pengontrol ReplicaSet, sehingga memungkinkan pengelolaan dan kontrol pod secara tidak langsung.
Deployments cocok untuk skenario yang tidak sensitif terhadap persistensi data dan urutan permintaan, seperti server web dan aplikasi dengan arsitektur layanan mikro.
Skenario | Deskripsi |
Layanan web tanpa status | Layanan web frontend yang perlu menangani permintaan yang berfluktuasi. Deployments mendukung penskalaan horizontal, pembaruan, dan rollback pod. |
Aplikasi yang menggunakan arsitektur layanan mikro | Sistem yang terdiri dari beberapa layanan mikro menyebarkan setiap layanan secara terpisah. Setiap layanan memiliki siklus hidup independen dan persyaratan penskalaan independen. Anda dapat menggunakan Deployments untuk menyebarkan setiap layanan mikro secara terpisah. |
StatefulSet
Pod yang dikelola oleh Deployment bersifat tanpa status (stateless) dan independen satu sama lain. Deployments tidak dapat memenuhi persyaratan dalam skenario tertentu, misalnya, pod yang dibuat untuk database terdistribusi dalam mode aktif/standby bersifat stateful dan saling bergantung. Dalam hal ini, Anda dapat menggunakan StatefulSets untuk mengelola pod.
StatefulSets cocok untuk skenario yang memerlukan penyimpanan persisten dan penyebaran berurutan, seperti database dan sistem penyimpanan terdistribusi.
Skenario | Deskripsi |
Database stateful | Sebagian besar database stateful memerlukan penyimpanan persisten dan harus mempertahankan identifikasi jaringan yang sama serta data pod setelah pod dijadwalkan ulang. Misalnya, setiap pod yang dibuat untuk database MySQL memiliki data dan konfigurasi spesifik yang harus tetap tidak berubah setelah pod di-restart. |
Layanan antrian pesan terdistribusi | Layanan antrian pesan terdistribusi memerlukan konsistensi status node dan persistensi log. Misalnya, Apache Kafka memerlukan konsistensi data yang ketat di antara node broker. Selain itu, log harus dipersistensikan ke volume persisten (PV) untuk mencegah hilangnya data. |
Perbedaan antara Deployments dan StatefulSets
Tabel berikut membandingkan Deployments dengan StatefulSets untuk membantu Anda memilih antara keduanya.
Item | Deployment | StatefulSet |
Skema | Ditujukan untuk aplikasi tanpa status, seperti server web dan layanan API. Deployments cocok untuk skenario di mana penskalaan cepat dan pembaruan bergulir diperlukan. | Ditujukan untuk aplikasi stateful, seperti database dan sistem file terdistribusi. StatefulSets cocok untuk skenario di mana penyimpanan persisten dan penyebaran berurutan diperlukan. |
Penyimpanan persisten | Semua pod yang direplikasi berbagi klaim volume persisten (PVC) yang sama. Ketika pod dijadwalkan ulang atau diperbarui, PVC asli tetap dipasang ke pod untuk memastikan konsistensi data. | Setiap pod dipasangkan dengan PVC terpisah untuk mencapai persistensi data. Pod diberi nama dalam format tetap untuk memastikan konsistensi data. Ketika pod di-restart atau dijadwalkan ulang, PVC asli tetap dipasang ke pod. |
Pengenal jaringan | Pod tidak memiliki pengenal tetap. Nama dan alamat IP pod dibuat secara dinamis saat pembuatan. Pengenal, nama, dan alamat IP pod berubah setiap kali pod dibuat ulang. | Pengenal pod berada dalam format |
Kebijakan pembaruan |
|
|
Penemuan layanan | Mengimplementasikan penemuan layanan berdasarkan berbagai jenis Layanan dan melakukan load balancing untuk pod. Untuk informasi lebih lanjut, lihat Manajemen Layanan. | Setiap pod memiliki nama domain unik dan tetap. StatefulSets dapat menggunakan headless Services untuk mengimplementasikan penemuan layanan dan memungkinkan akses langsung ke setiap pod. |
DaemonSets
DaemonSet memastikan bahwa setiap node dalam kluster Anda menjalankan pod yang direplikasi. DaemonSets cocok untuk layanan latar belakang atau proses pemantauan yang harus berjalan di semua node, seperti layanan pengumpulan log, sistem pemantauan sumber daya, dan plug-in jaringan. Ketika node ditambahkan ke atau dihapus dari kluster, DaemonSet secara otomatis membuat pod di node tersebut atau menghapus pod dari node tersebut.
DaemonSets cocok untuk menjalankan daemon yang sama di setiap node dalam kluster Kubernetes.
Skenario | Deskripsi |
Pengumpulan log | DaemonSets cocok untuk menyebarkan alat pengumpulan log, seperti komponen pengumpulan log. Alat pengumpulan log harus berjalan di setiap node dalam kluster sehingga file log di setiap node dapat dikumpulkan, diproses, dan dikirim ke sistem manajemen log terpusat. |
Agen pemantauan | DaemonSets digunakan untuk menyebarkan agen pemantauan Prometheus seperti Node Exporter dan Datadog Agent, yang mengumpulkan metrik penggunaan sumber daya. Ini membantu Anda memantau status dan kinerja node. |
Jobs dan CronJobs
Dalam Kubernetes, Jobs digunakan untuk menjalankan tugas satu kali, sedangkan CronJobs digunakan untuk menjalankan tugas terjadwal. Jobs dan CronJobs cocok untuk beban kerja yang dijalankan sesuai permintaan, seperti tugas pemrosesan batch dan pekerjaan pemrosesan data.
Job membuat satu atau lebih pod untuk menjalankan tugas. Ketika tugas selesai, pod yang dibuat oleh Job secara otomatis dihentikan. Jobs cocok untuk tugas satu kali seperti tugas pemrosesan data dan tugas pencadangan data.
CronJob membuat Jobs berdasarkan jadwal yang ditentukan oleh ekspresi cron. Ekspresi cron mendukung kombinasi menit, jam, hari, minggu, dan bulan. CronJobs cocok untuk tugas periodik seperti tugas pencadangan basis data terjadwal dan tugas penghapusan log terjadwal.
Kelola beban kerja
Anda dapat mengelola beban kerja di kluster ACK dengan memanggil operasi API, menggunakan alat baris perintah kubectl, atau menggunakan konsol ACK. Anda dapat menggunakan metode-metode ini untuk menyebarkan, memantau, dan menskalakan aplikasi Anda secara efisien.
Gunakan Konsol ACK
Anda dapat menggunakan konsol ACK untuk membuat, mengelola, dan memantau beban kerja secara efisien, nyaman, dan visual. Topik berikut menjelaskan cara mengelola berbagai jenis beban kerja di konsol ACK:
Gunakan kubectl
Anda dapat memperoleh file kubeconfig kluster dan menggunakan kubectl untuk terhubung ke kluster. Kemudian, Anda dapat mengelola kluster berdasarkan kebutuhan bisnis Anda. Misalnya, Anda dapat menyebarkan aplikasi, mengelola sumber daya, dan memantau kluster.
API
Anda dapat membuat, memperbarui, menghapus, dan memantau beban kerja dengan memanggil operasi API. Untuk informasi lebih lanjut, lihat Gunakan API Kubernetes.
FAQ
Jika Anda mengalami masalah saat menggunakan beban kerja, lihat FAQ tentang beban kerja untuk solusi.
Referensi
Untuk informasi lebih lanjut tentang konfigurasi beban kerja yang direkomendasikan, lihat Konfigurasi beban kerja yang direkomendasikan.
Untuk informasi lebih lanjut tentang cara mengaktifkan penskalaan otomatis pod, lihat Ikhtisar Auto Scaling.
Untuk informasi lebih lanjut tentang kebijakan penjadwalan pod, lihat Penjadwalan.
Untuk informasi lebih lanjut tentang cara mengakses aplikasi, mengimplementasikan penemuan layanan, dan mengimplementasikan load balancing, lihat Manajemen Layanan.
Untuk informasi lebih lanjut tentang cara mengelola lalu lintas eksternal ke layanan di kluster Anda, lihat Manajemen Ingress.
Untuk informasi lebih lanjut tentang cara mengaktifkan penyimpanan persisten untuk pod, lihat Dasar-dasar Penyimpanan.
Untuk informasi lebih lanjut tentang cara menarik gambar ke kluster ACK tanpa menggunakan Secret, lihat Tarik gambar tanpa menggunakan Secret.
Untuk informasi lebih lanjut tentang cara menarik gambar kontainer lintas wilayah yang berada di luar Tiongkok daratan, lihat Gunakan instance GA untuk percepatan penarikan gambar kontainer lintas wilayah.