Tutorial ini menunjukkan praktik terbaik untuk mengalihkan visibilitas biaya Google Kubernetes Engine (GKE) ke tim pengembangan Anda. Praktik shift-left ini menghasilkan awareness terhadap biaya di awal proses, sehingga membantu Anda menghindari biaya tidak terduga dalam tagihan Google Cloud.
Tutorial ini ditujukan bagi developer, operator, dan praktisi FinOps yang ingin mengoptimalkan biaya di cluster GKE dan yang menggunakan GitHub dalam produksinya. Jika menggunakan GitLab sebagai gantinya, lihat Memperkirakan biaya GKE di awal siklus pengembangan menggunakan GitLab.
Tutorial ini mengasumsikan bahwa Anda sudah memahami Docker, GitHub, Kubernetes, GKE, Cloud Build, dan Linux.
Ringkasan
Banyak tim yang menggunakan cloud publik tidak terbiasa dengan gaya penagihan bayar sesuai penggunaan. Sering kali, mereka tidak sepenuhnya memahami lingkungan tempat aplikasi mereka berjalan—dalam hal ini GKE. Model operasi FinOps mempromosikan budaya akuntabilitas keuangan. Praktik terbaik FinOps adalah memberikan informasi real-time kepada tim tentang pengeluaran mereka, sehingga masalah biaya dapat ditangani segera setelah masalah tersebut muncul.
Dokumen ini menunjukkan cara melangkah lebih jauh dengan memperkirakan biaya sebelum menimbulkan pengeluaran dalam tagihan Anda. Seperti yang disorot di situs GitHub, "Di GitHub, alat peninjauan kode yang ringan dibangun ke dalam setiap permintaan pull." Dengan begitu, Anda dapat "mengembangkan project, mengusulkan fitur baru, dan mendiskusikan detail implementasi sebelum mengubah kode sumber." Waktu terbaik untuk memperkirakan biaya adalah di awal proses selama pengembangan dan pada waktu peninjauan kode. Dengan cara ini, praktisi dapat memahami dan mendiskusikan alternatif dampak biaya dari fitur baru dan perbaikan bug sebelum menjadi masalah. Diagram berikut merangkum praktik tersebut.
Seperti yang ditunjukkan pada diagram, developer memperkirakan biaya GKE di lingkungan lokalnya, idealnya pada waktu build. Perkiraan ini memberi mereka pemahaman yang baik tentang biaya beban kerja produksi bulanan. Saat fitur atau perbaikan bug sudah selesai, mereka mengusulkan permintaan pull yang memicu Cloud Build untuk memeriksa perbedaan antara biaya lama dan baru. Jika ada peningkatan di atas nilai minimum yang telah ditentukan, pengguna dapat meminta peninjauan kode baru. Praktik ini membantu developer lebih menyadari kapasitas beban kerja mereka dan secara proaktif memperbaiki masalah aplikasi, bukan menambahkan lebih banyak resource setiap kali ketidakstabilan ditemukan dalam produksi.
Tujuan
- Membangun dan mengirim image penaksir biaya Kubernetes.
- Membuat repositori GitHub.
- Menghubungkan Cloud Build ke repositori GitHub Anda.
- Mengirim kode contoh ke repositori GitHub Anda.
- Mengubah kode dan ajukan permintaan pull untuk melihat cara kerja estimasi biaya.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, buka halaman Pemilih project.
-
Pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Menyiapkan lingkungan Anda
Di Cloud Shell, clone repositori GitHub
gke-shift-left-cost
:git clone https://github.com/GoogleCloudPlatform/gke-shift-left-cost cd gke-shift-left-cost
Kode dalam repositori ini disusun ke dalam folder berikut:
- Root: Berisi file Dockerfile yang digunakan untuk membuat image estimator biaya dan file
main.go
yang menerapkan logika command line untuk estimator. api/
: Berisi Golang API untuk memanipulasi objek Kubernetes dan membuat estimasi biaya.samples/
: Berisi contoh manifes Kubernetes sehingga Anda dapat bereksperimen dengan proses sebelum menerapkannya di organisasi Anda.
- Root: Berisi file Dockerfile yang digunakan untuk membuat image estimator biaya dan file
Tetapkan project ID Google Cloud, pengguna GitHub, dan alamat email Anda, serta pengguna GitHub lain untuk bertindak sebagai peninjau FinOps:
export GCP_PROJECT_ID=YOUR_PROJECT_ID export GITHUB_USER=YOUR_GITHUB_USER export GITHUB_EMAIL=YOUR_GITHUB_EMAIL_ADDRESS export GITHUB_FINOPS_REVIEWER_USER=ANOTHER_GITHUB_USER
Ganti kode berikut:
YOUR_PROJECT_ID
: ID project Google Cloud untuk project yang Anda gunakan dalam tutorial ini.YOUR_GITHUB_USER
: pengguna yang digunakan untuk login ke akun GitHub Anda.YOUR_GITHUB_EMAIL_ADDRESS
: email yang Anda gunakan di akun GitHub.ANOTHER_GITHUB_USER
: pengguna GitHub lain untuk bertindak sebagai peninjau FinOps. Perlu diperhatikan bahwa tutorial ini mengharuskan Anda menambahkan pengguna ini sebagai kolaborator repositori, sehingga pengguna tersebut tidak boleh menjadi diri Anda sendiri. Untuk menghindari macet selama langkah-langkah tutorial, pastikan pengguna ini menerima undangan segera setelah Anda membuat undangan.
Tetapkan project Google Cloud dan aktifkan API yang diperlukan:
gcloud config set project $GCP_PROJECT_ID gcloud services enable cloudbilling.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com
Membangun dan mengirim image penaksir biaya Kubernetes
Alat penaksir biaya Kubernetes yang disertakan dalam tutorial ini hanyalah contoh dari apa yang dapat dilakukan. Alat ini menawarkan kemampuan memperkirakan biaya untuk objek Kubernetes DaemonSet, Deployment, StatefulSet, ReplicaSet, HorizontalPodAutoScaler, dan PersistentVolumeClaim Kubernetes. Anda juga dapat menerapkan alat estimasi biaya sendiri atau mengusulkan permintaan pull dengan peningkatan yang Anda inginkan.
Di Cloud Shell, izinkan
application-default
menggunakan kredensial Anda:gcloud auth application-default login
Bangun biner penaksir biaya Kubernetes:
mkdir ./bin go test ./api go build -v -o ./bin/k8s-cost-estimator .
Uji biner dengan mengeksekusi estimasi biaya dalam folder sampel:
./bin/k8s-cost-estimator \ --k8s ./samples/k8s-cost-estimator-local/app-v1 \ --config ./samples/k8s-cost-estimator-local/example-conf.yaml --v trace
Pada output, Anda akan melihat tabel Markdown yang menguraikan perkiraan biaya bulanan untuk folder
./samples/k8s-cost-estimator-local/app-v1/
. Untuk lebih memahami biaya produksi bulanan aplikasi, developer dapat menjalankan langkah ini sebelum menerapkan ke repositori jarak jauh.INFO[0000] Starting cost estimation (version v0.0.1)... ... | KIND | MIN REQUESTED (USD) | MIN REQ + HPA CPU BUFFER (USD) | MAX REQUESTED (USD) | MIN LIMITED (USD) | MAX LIMITED (USD) | |-----------------------|---------------------|--------------------------------|---------------------|-------------------|-------------------| | Deployment | $133.31 | $198.71 | $266.54 | $312.83 | $579.29 | | StatefulSet | $36.33 | $36.33 | $36.33 | $72.67 | $72.67 | | DaemonSet | $29.68 | $29.68 | $29.68 | $53.19 | $53.19 | | PersistentVolumeClaim | $28.88 | $28.88 | $28.88 | $33.68 | $33.68 | | **TOTAL** | **$228.20** | **$293.60** | **$361.43** | **$472.38** | **$738.83** | INFO[0002] Finished cost estimation!
Bangun image container estimator biaya Kubernetes:
docker build . -t us-central1-docker.pkg.dev/$GCP_PROJECT_ID/docker-repo/k8s-cost-estimator:v0.0.1
Buat repositori Docker Artifact Registry untuk menyimpan image:
gcloud artifacts repositories create docker-repo \ --repository-format=docker \ --location=us-central1 \ --description="Docker repository"
Daftarkan
gcloud
sebagai helper kredensial ke file konfigurasi Docker. Jika diminta, konfirmasi pembaruan file.gcloud auth configure-docker us-central1-docker.pkg.dev
Kirim image ke Artifact Registry:
docker push us-central1-docker.pkg.dev/$GCP_PROJECT_ID/docker-repo/k8s-cost-estimator:v0.0.1
Membuat repositori GitHub baru
Di Cloud Shell, ubah direktori menjadi contoh GitHub:
cd samples/k8s-cost-estimator-github
Di GitHub, buat token akses:
Buka halaman GitHub Personal Access Tokens
- Di kolom Note, masukkan deskripsi token.
- Di bagian Select scope, pilih kotak centang repo, admin:public_key, dan delete_repo.
- Klik Generate token, lalu salin nilai yang ada di Your new personal access token ke bagian atas halaman.
Di Cloud Shell, simpan token akses pribadi Anda dalam variabel.
GITHUB_TOKEN=YOUR_NEW_PERSONAL_ACCESS_TOKEN
Ganti kode berikut:
YOUR_NEW_PERSONAL_ACCESS_TOKEN
: token akses pribadi yang baru saja Anda buat.
Buat repositori GitHub:
curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ https://api.github.com/user/repos \ -d '{"name":"k8s-cost-estimator-github"}' | jq
Outputnya mirip dengan hal berikut ini:
{ "id": 36099474, "node_id": "MDEwOldfsdjA5OTQ3Njc=", "name": "k8s-cost-estimator-github", ... }
Tambahkan peninjau FinOps sebagai kolaborator di repositori Anda:
curl -X PUT \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ https://api.github.com/repos/$GITHUB_USER/k8s-cost-estimator-github/collaborators/$GITHUB_FINOPS_REVIEWER_USER | jq -r .html_url
Outputnya mirip dengan hal berikut ini:
https://github.com/your-user/k8s-cost-estimator-github/invitations
Bagikan URL output kepada pengguna yang Anda tetapkan di variabel
GITHUB_FINOPS_REVIEWER_USER
agar mereka dapat menerima undangan. Sebelum melanjutkan ke langkah berikutnya, buka URL yang sama untuk memastikan undangan diterima.
Menghubungkan Cloud Build ke repositori GitHub Anda
Bagian ini menunjukkan cara menginstal aplikasi GitHub Cloud Build. Penginstalan ini memungkinkan Anda menghubungkan repositori GitHub dengan project Google Cloud Anda, sehingga Cloud Build dapat otomatis menjalankan alat penaksir Kubernetes di setiap permintaan pull.
Buka halaman GitHub Marketplace untuk aplikasi Cloud Build:
Siapkan akses akun GitHub untuk aplikasi:
- Jika ini pertama kalinya Anda mengonfigurasi aplikasi di GitHub, klik Setup with Google Cloud Build di bagian bawah halaman, lalu klik Grant this app access to akun GitHub.
- Jika sebelumnya Anda telah menyiapkan aplikasi di GitHub, klik Configure access.
Di halaman Applications yang terbuka, ikuti langkah-langkah berikut:
- Di baris Google Cloud Build, klik Configure.
- Pilih opsi Only select repository.
- Pilih k8s-cost-estimator-github untuk terhubung ke repositori yang baru saja Anda buat.
- Klik Save—atau Install (label tombol akan berubah bergantung pada alur yang Anda jalankan).
Anda sekarang dialihkan ke Google Cloud untuk melanjutkan penginstalan. Login dengan akun Google Cloud Anda. Jika diminta, izinkan integrasi Cloud Build dengan GitHub.
Di halaman Cloud Build, pilih project Anda. Wizard akan muncul.
Di bagian Select repository di wizard, pilih akun GitHub Anda dan repositori k8s-cost-estimator-github.
Jika Anda menyetujui persyaratan dan ketentuan ini, pilih kotak centang, lalu klik Connect.
Di bagian Create a trigger, klik Create a trigger, lalu ikuti langkah-langkah berikut:
- Masukkan nama pemicu.
- Di bagian Event, pilih Pull request (GitHub App only).
- Di bagian Sumber:
- Pastikan kolom Repository sudah diisi secara otomatis dengan your-github-user/k8s-cost-estimator-github (Aplikasi GitHub).
- Di dropdown Base Branch, pilih
.*
.
- Di bagian Configuration Type, pilih Cloud Build configuration file (yaml or json).
Di bagian Advanced, tambahkan variabel substitusi berikut:
- _GITHUB_TOKEN =
YOUR_PERSONAL_ACCESS_TOKEN
- _GITHUB_FINOPS_REVIEWER_USER =
THE_GITHUB_FINOPS_REVIEWER_USER
- _GITHUB_FINOPS_COST_USD_BATAS =
10
Ganti kode berikut:
YOUR_PERSONAL_ACCESS_TOKEN
: token akses pribadi GitHub yang Anda buat. Token ini tersedia dalam variabelGITHUB_TOKEN
di Cloud Shell.THE_GITHUB_FINOPS_REVIEWER_USER
: pengguna yang Anda undang sebagai kolaborator di repositori GitHub Anda. Nama pengguna ini tersedia dalam variabelGITHUB_FINOPS_REVIEWER_USER
di Cloud Shell.
- _GITHUB_TOKEN =
Klik Create.
Aplikasi GitHub Cloud Build sekarang sudah dikonfigurasi, dan repositori GitHub Anda ditautkan ke project Google Cloud Anda. Permintaan pull ke repositori GitHub Anda sekarang memicu eksekusi Cloud Build, yang melaporkan kembali hasilnya ke GitHub menggunakan Pemeriksaan GitHub.
Kirim kode contoh ke repositori GitHub Anda
Buat keypair SSH agar Anda dapat mengirim kode contoh ke repositori GitHub:
mkdir -p ssh && cd ssh ssh-keygen -t rsa -b 4096 -N '' -f github-key eval `ssh-agent` && ssh-add $(pwd)/github-key curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ https://api.github.com/user/keys \ -d "{\"title\":\"k8s-cost-estimator-key\", \"key\":\"$(cat github-key.pub)\"}" | jq cd ..
Outputnya mirip dengan hal berikut ini:
{ "id": 52356205, "key": "ssh-rsa AAAAB3NzaC….wJICyt0yvWjGFZGCWBPUw==", "url": "https://api.github.com/user/keys/526205", "title": "k8s-cost-estimator-key", "verified": true, "created_at": "2021-04-23T16:22:58Z", "read_only": false }
Kirim konten ke repositori GitHub baru Anda:
sed "s/GCP_PROJECT_ID/$GCP_PROJECT_ID/g; s/GITHUB_USER/$GITHUB_USER/g; s/GITHUB_EMAIL/$GITHUB_EMAIL/g;" templates/cloudbuild.yaml.tpl > cloudbuild.yaml GITHUB_SSH_URL_REPO=$(curl -X GET \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ https://api.github.com/repos/$GITHUB_USER/k8s-cost-estimator-github | jq -r .ssh_url) [ -z "$GITHUB_SSH_URL_REPO" ] && echo "GITHUB_SSH_URL_REPO is not exported" || echo "GITHUB_SSH_URL_REPO is $GITHUB_SSH_URL_REPO" git init git remote add origin $GITHUB_SSH_URL_REPO git add -A . git commit -m "Initial commit" git checkout -b main git push -u origin main
Ubah kode dan buat permintaan pull untuk menguji estimasi biaya
Di Cloud Shell, dapatkan URL GitHub ke file
wordpress/wordpress_hpa.yaml
:echo "https://github.com/$GITHUB_USER/k8s-cost-estimator-github/edit/main/wordpress/wordpress_hpa.yaml"
Tekan Ctrl+klik (Cmd+klik untuk pengguna Mac) URL output untuk membuka GitHub dan mengedit file
wordpress/wordpress_hpa.yaml
.Di GitHub, ubah
minReplicas
menjadi5
.Pilih Create a new branch untuk commit ini dan mulai permintaan pull, lalu klik Propose Changes.
Di layar Open a pull request, klik Create pull request.
Selain membuat permintaan pull baru, langkah ini memicu eksekusi Cloud Build berdasarkan file
cloudbuild.yaml
yang Anda buat sebelumnya. Eksekusi Cloud Build ini menggunakan image container yang Anda bangun di Membangun dan mengirim image penaksir biaya Kubernetes, dan membuat keputusan saat peninjau FinOps diperlukan.Tunggu sekitar satu menit hingga pipeline selesai. Setelah selesai, komentar dengan detail biaya akan ditambahkan dalam permintaan pull, dan karena kenaikan biaya kode yang Anda usulkan melebihi batas $10, peninjau FinOps juga akan diminta.
Outputnya mirip dengan hal berikut ini:
Sekarang, Anda sudah mengetahui cara memberi developer visibilitas tentang pengeluaran mereka di awal siklus pengembangan. Pengaturan ini membantu Anda dan organisasi Anda menghindari kejutan dalam tagihan Google Cloud.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project Anda.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus repositori GitHub
Jika Anda tidak ingin menyimpan repositori GitHub Anda, ikuti langkah-langkah berikut:
Di Cloud Shell, hapus repositori GitHub Anda:
curl -X DELETE \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ https://api.github.com/repos/$GITHUB_USER/k8s-cost-estimator-github
Jika koneksi dengan Cloud Shell terputus, Anda harus mereset variabel
GITHUB_TOKEN
danGITHUB_USER
.
Langkah selanjutnya
- Jika Anda menggunakan GitLab, lihat Memperkirakan biaya GKE di awal siklus pengembangan menggunakan GitLab.
- Pelajari lebih lanjut pengoptimalan biaya GKE di Praktik terbaik untuk menjalankan aplikasi Kubernetes yang hemat biaya di GKE.
- Temukan rekomendasi desain dan praktik terbaik untuk mengoptimalkan biaya workload Google Cloud di Framework Arsitektur Google Cloud: Pengoptimalan biaya.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.