Hello sobat, kali ini saya akan sedikit cerita bagaimana team saya di tempat saat ini saya bekerja mengimplementasikan 100% aws spot instance di aws eks production environment
singkat cerita latar belakang kenapa kami menerapkan aws spot instance adalah untuk melakukan optimasi cost semaksimal mungkin tanpa mengorbankan reliability dan avaibility dari service yang berjalan
namun tentu untuk mencapai “tanpa mengorbankan reliability dan avaibility dari service yang berjalan” diperlukan dukungan bukan hanya dari tool automation namu juga dari sisi service atau aplikasi yang berjalan diatas instance tersebut, dan berikut ini point2 yang perlu di implementasikan ketika kita ingin menerapkan full spot instance pada semua nodegroup di aws-eks cluster kita
service / app
- service harus memiliki healthcheck yang mengcover mulai dari memastikan dependency yang service tersebut gunakan sudah siap, sampai memastikan bahwa aplikasi sudah siap untuk digunakan
- service harus bisa horizontal scale, sehingga kita dapat membuat lebih dari 1 replica service berjalan, dalam case ini minimal service harus memiliki minimum 2 replica, dan pastikan ke team developer kalau service yang berjalan lebih dari 1 tidak menimbulkan duplikasi data, selain itu ketika kita berbicara tentang sebuah apps yang mendukung horizontal scale, maka berarti aplikasi tersebut juga harus mendukung central data storage seperti static file, cache, database
kubernetes
- implementasi liveness dan rediness pada service manifest k8s, liveness dan rediness diperlukan agar mencegah trafic masuk dalam kondisi service belum siap menerima trafic, dalam hal ini healtcheck pada sebuah service berperan krusial untuk memastikan apakah service sudah siap dalam menerima trafic dan menjalankan task yang masuk
- resource request & limit pada service manifest k8s, resource request & limit diperlukan untuk memastikan masing-masing service tidak mengganggu service lainnya ketika sedang berjalan dan menjalan task, selain itu ini juga diperlukan untuk membantu kita dalam memonitoring resource usage dan juga untuk keperluan implementasi hpa
- implementasi hpa pada service manifest k8s yang berjalan, hpa sesuai dengan kepanjangannya adalah untuk melakukan horizontal autoscale ketika terjadi lonjakan trafic yang mana butuh lebih banyak replica untuk dapat menghandle banyaknya task yang masuk
- implementasi pdb pada service manifest k8s yang berjalan, pdb adalah feature kunci dalam implementasi spot instance di production, pdb diperlukan untuk mencegah node langsung diterminate dan pods di force delete oleh spot instance, aws akan memprioritaskan service kita pindah dulu sesuai policy yang kita set di pdb, baru pods di delete dengan cara mengirimkan sigterm untuk lalu service melakukan graceful shutdown, baru setelahnya node di delete
aws-eks
- pastikan kamu telah implementasi aws-eks node autoscaler
- pastikan konfigurasi nodegroup spot instance yang kamu miliki memiliki lebih dari 1 type instance contohnya seperti pada gambar dibawah ini, pastikan juga type instance yang kamu pilih memiliki komposisi ram dan cpu yang sama, pada gambar dibawah semua type instance yang saya pilih memiliki kesamaan komposisi yaitu 4vCPU 16GB RAM
monitoring & alert
setelah kita implementasi point2 diatas pada service kita, maka selanjutnya kita perlu makesure apakah dalam monitoring tools yang kita miliki sudah mengcover semua aspek yang ada di “Four Golden Signals“, apa saja itu?
- Latency
- Traffic
- Errors
- Saturation
untuk penjelesan detail terkait 4 point diatas kamu bisa baca disini ya 4GoldenSignals, kenapa kita perlu memastikan monitoring kita sudah mengcover 4 golden signals, tentu supaya ketika terjadi anomali pada service kita bisa tahu lebih awal untuk menghindari impact yang lebih besar
dan sebagai penutup, langkah-langkah diatas bisa terwujud berkat kerjasama banyak team, dan terimakasih untuk semua team untuk perjalanan dan proses sampai pada akhirnya kita bisa pada di tahap bisa implementasi spot instance di production aws-eks