Halaman ini memberikan titik awal untuk membantu Anda merencanakan dan merancang GitOps CI/CD pipeline untuk Kubernetes, yang dapat membantu Anda memaksimalkan Config Sync.
Halaman ini ditujukan untuk Admin, arsitek, dan Operator yang ingin mengimplementasikan GitOps di lingkungannya. Untuk mempelajari lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
GitOps sendiri adalah praktik terbaik universal untuk organisasi yang mengelola konfigurasi Kubernetes sebagai penskalaan. Namun, apabila terkait dengan merancang solusi itu, Anda punya banyak pilihan. Memahami opsi yang ada dan manfaat serta konsekuensi dari keputusan tersebut dapat membantu Anda menghindari arsitektur Anda di masa mendatang.
Anda tidak perlu menggunakan setiap praktik terbaik yang tercantum di halaman ini. Mana yang terbaik praktik yang Anda pilih akan tergantung pada situasi unik Anda. Sasaran dari halaman ini untuk membantu Anda membuat keputusan yang tepat saat menyiapkan GitOps Anda tentang arsitektur ini.
Menggunakan repositori paket pribadi yang terpusat
Menggunakan repositori pusat untuk paket publik atau internal (seperti Helm atau kpt
)
membantu tim menemukan
paket dengan lebih mudah. Anda dapat menggunakan
layanan seperti Artifact Registry atau
repositori Git Anda.
Tim platform dapat menerapkan kebijakan yang dapat digunakan tim aplikasi paket hanya dari repositori pusat. Atau, mereka dapat menggunakan repositori pusat sebagai satu kumpulan paket yang telah diperiksa.
Anda dapat membatasi izin akses ke repositori hanya untuk sejumlah kecil insinyur/teknik. Seluruh organisasi dapat memiliki akses baca. Saran dari kami menerapkan proses untuk mempromosikan paket ke dalam repositori pusat dan pembaruan penyiaran.
Tabel berikut mencantumkan manfaat dan kelemahan dari penggunaan server data terpusat repositori paket pribadi:
Manfaat |
Kelemahan |
|
|
Membuat repositori basah
Buat repositori dengan output YAML yang sesuai dengan status yang diinginkan dari atau namespace. Perubahan pada repositori basah atau terhidrasi penuh harus mudah ditinjau dengan menggunakan {i>diff<i}. Praktik yang baik adalah membuat perubahan hanya repositori basah melalui proses peninjauan (misalnya, di GitHub, ini akan menjadi permintaan pull).
Tabel berikut mencantumkan manfaat dan kekurangan dari membuat repositori basah:
Manfaat |
Kelemahan |
|
|
Geser ke kiri untuk memvalidasi konfigurasi
Menunggu hingga Config Sync mulai disinkronkan untuk memeriksa apakah ada masalah yang dapat terjadi
commit Git yang tidak diperlukan, dan feedback loop yang panjang. Banyak masalah yang dapat ditemukan
sebelum konfigurasi diterapkan ke cluster dengan menggunakan fungsi validator kpt
.
Tabel berikut mencantumkan manfaat dan kerugian dari memeriksa masalah sebelum menerapkan konfigurasi:
Manfaat |
Kelemahan |
|
|
Menggunakan folder, bukan cabang
Gunakan folder untuk varian konfigurasi, bukan cabang. Dengan {i>folder<i},
Anda dapat menggunakan perintah tree
untuk melihat varian. Misalnya, dengan cabang, Anda
tidak dapat mengetahui apakah delta antara cabang
prod dan bidang adalah perubahan yang
atau perbedaan permanen antara tahap
dan produksi apa yang harus terlihat
suka.
Tabel berikut mencantumkan keuntungan dan kerugian menggunakan {i>folder <i}alih-alih cabang:
Manfaat |
Kelemahan |
|
|
Minimalkan penggunaan ClusterSelectors
ClusterSelectors
memungkinkan Anda menerapkan bagian tertentu dari
konfigurasi ke subset dari cluster. Alih-alih mengonfigurasi
RootSync atau RepoSync,
Anda dapat mengubah resource yang diterapkan atau menambahkan label
ke cluster. Namun seiring waktu, seiring dengan bertambahnya jumlah ClusterSelectors
,
bisa menjadi rumit untuk memahami
status akhir cluster.
Dengan Config Sync, Anda dapat menyinkronkan beberapa RootSyncs
dan RepoSyncs
sekaligus,
artinya Anda dapat menambahkan konfigurasi
yang relevan ke repositori terpisah dan
kemudian sinkronkan ke
cluster yang Anda inginkan.
Tabel berikut mencantumkan manfaat dan kekurangan dari tidak menggunakan ClusterSelectors
:
Manfaat |
Kelemahan |
|
|
Menghindari pengelolaan Tugas dengan Config Sync
Meskipun Config Sync dapat menerapkan Tugas untuk Anda, Pekerjaan tidak cocok untuk Deployment GitOps karena alasan berikut:
Kolom yang tidak dapat diubah: Banyak kolom Tugas yang tidak dapat diubah. Untuk mengubah immutable , objek harus dihapus dan dibuat ulang. Namun, Config Sync tidak akan menghapus objek kecuali Anda menghapusnya dari sumbernya.
Menjalankan Tugas yang tidak diinginkan: Jika Anda menyinkronkan Tugas dengan Config Sync dan lalu Tugas tersebut dihapus dari cluster, Config Sync menganggap bahwa melenceng dari status yang Anda pilih dan membuat ulang Tugas. Jika Anda menentukan Lowongan time to live (TTL), Tugas akan otomatis dihapus dan Config Sync secara otomatis membuatnya ulang, memulai ulang Tugas, sampai Anda menghapus Tugas tersebut dari sumbernya yang sesungguhnya. Sering kali, ini bukan yang dimaksudkan karena Config Sync menjalankan lagi Tugas tersebut.
Masalah rekonsiliasi: Config Sync biasanya menunggu objek untuk merekonsiliasi setelah diterapkan. Namun, Lowongan dianggap dapat direkonsiliasi jika sudah mulai berjalan. Ini berarti bahwa Config Sync tidak menunggu Tugas yang harus diselesaikan sebelum melanjutkan untuk menerapkan objek lain. Namun, jika Pekerjaan kemudian gagal, yang dianggap kegagalan rekonsiliasi. Di beberapa lain yang terjadi, hal ini dapat memblokir sinkronisasi resource lain dan menyebabkan error sampai Anda memperbaikinya. Dalam kasus lain, sinkronisasi mungkin berhasil dan hanya rekonsiliasi gagal.
Oleh karena itu, sebaiknya jangan sinkronkan Tugas dengan Config Sync.
Dalam kebanyakan kasus, Pekerjaan dan tugas situasional lainnya harus dikelola oleh penyedia yang menangani pengelolaan siklus prosesnya. Anda kemudian dapat mengelola layanan tersebut dengan Config Sync, bukan Tugas itu sendiri.
Tabel berikut mencantumkan keuntungan dan kerugian dari tidak menggunakan Config Sync untuk mengelola Tugas:
Manfaat |
Kelemahan |
|
|
Menggunakan repositori yang tidak terstruktur
Config Sync mendukung dua struktur untuk mengatur repositori:
tidak terstruktur
dan hierarkis. Tidak terstruktur adalah pendekatan
yang direkomendasikan karena
memungkinkan Anda mengatur repositori
dengan cara yang paling nyaman bagi Anda.
Sebagai perbandingan, repositori hierarkis menerapkan struktur spesifik. Sebagai
misalnya, CRD harus berada
di direktori tertentu. Hal ini dapat menyebabkan
masalah ketika Anda
perlu membagikan konfigurasi. Misalnya, jika satu tim
memublikasikan paket yang
berisi CRD, tim lain yang perlu
menggunakan paket itu harus memindahkan
CRD ke dalam direktori cluster
, sehingga menambahkan lebih banyak overhead ke proses.
Tabel berikut mencantumkan manfaat dan kerugian dari penggunaan data yang tidak terstruktur repositori:
Manfaat |
Kelemahan |
|
|
Untuk mempelajari cara mengonversi repositori hierarkis, lihat Mengonversi repositori hierarkis menjadi repositori tidak terstruktur.
Memisahkan repositori konfigurasi dan kode
Saat meningkatkan skala repositori mono, diperlukan build khusus untuk setiap folder. Izin dan permasalahan bagi orang yang mengerjakan kode dan mengerjakan konfigurasi cluster umumnya berbeda. Dengan menyimpan kode dan konfigurasi repositori terpisah, setiap repositori dapat memiliki izin akses dan karena ada berbagai struktur penetapan harga.
Tabel berikut mencantumkan manfaat dan kelemahan dari memisahkan kode dan repositori config:
Manfaat |
Kelemahan |
|
|
Menggunakan repositori terpisah untuk mengisolasi perubahan
Saat meningkatkan skala repositori mono, izin yang berbeda diperlukan pada folder yang berbeda. Karena itu, memisahkan repositori memungkinkan keamanan batas antara keamanan, platform, dan konfigurasi aplikasi. Ini juga merupakan adalah ide yang bagus untuk memisahkan repositori produksi dan non-produksi.
Tabel berikut mencantumkan keuntungan dan kerugian dari perubahan isolasi pada repositori terpisah:
Manfaat |
Kelemahan |
|
|
Menyematkan versi paket
Baik menggunakan Helm atau Git, Anda harus menyematkan versi paket konfigurasi ke sesuatu yang tidak sengaja bergerak maju tanpa peluncuran.
Tabel berikut mencantumkan manfaat dan kekurangan dari versi paket yang disematkan:
Manfaat |
Kelemahan |
|
|
Menggunakan Workload Identity Federation untuk GKE
Anda dapat mengaktifkan Workload Identity Federation for GKE di GKE cluster, yang memungkinkan workload Kubernetes mengakses layanan Google dalam aman dan dapat dikelola.
Tabel berikut mencantumkan manfaat dan kekurangan menggunakan Workload Identity Federation untuk GKE:
Manfaat |
Kelemahan |
|
|
Arsitektur tingkat tinggi
Pada level tinggi, Anda mungkin memerlukan setidaknya empat jenis repositori:
- Repositori paket tempat penyimpanan konfigurasi bersama. Ini bisa juga berupa chart Helm yang disimpan di Artifact Registry.
- Repositori platform tempat tim platform menyimpan konfigurasi di seluruh fleet untuk cluster dan namespace.
- Repositori konfigurasi aplikasi.
- Repositori kode aplikasi.
Diagram berikut menunjukkan tata letak repositori tersebut:
Diagram berikut menunjukkan alur konfigurasi dari kode aplikasi ke repositori konfigurasi aplikasi. Tim pengembangan mengirim kode untuk konfigurasi aplikasi dan aplikasi ke dalam repositori. Kode untuk keduanya aplikasi dan konfigurasi disimpan di tempat yang sama dan tim aplikasi memiliki kendali atas repositori tersebut. Tim aplikasi kemudian dapat mengirim kode ke build.