
Saat ini, semakin banyak perusahaan yang memindahkan infrastruktur mereka dari server besi dan mesin virtual mereka sendiri ke cloud. Solusi seperti itu mudah dijelaskan: tidak perlu mengurus perangkat keras, gugus mudah dikonfigurasikan dalam banyak cara yang berbeda ... dan yang paling penting, teknologi yang tersedia (seperti Kubernetes) memudahkan untuk skala daya komputasi tergantung pada beban.
Aspek keuangan selalu penting. Alat, yang akan dibahas dalam artikel ini, dirancang untuk membantu mengurangi anggaran saat menggunakan infrastruktur cloud dengan Kubernetes.
Pendahuluan
Kubecost adalah startup berbasis di California dari Google yang menciptakan solusi untuk menghitung biaya infrastruktur dalam layanan cloud (di dalam cluster Kubernetes + sumber daya bersama), menemukan kemacetan dalam pengaturan cluster, dan mengirimkan pemberitahuan yang sesuai ke Slack.
Kami memiliki klien dengan Kubernet baik di awan AWS dan GCP yang sudah dikenal, maupun di komunitas Azure Linux yang lebih langka - secara umum, di semua platform yang didukung oleh Kubecost. Untuk beberapa dari mereka, kami mempertimbangkan biaya layanan intra-cluster sendiri (menggunakan teknik yang mirip dengan yang digunakan oleh Kubecost), serta memantau biaya infrastruktur dan mencoba untuk mengoptimalkannya. Oleh karena itu, logis bahwa kami tertarik pada kemampuan untuk mengotomatisasi tugas-tugas tersebut.
Kode sumber modul Kubecost utama terbuka di bawah lisensi Open Source (Apache License 2.0). Ini dapat digunakan secara bebas, dan fungsi yang tersedia harus cukup untuk proyek kecil. Namun, bisnis adalah bisnis: sisa produk ditutup, dapat digunakan untuk
langganan berbayar , yang juga menyiratkan dukungan komersial. Selain itu, penulis menawarkan lisensi gratis untuk cluster kecil (1 cluster dengan
10 node - selama penulisan artikel ini, batas ini telah diperluas menjadi 20 node) atau periode percobaan dengan kemampuan penuh selama 1 bulan.
Bagaimana cara kerjanya
Jadi, sebagian besar Kubecost adalah aplikasi
model biaya yang ditulis dalam Go. Diagram helm, yang menggambarkan keseluruhan sistem, disebut
penganalisa biaya dan pada dasarnya adalah perakitan model-biaya dengan Prometheus, Grafana dan beberapa dasbor.
Secara umum, model biaya memiliki antarmuka web sendiri, yang menampilkan grafik dan statistik terperinci tentang biaya dalam bentuk tabel, serta, tentu saja, kiat-kiat untuk mengoptimalkan biaya. Dasbor yang disajikan dalam Grafana adalah tahap awal dalam pengembangan Kubecost dan berisi banyak data yang sama dengan model biaya, melengkapi mereka dengan statistik biasa tentang konsumsi ruang CPU / memori / jaringan / disk di kluster dan komponennya.
Bagaimana cara kerja Kubecost?
- Model biaya melalui API penyedia cloud menerima harga layanan.
- Selanjutnya, tergantung pada jenis besi dari situs dan wilayah, biaya per situs dipertimbangkan.
- Berdasarkan biaya node, setiap pod final menerima biaya per jam menggunakan prosesor, menghabiskan satu gigabyte memori dan biaya satu jam untuk menyimpan satu gigabyte data - tergantung pada simpul di mana ia bekerja, atau kelas penyimpanan.
- Berdasarkan biaya pekerjaan pod individu, pembayaran dipertimbangkan untuk ruang nama, layanan, Penyebaran, StatefulSets.
- Untuk menghitung statistik, metrik yang disediakan oleh kube-state-metrics dan simpul-eksportir digunakan.
Penting untuk dicatat bahwa Kubecost
hanya mempertimbangkan sumber daya yang tersedia di Kubernet secara default . Database eksternal, server GitLab, penyimpanan S3, dan layanan lain yang tidak ada di cluster (meskipun di cloud yang sama) tidak terlihat olehnya. Meskipun untuk GCP dan AWS, Anda dapat menambahkan kunci akun layanan Anda dan menghitung semuanya bersama-sama.
Instalasi
Agar Kubecost berfungsi, Anda perlu:
- Kubernetes versi 1.8 dan lebih tinggi;
- metrik negara-kubus;
- Prometheus;
- simpul-eksportir.
Kebetulan di kluster kami semua kondisi ini dipenuhi sebelumnya, jadi ternyata cukup hanya untuk menentukan titik akhir yang benar untuk akses ke Prometheus. Namun, bagan Helm kubecost resmi berisi semua yang Anda butuhkan untuk memulai pada sebuah cluster kosong.
Ada beberapa cara untuk menginstal Kubecost:
- Metode instalasi standar yang dijelaskan dalam instruksi di situs web pengembang. Anda perlu menambahkan repositori penganalisa biaya ke Helm, dan kemudian menginstal grafik tersebut . Tetap hanya meneruskan port dan menyelesaikan pengaturan ke keadaan yang diinginkan secara manual (melalui kubectl) dan / atau menggunakan antarmuka web model biaya.
Kami bahkan tidak mencoba metode ini, karena kami tidak menggunakan konfigurasi siap-pakai pihak ketiga, namun sepertinya opsi yang bagus "coba saja sendiri." Jika Anda sudah memiliki beberapa komponen sistem yang diinstal atau Anda ingin melakukan fine-tuning, lebih baik mempertimbangkan cara kedua.
- Gunakan dasarnya bagan yang sama , tetapi konfigurasikan dan instal secara independen dengan cara apa pun yang nyaman.
Seperti yang telah disebutkan, selain kubecost itu sendiri, grafik ini berisi grafik Grafana dan Prometheus, yang juga dapat disesuaikan sesuai keinginan.
Grafik values.yaml
untuk penganalisis biaya yang tersedia pada grafik memungkinkan Anda untuk mengonfigurasi:
- daftar komponen penganalisa biaya yang akan digunakan;
- titik akhir Anda untuk Prometheus (jika Anda sudah memilikinya);
- Domain dan pengaturan masuk lainnya untuk model biaya dan Grafana;
- penjelasan untuk pod;
- kebutuhan untuk penyimpanan permanen dan ukurannya.
Daftar lengkap opsi konfigurasi yang tersedia dengan deskripsi ada di dokumentasi .
Karena kubecost dalam versi dasar tidak dapat membatasi akses, Anda harus segera mengkonfigurasi autentikasi dasar untuk panel web.
- Instal hanya inti dari sistem - model biaya. Untuk melakukan ini, Anda harus menginstal Prometheus di cluster dan menentukan nilai yang sesuai dari alamatnya di variabel
prometheusEndpoint
untuk Helm. Setelah itu, terapkan set konfigurasi YAML di cluster.
Sekali lagi, Anda harus menambahkan Ingress secara manual dengan basic-auth. Dan akhirnya, Anda perlu menambahkan bagian untuk mengumpulkan metrik model biaya di extraScrapeConfigs
di konfigurasi Prometheus:
- job_name: kubecost honor_labels: true scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: http dns_sd_configs: - names: - < kubecost> type: 'A' port: 9003
Apa yang kita dapatkan
Dengan instalasi penuh, kami dapat menyediakan panel web kubecost dan Grafana dengan satu set dasbor.
Total biaya yang ditampilkan di layar utama sebenarnya menunjukkan perkiraan biaya sumber daya untuk bulan tersebut. Ini adalah harga
prediksi yang menampilkan biaya penggunaan cluster (per bulan) pada tingkat konsumsi sumber daya saat ini.
Metrik ini lebih untuk analisis biaya dan optimisasi. Sangat tidak nyaman untuk menonton total biaya untuk bulan Juli abstrak di kubecost: Anda harus membayar
tagihan untuk ini. Tetapi Anda dapat melihat biaya yang dirinci berdasarkan ruang nama, label, polong selama 1/2/7/30/90 hari, penagihan mana yang tidak akan pernah ditampilkan kepada Anda.

