Cara Menyebarkan Aplikasi di Kubernetes
Diterbitkan: 2022-11-09Kubernetes adalah salah satu platform otomatisasi paling populer untuk menyebarkan, menskalakan, dan mengoperasikan wadah aplikasi pada sekelompok host atau node.
Artikel ini akan membahas salah satu objek utama di Kubernetes: deployment. Tujuannya adalah untuk memahami perilakunya dan cara membuat, memperbarui, dan menghapusnya.
Apa itu Deployment?
Deployment adalah salah satu objek yang digunakan untuk meluncurkan Pod. Praktik terbaik Kubernetes mendorong penggunaan penerapan untuk aplikasi stateless. Tanpa penerapan, Anda perlu membuat, memperbarui, dan menghapus beberapa Pod secara manual, yang akan membosankan dan tidak layak untuk banyak Pod.
Deployment mendeklarasikan satu objek dalam YAML yang tidak hanya membuat Pod tetapi juga memastikan bahwa Pod tersebut up-to-date, dan berjalan. Anda juga dapat dengan mudah menskalakan aplikasi secara otomatis menggunakan penerapan di Kubernetes. Dengan demikian, penerapan digunakan untuk menskalakan, menerapkan, dan memutar kembali versi aplikasi Anda di Pod.
Deployment juga memberi tahu Kubernetes berapa banyak salinan Pod yang ingin kita jalankan, dan Kubernetes akan mengurus sisanya. Pengontrol terkait akan membuat ReplicaSet dari konfigurasi Anda saat membuat penerapan. Controller yang terkait dengan ReplicaSet akan membuat serangkaian Pod dari konfigurasi ReplicaSet.
Keuntungan menggunakan penerapan daripada membuat ReplicaSet secara langsung adalah:
- Historisasi objek: setiap perubahan pada objek (melalui "terapkan" atau "edit") akan membuat cadangan dari versi sebelumnya.
- Manajemen rollout dan rollback: Anda dapat kembali pada konfigurasi sehubungan dengan poin sebelumnya.
Membuat Deployment
Ada dua metode yang dapat kita gunakan untuk membuat penerapan Kubernetes:
Metode Imperatif
Kubernetes API memungkinkan pendekatan yang lebih langsung dan imperatif tanpa memerlukan file konfigurasi atau manifes berformat YAML. Dalam pendekatan ini, yang perlu kita lakukan hanyalah mengatakan apa yang ingin kita lakukan, dan Kubernetes akan bertanggung jawab untuk menentukan apa yang harus dilakukan untuk mencapai hasil yang diharapkan.
Untuk menggunakan metode imperatif, cukup gunakan perintah di bawah ini:
kubectl create deployment nginx-deployment --image nginx --port=80
Metode Deklaratif
Dalam metode ini, Anda harus mendeklarasikan semuanya, dan ketika Anda menggunakan kode ini, Kubernetes hanya membaca definisi Anda dan membuat persis seperti yang disajikan atau dideklarasikan.
Untuk menggunakan penerapan deklaratif, Anda harus membuat file YAML.
File YAML untuk penerapan dengan nama new_deployment.yaml
:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: #Specifies the number of Pod Copies replicas: 3 #Selects the Pod to be managed by the deployment selector: #Matches the defined labels matchLabels: deploy: example template: metadata: #Specifies the labels on the Pod. labels: deploy: example spec: containers: - name: nginx image: nginx:1.20.2
Dalam file YAML ini, setelah mendefinisikan versi Kubernetes API, jenis objek yang Anda buat, dan nama penerapannya, ada bagian spesifikasi. Di bagian ini, pertama-tama Anda menentukan kunci replika, yang menunjukkan jumlah instance Pod yang harus tetap aktif dalam penerapannya.
Gunakan label pemilih untuk mengidentifikasi Pod dalam penerapan. Untuk ini, Anda dapat menggunakan label penerapan, yang memberi tahu bahwa semua pod yang cocok dengan label ini dikelompokkan dalam penerapan.
Setelah itu, Anda memiliki objek template di mana Anda memiliki model Pod di dalam spesifikasi penerapan Anda. Saat penerapan membuat Pod, ia akan membuatnya menggunakan template ini. Spesifikasi pod biasa dapat ditemukan di bawah kunci template.
Dengan penerapan ini, gambar Nginx dengan label akan diterapkan ke Pod. Selain itu, kamu juga harus berhati-hati dalam hal ini, dan Pod adalah unit skalabilitas di Kubernetes, jadi kamu harus memikirkan pola yang ingin kamu gunakan jika kamu meletakkan beberapa container di dalam Pod yang sama.
Selanjutnya, terapkan file new_deployment.yaml
new_deployment.yaml, gunakan perintah berikut:
kubectl apply -f new_deployment.yaml
Setelah beberapa detik, Anda bisa mendapatkan status penerapan menggunakan yang berikut:
kubectl get all

