Halaman ini menjelaskan paket armada, FleetPackage API, dan hubungannya dengan Config Sync.
FleetPackage adalah API deklaratif yang memungkinkan Anda mengelola paket di seluruh
fleet. Paket fleet adalah sekumpulan manifes YAML Kubernetes yang menentukan
konfigurasi cluster. Dengan menggunakan paket fleet, Anda
dapat men-deploy paket melalui peluncuran serentak atau progresif ke cluster
yang terdaftar ke fleet Anda.
Anda menentukan setiap objek FleetPackage satu kali, lalu Anda dapat memperbarui paket tersebut dengan revisi baru. Saat Anda menerapkan revisi baru, layanan paket fleet akan mengambil
perubahan tersebut dan men-deploy-nya ke cluster Anda.
Manfaat
Gunakan paket fleet untuk men-deploy resource Kubernetes di seluruh cluster yang terdaftar ke fleet. Setelah Anda membuat dan menerapkan paket fleet, paket fleet akan otomatis men-deploy file konfigurasi Kubernetes di repositori Git ke cluster baru. Fleet dibangun berdasarkan manfaat Config Sync seperti koreksi penyimpangan otomatis, dan menawarkan keuntungan unik berikut:
Mengotomatiskan peluncuran resource: Setelah Anda menyiapkan paket fleet, resource Kubernetes yang ditujuknya akan otomatis di-deploy oleh layanan paket fleet di semua cluster.
Mengonfigurasi cluster baru secara otomatis: Jika Anda mengonfigurasi paket fleet lalu menambahkan cluster baru ke fleet, semua resource yang ditentukan oleh paket fleet akan otomatis di-deploy ke cluster baru.
Mengelola konfigurasi Kubernetes dalam skala besar: Daripada mengelola cluster satu per satu, gunakan paket fleet untuk men-deploy resource ke seluruh fleet cluster.
Minimalkan dampak perubahan yang salah: Pilih jumlah maksimum cluster untuk men-deploy resource sekaligus. Anda dapat memantau perubahan pada setiap cluster secara cermat untuk memastikan bahwa perubahan yang salah tidak memengaruhi seluruh kumpulan instance Anda.
Menyederhanakan konfigurasi Config Sync: Paket fleet menggunakan Cloud Build untuk melakukan autentikasi ke Git, yang berarti Anda melakukan autentikasi sekali per project, bukan sekali per objek
RootSyncatauRepoSync.
Anda mungkin lebih memilih menggunakan Config Sync dengan objek RootSync atau RepoSync
daripada paket armada jika satu atau beberapa skenario berikut berlaku bagi
Anda:
Anda mengelola sejumlah kecil cluster.
Anda memerlukan kontrol yang lebih besar atas cara men-deploy resource ke cluster, di luar yang disediakan oleh API paket fleet dengan label dan varian.
Persyaratan dan batasan
Hanya repositori Git yang didukung sebagai sumber tepercaya saat mengonfigurasi paket armada.
Resource Kubernetes yang disimpan di Git harus merepresentasikan status akhir resource. Overlay tambahan untuk mengubah resource yang disimpan di Git tidak didukung. Untuk mengetahui informasi selengkapnya tentang perbedaan dalam resource ini, lihat Praktik terbaik: Membuat repositori WET.
FleetPackageAPI hanya tersedia di regionus-central1. Anda masih dapat men-deploy ke cluster di region yang berbeda, tetapi Anda harus menyiapkan Cloud Build dan mengonfigurasi gcloud CLI dius-central1.Jumlah maksimum paket armada adalah 300 per project per region.
Arsitektur
Anda dapat menggunakan FleetPackage API untuk men-deploy manifes Kubernetes ke sejumlah cluster. API FleetPackage menggunakan Cloud Build untuk menyinkronkan dan mengambil
resource Kubernetes dari repositori Git Anda. Layanan paket fleet kemudian
men-deploy resource tersebut ke cluster Anda.
Cara varian dibuat
Paket fleet menggunakan sistem varian untuk men-deploy konfigurasi resource Kubernetes yang berbeda ke cluster atau grup cluster yang berbeda dalam fleet Anda, tetapi dari repositori Git yang sama.
Ada dua kolom dalam spesifikasi FleetPackage yang mengontrol perilaku varian:
resourceBundleSelector.cloudBuildRepository.variantsPattern: Pola glob yang digunakan untuk menemukan file dan direktori di repositori Git Anda (di bawahpathyang ditentukan, atau root repositori jikapathtidak disertakan). Pola ini menentukan file atau direktori mana yang menjadi varian dan konten apa yang disertakan.variantSelector.variantNameTemplate: Ekspresi yang memetakan setiap cluster dalam fleet Anda ke salah satu nama varian yang dihasilkan olehvariantsPattern. Pilihan ini didasarkan pada metadata keanggotaan fleet cluster.
variantsPattern cocok
Kolom variantsPattern wajib diisi untuk menentukan cara membuat varian
dari konfigurasi yang disimpan di repositori Anda. Pencocokan menggunakan logika berikut:
Pencocokan file: Jika pola cocok dengan file YAML, varian akan dibuat.
- Nama varian: Nama file tanpa ekstensi (misalnya,
prod-config.yamlmenjadi varianprod-config). - Konten varian: Konten file tunggal ini.
- Nama varian: Nama file tanpa ekstensi (misalnya,
Kecocokan direktori: Jika pola cocok dengan direktori, varian akan dibuat.
- Nama varian: Nama direktori (misalnya, direktori
devmenjadi variandev). - Konten varian: Kombinasi semua file YAML yang ditemukan dalam direktori ini dan semua subdirektorinya, secara rekursif.
- Nama varian: Nama direktori (misalnya, direktori
Pola pencocokan file memiliki batasan berikut:
- Tidak ada karakter pengganti berulang (ganda). Pola
**tidak didukung. - Jika pola menyertakan karakter titik (
.), karakter tersebut harus diikuti dengan karakter alfanumerik. - Pola tidak boleh menyertakan tanda kutip tunggal (
'). - Nama varian harus unik. Jika pola Anda cocok dengan beberapa file dengan nama yang sama (misalnya,
app1/deploy.yamldanapp2/deploy.yaml), keduanya akan mencoba membuat varian bernamadeploy, sehingga menyebabkan konflik nama.
Sebagai contoh, pertimbangkan repositori dengan struktur berikut:
repo-root/
└── FleetPackages/
└── clusters/
├── common-ingress.yaml
├── us-central1-a/
│ ├── gke-1/
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── gke-2/
│ ├── deployment.yaml
│ └── service.yaml
└── us-central1-b/
├── gke-1.yaml
└── blue-green.yaml
Anda dapat mencocokkan, dan oleh karena itu menyinkronkan ke cluster, file yang berbeda, bergantung pada jenis pencocokan file atau direktori yang Anda tentukan dalam spesifikasi paket armada, misalnya:
variantsPattern: "*": Cocok dengancommon-ingress.yaml,us-central1-a, danus-central1-b. Membuat varian:common-ingress(dari file)us-central1-a(menggabungkan semua file YAML dalam folder tersebut)us-central1-b(menggabungkan semua YAML dalam folder tersebut)
variantsPattern: "*.yaml": Cocok dengancommon-ingress.yaml. Membuat varian:common-ingress
variantsPattern: "us-*": Cocok denganus-central1-adanus-central1-b. Membuat varian:us-central1-aus-central1-b
variantsPattern: "us-central1-b/*.yaml": Cocok denganus-central1-b/gke-1.yamldanus-central1-b/blue-green.yaml. Membuat variasi:gke-1blue-green
variantNameTemplate cocok
Setelah varian ditentukan, kolom variantNameTemplate di bagian
variantSelector menentukan varian mana yang diterapkan ke setiap cluster.
Template dapat menggunakan variabel untuk mengakses metadata keanggotaan armada berikut:
${membership.name}: Nama keanggotaan fleet cluster.${membership.location}: Lokasi keanggotaan fleet.${membership.project}: Project keanggotaan fleet.${membership.labels['KEY']}: Nilai labelKEYpada keanggotaan kumpulan armada.
Misalnya, pertimbangkan skenario berikut yang menggunakan label untuk mencocokkan varian:
variantNameTemplate: "${membership.labels['env']}": Cluster dengan labelenv: proddisinkronkan ke varian bernamaprod.variantNameTemplate: "${membership.location}": Kelompok disinkronkan ke varian yang cocok dengan lokasinya (misalnya,us-central1-a).variantNameTemplate: "default": Cluster disinkronkan ke varian bernamadefault. Ini adalah perilaku default jikavariantSelectortidak ada. Jika repositori Anda tidak berisi file bernamadefault.yamlatau direktori bernama default, tidak ada yang disinkronkan.
Menggabungkan variantsPattern dan variantNameTemplate
Agar deployment berhasil, Anda harus memastikan bahwa nama varian yang dihasilkan oleh
variantsPattern Anda adalah nama yang dapat disinkronkan oleh cluster Anda dengan mencocokkan
variantNameTemplate.
Misalnya, untuk men-deploy ke cluster berdasarkan label lingkungan, Anda dapat menyusun repositori Git dengan direktori seperti dev, staging, dan prod. Kemudian, Anda akan menggunakan spesifikasi paket fleet berikut:
resourceBundleSelector:
cloudBuildRepository:
# ... other fields
path: "manifests"
variantsPattern: "*" # Matches dev, staging, prod directories
variantSelector:
variantNameTemplate: "${membership.labels['env']}"
Dengan konfigurasi ini, cluster yang diberi label env: staging akan menerima konten
dari direktori manifests/staging/.
Strategi deployment
Anda dapat menggunakan paket fleet untuk men-deploy resource dari repositori Git ke seluruh fleet cluster Anda. Anda juga dapat mengonfigurasi paket armada untuk mengontrol cara, tempat, dan jenis resource yang di-deploy.
Bagian berikut menunjukkan contoh berbagai konfigurasi FleetPackage.
Untuk mengetahui informasi yang lebih mendetail tentang penerapan paket armada, lihat
Men-deploy paket armada.
Deployment ke semua cluster dalam fleet
FleetPackage berikut menggunakan strategi rolling untuk men-deploy
resource Kubernetes ke tiga cluster sekaligus dan menargetkan
semua cluster dalam fleet:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
variantsPattern: "*.yaml"
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
rolloutStrategy:
rolling:
maxConcurrent: 3
variantSelector:
variantNameTemplate: deployment # matches a file named deployment.yaml
Deployment ke subset cluster
FleetPackage berikut menggunakan pemilih label untuk men-deploy resource Kubernetes
hanya ke cluster dengan label keanggotaan country yang cocok dengan "us"
di fleet:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
variantsPattern: "*.yaml"
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
selector:
matchLabels:
country: "us"
rolloutStrategy:
rolling:
maxConcurrent: 3