Tentang paket fleet

Halaman ini menjelaskan paket armada, FleetPackage API, dan hubungannya dengan Config Sync.

FleetPackage adalah API deklaratif yang memungkinkan Anda mengelola paket di seluruh armada. Paket fleet adalah serangkaian manifes YAML Kubernetes yang menentukan konfigurasi cluster. Dengan menggunakan paket fleet, Anda dapat men-deploy paket melalui peluncuran sekaligus atau progresif ke cluster yang terdaftar ke fleet Anda.

Anda menentukan setiap objek FleetPackage satu kali, lalu Anda dapat mengupdate 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. Paket Fleet dibuat berdasarkan manfaat Config Sync seperti koreksi drift otomatis, dan menawarkan keunggulan unik berikut:

  • Mengotomatiskan peluncuran resource: Setelah Anda menyiapkan paket fleet, resource Kubernetes yang ditujunya 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, resource apa pun 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 dengan cermat untuk memastikan bahwa perubahan yang salah tidak memengaruhi seluruh fleet Anda.

  • Menyederhanakan konfigurasi Config Sync: Paket Fleet menggunakan Cloud Build untuk melakukan autentikasi ke Git, yang berarti Anda melakukan autentikasi satu kali per project, bukan satu kali per objek RootSync atau RepoSync.

Anda mungkin lebih memilih untuk menggunakan Config Sync dengan objek RootSync atau RepoSync, bukan paket fleet, jika satu atau beberapa skenario berikut berlaku untuk Anda:

  • Anda mengelola sejumlah kecil cluster.

  • Anda memerlukan kontrol lebih besar atas cara resource di-deploy ke cluster, di luar yang disediakan 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 informasi selengkapnya tentang perbedaan dalam resource ini, lihat Praktik terbaik: Membuat repositori WET.

  • FleetPackage API hanya tersedia di wilayah us-central1. Anda masih dapat men-deploy ke cluster di region yang berbeda, tetapi Anda harus menyiapkan Cloud Build dan mengonfigurasi gcloud CLI di us-central1.

Arsitektur

Anda dapat menggunakan FleetPackage API untuk men-deploy manifes Kubernetes ke sejumlah cluster. FleetPackage API menggunakan Cloud Build untuk menyinkronkan dan mengambil resource Kubernetes dari repositori Git Anda. Layanan paket fleet kemudian men-deploy resource tersebut ke cluster Anda.

Diagram yang menunjukkan alur resource Kubernetes di Git yang disinkronkan ke fleet cluster

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 fleet untuk mengontrol cara, tempat, dan jenis resource yang di-deploy.

Bagian berikut menunjukkan contoh konfigurasi FleetPackage yang berbeda. Untuk informasi yang lebih mendetail tentang cara menerapkan 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 satu 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 sebagian cluster

FleetPackage berikut menggunakan pemilih label untuk men-deploy resource Kubernetes hanya ke cluster dengan label keanggotaan country yang cocok dengan "us" 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
    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
    

Replicas: 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 hal 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']}

Langkah selanjutnya

Men-deploy paket armada