Ambil dan Perbarui Penerapan
Perhatikan bahwa Anda telah membuat Pod, deployment, dan juga Replicaset. Jadi penerapan selalu membuat dan mengelola Replika. Sekarang Anda dapat menggunakan perintah berikut untuk menjelaskan penerapan:

kubectl describe deployment nginx-deployment

Sekarang Anda memiliki deskripsi lengkap tentang penerapan. Ini menyoroti strategi yang digunakan untuk membuat/membangun kembali pod ketika pembaruan telah ditetapkan sebagai RollingUpdate.
Strategi RollingUpdate memungkinkan migrasi teratur dari satu versi aplikasi ke versi yang lebih baru. Ini adalah strategi default yang digunakan di Kubernetes.
Selain itu, kami juga memiliki strategi berikut:
- Recreate: Mengakhiri instance Pod yang sedang berjalan dan 'membuatnya kembali' dengan versi baru;
- Biru/Hijau: Strategi ini menciptakan dua lingkungan yang terpisah namun identik. Di lingkungan biru, aplikasi berjalan apa adanya, sedangkan di lingkungan hijau, aplikasi berjalan sebagaimana adanya di masa depan;
- Canary: Strategi penyebaran di mana sebagian pengguna terlibat dalam rilis tambahan aplikasi atau layanan.
Jika Anda memilih "pembaruan bergulir", Anda dapat mengonfigurasi perilakunya tentang jumlah replika yang diinginkan.
-
maxSurge
memungkinkan Anda untuk menunjukkan (dalam persentase atau absolut) berapa banyak Pod yang dapat dibuat selain jumlah replika yang saat ini dikonfigurasi. -
maxUnavailable
memungkinkan Anda untuk menunjukkan (dalam persentase atau istilah absolut) berapa banyak Pod yang "tidak tersedia" selama pembaruan, tergantung pada jumlah replika yang dikonfigurasi.
Bergantung pada aplikasi dan penskala otomatis Anda, konfigurasi ini akan memungkinkan Anda memastikan QoS atau mempercepat penerapan Anda.
Selanjutnya, Anda harus menskalakan Pod menjadi 10 dan mengubah tag gambar Nginx ke yang terbaru.
kubectl scale deployment nginx-deployment --replicas=10

Perhatikan bahwa kami memiliki 5 container yang sedang dibuat, dan dari 10 Pod, kami memiliki 5 yang tersedia.
Setelah beberapa detik, gunakan perintah berikut:
kubectl get all
Di sini Anda dapat melihat bahwa semua Pod telah dibuat, dan container sedang berjalan.

Menghapus Deployment Anda
Untuk menghapus penerapan Kubernetes, Anda dapat menggunakan perintah berikut:
kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml
Helm: Sederhanakan Deployment
Saat Anda ingin menerapkan aplikasi kompleks yang menggunakan puluhan atau bahkan ratusan sumber daya Kubernetes, alat kubectl menjadi tidak cocok, itulah sebabnya alat Helm dikembangkan. Helm adalah manajer paket untuk Kubernetes yang dibangun di atas kubectl dan menyederhanakan penerapan aplikasi.
Dalam kosakata Helm, sebuah aplikasi disebut rilis. Ini terkait dengan bagan, yaitu kumpulan file konfigurasi dalam format YAML yang berisi variabel global dan template yang menjelaskan sumber daya Kubernetes.
Kesimpulan
Deployment adalah objek Kubernetes yang penting. Karena kekuatan besar menyiratkan tanggung jawab yang besar, Anda harus berhati-hati saat mengonfigurasinya atau berisiko memiliki perilaku yang tidak terduga. Untuk melangkah lebih jauh dengan konfigurasi Deployment, Anda dapat merujuk ke dokumentasi Kubernetes.
Anda juga dapat menjelajahi beberapa tutorial Kubernetes terbaik untuk belajar dari awal dan menjadi ahli.