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.
Meminimalkan 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
RootSync
atauRepoSync
.
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 resource di-deploy ke cluster Anda, 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.
FleetPackage
API 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
.
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.
Contoh kasus penggunaan
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 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
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
rolloutStrategy:
rolling:
maxConcurrent: 3
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
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
Deployment resource varian ke cluster
Untuk contoh ini, di repositori Git, Anda memiliki folder bernama "deployments" yang berisi dua spesifikasi deployment yang berbeda:
Replika: 3
# small.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Replika: 10
# large.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 10 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Anda dapat menggunakan varian untuk men-deploy deployment "kecil" atau "besar"
ke cluster yang berbeda. Setiap cluster memiliki label
nginx-size=small
atau nginx-size=large
.
FleetPackage
dalam contoh ini akan menyerupai berikut:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
path: deployments
variantsPattern: "*.yaml"
rolloutStrategy:
rolling:
maxConcurrent: 2
target:
fleet:
project: projects/my-project
variantSelector:
variantNameTemplate: ${membership.labels['nginx-size']}