Informazioni sui pacchetti del parco risorse

Questa pagina spiega i pacchetti del parco risorse, l'API FleetPackage e il loro rapporto con Config Sync.

Un FleetPackage è un'API dichiarativa che ti consente di gestire i pacchetti in un parco. Un pacchetto del parco risorse è un insieme di manifest YAML Kubernetes che definiscono la configurazione del cluster. Utilizzando i pacchetti del parco risorse, puoi eseguire il deployment dei pacchetti tramite un rollout completo o progressivo nei cluster registrati nel parco risorse.

Definisci ogni oggetto FleetPackage una volta e poi puoi aggiornare il pacchetto con una nuova revisione. Quando applichi una nuova revisione, il servizio del pacchetto del parco risorse rileva queste modifiche e le esegue nei cluster.

Vantaggi

Utilizza i pacchetti del parco risorse per eseguire il deployment delle risorse Kubernetes nei cluster registrati in un parco risorse. Dopo aver creato e applicato un pacchetto della flotta, il pacchetto della flotta esegue automaticamente il deployment dei file di configurazione Kubernetes nel repository Git nel nuovo cluster. I pacchetti del parco risorse si basano sui vantaggi di Config Sync, come la correzione automatica della deriva, e offrono i seguenti vantaggi unici:

  • Esegui l'implementazione automatica delle risorse:dopo aver configurato un pacchetto di flotte, le risorse Kubernetes a cui fa riferimento vengono implementate automaticamente dal servizio del pacchetto di flotte su tutti i cluster.

  • Configura automaticamente i nuovi cluster: se configuri un pacchetto del parco risorse e poi aggiungi nuovi cluster a un parco risorse, tutte le risorse definite dal pacchetto del parco risorse vengono implementate automaticamente nel nuovo cluster.

  • Gestisci la configurazione di Kubernetes su larga scala: anziché gestire i cluster uno alla volta, utilizza i pacchetti del parco risorse per eseguire il deployment delle risorse in un intero parco risorse di cluster.

  • Riduci al minimo l'impatto delle modifiche errate: scegli un numero massimo di cluster su cui eseguire il deployment delle risorse contemporaneamente. Puoi monitorare attentamente le modifiche apportate a ciascun cluster per assicurarti che quelle errate non influiscano sull'intero parco.

  • Semplifica la configurazione di Config Sync: i pacchetti del parco risorse utilizzano Cloud Build per autenticarsi in Git, il che significa che devi autenticarti una volta per progetto anziché una volta per oggetto RootSync o RepoSync.

Ti consigliamo di utilizzare Config Sync con oggetti RootSync o RepoSync invece di pacchetti del parco risorse se uno o più dei seguenti scenari si applicano al tuo caso:

  • Gestisci un numero ridotto di cluster.

  • Hai bisogno di un maggiore controllo sul modo in cui le risorse vengono implementate nei tuoi cluster, oltre a quanto fornito dall'API del pacchetto di flotte con etichette e varianti.

Requisiti e limitazioni

  • Solo i repository Git sono supportati come fonte attendibile durante la configurazione di un pacchetto di parchi.

  • Le risorse Kubernetes archiviate in Git devono rappresentare lo stato finale della risorsa. Gli overlay aggiuntivi per trasformare la risorsa archiviata in Git non sono supportati. Per ulteriori informazioni sulle differenze tra queste risorse, consulta la best practice: Crea repository WET.

  • L'API FleetPackage è disponibile solo nella regione us-central1. Puoi comunque eseguire il deployment in cluster in regioni diverse, ma devi configurare Cloud Build e l'interfaccia alla gcloud CLI in us-central1.

Architettura

Puoi utilizzare l'API FleetPackage per eseguire il deployment dei manifest di Kubernetes in un parco di cluster. L'API FleetPackage utilizza Cloud Build per sincronizzare e recuperare le risorse Kubernetes dal tuo repository Git. Il servizio del pacchetto del parco risorse esegue quindi il deployment di queste risorse nei tuoi cluster.

Diagramma che mostra il flusso delle risorse Kubernetes nella sincronizzazione di Git con un parco di cluster

Esempi di casi d'uso

Puoi utilizzare i pacchetti del parco risorse per eseguire il deployment delle risorse da un repository Git all'intero parco risorse di cluster. Puoi anche configurare il pacchetto del parco per controllare come, dove e quali tipi di risorse vengono implementati.

La sezione seguente mostra esempi di diverse configurazioni di FleetPackage. Per informazioni più dettagliate sull'applicazione dei pacchetti del parco risorse, consulta Eseguire il deployment dei pacchetti del parco risorse.

Deployment in tutti i cluster di un parco risorse

Il seguente FleetPackage utilizza una strategia incrementale per eseguire il deployment delle risorse Kubernetes in tre cluster alla volta e ha come target tutti i cluster di un parco risorse:

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 in un sottoinsieme di cluster

Il seguente FleetPackage utilizza un selettore di etichette per eseguire il deployment delle risorse Kubernetes solo nei cluster con l'etichetta di appartenenza country corrispondente a "us" nel parco risorse:

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 delle risorse delle varianti in un cluster

Per questo esempio, nel tuo repository Git è presente una cartella denominata "deployments" che contiene due diverse specifiche di deployment:

Replicas: 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
    

Repliche: 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
    

Puoi utilizzare le varianti per eseguire il deployment di implementazioni "piccole" o "grandi" su cluster diversi. Ogni cluster ha un'etichetta nginx-size=small o nginx-size=large.

FleetPackage in questo esempio sarà simile al seguente:

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']}

Passaggi successivi

Eseguire il deployment dei pacchetti del parco risorse