Berbicara tentang
label . Anda harus segera masuk ke pengaturan dan menetapkan nama label yang akan digunakan sebagai kategori tambahan untuk biaya pengelompokan:

Anda dapat menggantung label apa pun pada label tersebut - akan lebih mudah jika Anda sudah memiliki sistem label Anda sendiri.
Di sana Anda juga dapat mengubah alamat API titik akhir yang menghubungkan model biaya, mengonfigurasi ukuran diskon di GCP, dan menetapkan harga Anda sendiri untuk sumber daya dan mata uang untuk mengukurnya (karena alasan tertentu, fitur ini tidak memengaruhi Total biaya).
Kubecost dapat menunjukkan berbagai
masalah di cluster (dan bahkan waspada jika terjadi bahaya). Sayangnya, opsi ini tidak dapat dikonfigurasi, dan karena itu - jika Anda memiliki lingkungan pengembang dan mereka digunakan, Anda dapat terus mengamati sesuatu seperti ini:

Alat penting adalah
Cluster Savings . Ini mengukur aktivitas polong (konsumsi sumber daya, termasuk jaringan), dan juga mempertimbangkan berapa banyak uang dan apa yang bisa dihemat.
Tampaknya kiat pengoptimalan cukup jelas, tetapi pengalaman menunjukkan bahwa masih ada sesuatu yang perlu dilihat. Secara khusus, aktivitas jaringan pod dipantau (Kubecost menawarkan untuk memperhatikan yang tidak aktif), memori yang diminta dan aktual dan konsumsi CPU dibandingkan, serta CPU yang digunakan oleh node cluster (menawarkan untuk memecah beberapa node menjadi satu), beban disk dan beberapa lusin parameter.
Seperti halnya masalah pengoptimalan, pengoptimalan sumber daya berdasarkan data Kubecost harus
diperlakukan dengan hati-hati . Sebagai contoh, Cluster Savings menyarankan penghapusan node, mengklaim bahwa itu aman, tetapi tidak memperhitungkan keberadaan penyeleksi-simpul dan noda pada pod yang digunakan pada mereka yang tidak ada pada node lain. Pokoknya, bahkan penulis produk dalam
artikel terbaru mereka (omong-omong, itu bisa sangat berguna bagi mereka yang tertarik dengan topik proyek) merekomendasikan untuk tidak terburu-buru dalam optimasi biaya, tetapi untuk mendekati masalah ini dengan serius.
Ringkasan
Setelah menggunakan kubecost selama sebulan di beberapa proyek, kita dapat menyimpulkan bahwa ini adalah alat yang menarik (dan bahkan mudah dipelajari dan diinstal) untuk menganalisis dan mengoptimalkan biaya penyedia cloud yang digunakan untuk cluster Kubernetes. Perhitungannya sangat akurat: dalam percobaan kami, mereka bertepatan dengan apa yang sebenarnya dibutuhkan oleh penyedia.
Bukan tanpa kekurangan: ada bug yang tidak kritis, fungsionalitas di tempat tidak mencakup persyaratan khusus untuk beberapa proyek. Namun, jika Anda perlu dengan cepat memahami ke mana uang mengalir dan apa yang dapat Anda βpotongβ untuk terus mengurangi tagihan layanan cloud sebesar 5-30% (ini terjadi dalam kasus kami), ini adalah pilihan yang bagus.
PS
Baca juga di blog kami: