Esegui il deployment di un database di vettori Qdrant su GKE


Questa guida mostra come eseguire il deployment di un cluster di database di vettori Qdrant su Google Kubernetes Engine (GKE).

I database vettoriali sono datastore progettati specificamente per gestire ed eseguire ricerche in grandi raccolte di vettori ad alta dimensionalità. Questi vettori rappresentare dati come testo, immagini, audio, video o qualsiasi altro dato che può essere numerico codificati. A differenza dei database tradizionali che si basano su corrispondenze esatte, i database vettoriali sono specializzati nella ricerca di elementi simili o nell'identificazione di pattern all'interno di set di dati enormi. Queste caratteristiche rendono Qdrant una scelta adatta per una vasta gamma di applicazioni, tra cui la corrispondenza basata sulla rete neurale o la corrispondenza semantica, la ricerca tramite facet e altro ancora. Qdrant non funziona solo come database di vettori, ma anche come motore di ricerca di somiglianze vettoriali.

Questo tutorial è destinato ad amministratori e architetti di piattaforme cloud, ML engineer e MLOps Professionisti (DevOps) interessati a eseguire il deployment del database Qdrant su GKE.

Vantaggi

Qdrant offre i seguenti vantaggi:

  • Ampia gamma di librerie per vari linguaggi di programmazione e API aperte da integrare con altri servizi.
  • Scalabilità orizzontale e supporto per lo sharding e la replica che semplificano la scalabilità e l'alta disponibilità.
  • Supporto di container e Kubernetes che consente il deployment e la gestione in ambienti cloud-native moderni.
  • Payload flessibili con filtro avanzato per adattare con precisione i criteri di ricerca.
  • Diverse opzioni di quantizzazione e altre ottimizzazioni per ridurre i costi dell'infrastruttura e migliorare le prestazioni.

Obiettivi

In questo tutorial imparerai a:

  • Pianifica ed esegui il deployment dell'infrastruttura GKE per Qdrant.
  • Esegui il deployment dell'operatore StatefulHA per garantire l'alta disponibilità di Qdrant.
  • Eseguire il deployment e configurare il cluster Qdrant.
  • Caricare un set di dati demo ed eseguire una semplice query di ricerca.
  • Raccogliere metriche ed eseguire una dashboard.

Architettura di deployment

Questa architettura configura un servizio GKE scalabile e a tolleranza di errore cluster per Qdrant in più zone di disponibilità, garantendo tempi di attività con aggiornamenti in sequenza e interruzioni minime. Include l'utilizzo dell'operatore StatefulHA per una gestione efficiente del failover. Per ulteriori informazioni, consulta Cluster regionali.

Diagramma dell'architettura

Il seguente diagramma mostra un cluster Qdrant in esecuzione su più nodi e zone in un cluster GKE:

Architettura di deployment di Qdrant

In questa architettura, il deployment di Qdrant StatefulSet viene eseguito in tre nodi in tre zone diverse.

  • Puoi controllare il modo in cui GKE distribuisce i pod tra i nodi configurando le regole di affinità dei pod e i vincoli di distribuzione della topologia necessari nel file dei valori del grafico Helm.
  • Se una zona non funziona, GKE riprogramma i pod sui nuovi nodi in base alla configurazione consigliata.

Per la persistenza dei dati, l'architettura in questo tutorial ha le seguenti caratteristiche:

  • Utilizza le impostazioni regionali Dischi SSD (regional-pd StorageClass personalizzato) per i dati persistenti. Consigliamo i dischi SSD regionali per i database grazie alla loro bassa latenza e agli elevati IOPS.
  • Tutti i dati del disco vengono replicati tra le zone principali e secondarie della regione, aumentando la tolleranza ai potenziali errori delle zone.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

In questo tutorial utilizzerai Cloud Shell per . Cloud Shell è un ambiente shell per la gestione di risorse ospitate su Google Cloud. È preinstallato Google Cloud CLI, kubectl, Helm e Terraform a riga di comando. Se non utilizzi Cloud Shell, devi installare Google Cloud CLI.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Resource Manager, Compute Engine, GKE, IAM Service Account Credentials, and Backup for GKE APIs:

    gcloud services enable cloudresourcemanager.googleapis.com compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com gkebackup.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Resource Manager, Compute Engine, GKE, IAM Service Account Credentials, and Backup for GKE APIs:

    gcloud services enable cloudresourcemanager.googleapis.com compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com gkebackup.googleapis.com
  12. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/storage.objectViewer, roles/container.admin, roles/iam.serviceAccountAdmin, roles/compute.admin, roles/gkebackup.admin, roles/monitoring.viewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

Configura l'ambiente

Per configurare l'ambiente con Cloud Shell, segui questi passaggi:

  1. Imposta le variabili di ambiente per il progetto, la regione e un prefisso della risorsa del cluster Kubernetes:

    Ai fini di questo tutorial, utilizza la regione us-central1 per creare il tuo deployment Google Cloud.

    export PROJECT_ID=PROJECT_ID
    export KUBERNETES_CLUSTER_PREFIX=qdrant
    export REGION=us-central1
    
    • Sostituisci PROJECT_ID con il tuo ID progetto Google Cloud.
  2. Controlla la versione di Helm:

    helm version
    

    Aggiorna la versione se è precedente alla 3.13:

    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
  3. Clona il repository di codice campione da GitHub:

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. Vai alla directory qdrant per iniziare a creare le risorse di deployment:

    cd kubernetes-engine-samples/databases/qdrant
    

Crea l'infrastruttura del tuo cluster

Questa sezione prevede l'esecuzione di uno script Terraform per creare un cluster GKE regionale privato e ad alta disponibilità per eseguire il deployment del database Qdrant.

Puoi scegliere di eseguire il deployment di Qdrant utilizzando un cluster standard o Autopilot. Ognuno ha i suoi vantaggi e modelli di determinazione dei prezzi diversi.

Autopilot

Il seguente diagramma mostra un cluster GKE regionale Autopilot impiegato in tre zone diverse.

Cluster GKE Autopilot

Per eseguire il deployment dell'infrastruttura del cluster, esegui i seguenti comandi in Cloud Shell:

export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-autopilot init
terraform -chdir=terraform/gke-autopilot apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}

Le seguenti variabili vengono sostituite in fase di runtime:

  • GOOGLE_OAUTH_ACCESS_TOKEN: sostituito da un token di accesso recuperato da gcloud auth print-access-token per autenticare le interazioni con varie API Google Cloud
  • PROJECT_ID, REGION e KUBERNETES_CLUSTER_PREFIX sono l'ambiente variabili definite nella sezione Configura il tuo ambiente e assegnate alle nuove variabili pertinenti per il cluster Autopilot che stai creando.

Quando richiesto, digita yes.

L'output è simile al seguente:

...
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.

Outputs:

kubectl_connection_command = "gcloud container clusters get-credentials qdrant-cluster --region us-central1"

Terraform crea le seguenti risorse:

  • Una rete VPC personalizzata e una subnet privata per i nodi Kubernetes.
  • Un router Cloud per accedere a internet tramite Network Address Translation (NAT).
  • Un cluster GKE privato nella regione us-central1.
  • Un ServiceAccount con autorizzazioni di logging e monitoraggio per il cluster.
  • Configurazione di Google Cloud Managed Service per Prometheus per il monitoraggio e l'invio di avvisi per i cluster.

Standard

Il seguente diagramma mostra un cluster GKE regionale privato standard di cui è stato eseguito il deployment in tre zone diverse.

Cluster GKE Standard

Per eseguire il deployment dell'infrastruttura del cluster, esegui i seguenti comandi in Cloud Shell:

export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-standard init
terraform -chdir=terraform/gke-standard apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}

Le seguenti variabili vengono sostituite in fase di runtime:

  • GOOGLE_OAUTH_ACCESS_TOKEN è stato sostituito da un token di accesso recuperato da gcloud auth print-access-token per autenticare le interazioni con vari le API Google Cloud.
  • PROJECT_ID, REGION e KUBERNETES_CLUSTER_PREFIX sono le variabili di ambiente definite nella sezione Configurare l'ambiente e assegnate alle nuove variabili pertinenti per il cluster standard che stai creando.

Quando richiesto, digita yes. Potrebbero essere necessari diversi minuti prima che questi comandi vengano completati e che il cluster mostri lo stato di disponibilità.

L'output è simile al seguente:

...
Apply complete! Resources: 10 added, 0 changed, 0 destroyed.

Outputs:

kubectl_connection_command = "gcloud container clusters get-credentials qdrant-cluster --region us-central1"

Terraform crea le seguenti risorse:

  • Una rete VPC personalizzata e una subnet privata per i nodi Kubernetes.
  • Un router Cloud per accedere a internet tramite Network Address Translation (NAT).
  • Un cluster GKE privato nella regione us-central1 con scalabilità automatica abilitata (da uno a due nodi per zona).
  • Un'ServiceAccount con autorizzazioni di logging e monitoraggio per il cluster.
  • Configurazione di Google Cloud Managed Service per Prometheus per il monitoraggio e gli avvisi dei cluster.

Connettiti al cluster

Configura kubectl per recuperare le credenziali e comunicare con il nuovo cluster GKE:

gcloud container clusters get-credentials \
    ${KUBERNETES_CLUSTER_PREFIX}-cluster --region ${REGION}

Esegui il deployment del database Qdrant nel cluster

In questo tutorial, eseguirai il deployment del database Qdrant (in modalità distribuita) e l'operatore stateful ad alta disponibilità al cluster GKE utilizzando il grafico Helm.

Il deployment crea un cluster GKE con la seguente configurazione:

  • Tre repliche dei nodi Qdrant.
  • Vengono configurate le tolleranze, le affinità dei nodi e i vincoli di diffusione della topologia per garantire la corretta distribuzione tra i nodi Kubernetes. Vengono sfruttati i pool di nodi e le diverse zone di disponibilità.
  • Viene eseguito il provisioning di un volume RePD con il tipo di disco SSD per l'archiviazione dei dati.
  • Un operatore HA stateful viene utilizzato per gestire i processi di failover e garantire un'alta disponibilità.
  • Per l'autenticazione, il database crea un secret di Kubernetes contenente la chiave API.

Per utilizzare il grafico Helm per eseguire il deployment del database Qdrant:

  1. Attiva il componente aggiuntivo StatefulHA:

    Autopilot

    GKE abilita automaticamente il componente aggiuntivo StatefulHA durante la creazione del cluster.

    Standard

    Esegui questo comando:

    gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \
        --project=${PROJECT_ID} \
        --region=${REGION} \
        --update-addons=StatefulHA=ENABLED
    

    Il completamento di questo comando e la visualizzazione dello stato di disponibilità del cluster potrebbero richiedere 15 minuti.

  2. Aggiungi il repository del grafico Helm del database Qdrant prima di poterlo eseguire sul tuo cluster GKE:

    helm repo add qdrant https://qdrant.github.io/qdrant-helm
    
  3. Crea lo spazio dei nomi qdrant per il database:

    kubectl create ns qdrant
    
  4. Applica il manifest per creare un disco SSD permanente a livello di regione StorageClass:

    kubectl apply -n qdrant -f manifests/01-regional-pd/regional-pd.yaml
    

    Il manifest regional-pd.yaml descrive il disco SSD permanente StorageClass:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    allowVolumeExpansion: true
    metadata:
      name: ha-regional
    parameters:
      replication-type: regional-pd
      type: pd-ssd
      availability-class: regional-hard-failover
    provisioner: pd.csi.storage.gke.io
    reclaimPolicy: Retain
    volumeBindingMode: WaitForFirstConsumer
  5. Esegui il deployment di un ConfigMap Kubernetes con una configurazione di sidecar metrics e un cluster Qdrant utilizzando Helm:

    kubectl apply -n qdrant -f manifests/03-prometheus-metrics/metrics-cm.yaml
    helm install qdrant-database qdrant/qdrant -n qdrant \
    -f manifests/02-values-file/values.yaml
    

    Il file manifest metrics-cm.yaml descrive il file collaterale metrics ConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-conf
    data:
      default.conf.template: |
        server {
          listen 80;
          location / {
            proxy_pass http://localhost:6333/metrics;
            proxy_http_version 1.1;
            proxy_set_header Host $http_host;
            proxy_set_header api-key ${QDRANT_APIKEY};
            proxy_set_header X-Forwarded-For $remote_addr;
          }
        }

    Il manifest values.yaml descrive la configurazione del cluster Qdrant:

    replicaCount: 3
    
    config:
      cluster:
        enabled: true
      storage:
        optimizers:
          deleted_threshold: 0.5
          vacuum_min_vector_number: 1500
          default_segment_number: 2
          max_segment_size_kb: null
          memmap_threshold_kb: null
          indexing_threshold_kb: 25000
          flush_interval_sec: 5
          max_optimization_threads: 1
    
    livenessProbe:
      enabled: true
      initialDelaySeconds: 60
    
    resources:
      limits:
        cpu: "2"
        memory: 4Gi
      requests:
        cpu: "1"
        memory: 4Gi
    
    tolerations:
      - key: "app.stateful/component"
        operator: "Equal"
        value: "qdrant"
        effect: NoSchedule
    
    affinity:
      nodeAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: "app.stateful/component"
              operator: In
              values:
              - "qdrant"
    
    topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: "topology.kubernetes.io/zone"
        whenUnsatisfiable: ScheduleAnyway
        labelSelector:
          matchLabels:
            app.kubernetes.io/name: qdrant
            app.kubernetes.io/instance: qdrant
    
    podDisruptionBudget:
      enabled: true
      maxUnavailable: 1
    
    persistence:
      accessModes: ["ReadWriteOnce"]
      size: 10Gi
      storageClassName: ha-regional
    
    apiKey: true
    
    sidecarContainers:
      - name: metrics
        image: nginx:1.27
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80
        env:
        - name: QDRANT_APIKEY 
          valueFrom:
            secretKeyRef:
              name: qdrant-database-apikey          
              key: api-key
        volumeMounts:
            - name: nginx-conf
              mountPath: /etc/nginx/templates/default.conf.template
              subPath: default.conf.template
              readOnly: true
    additionalVolumes:
      - name: nginx-conf
        configMap:
          name: nginx-conf
          items:
            - key: default.conf.template
              path: default.conf.template 

    Questa configurazione abilita la modalità cluster, consentendoti di impostare un un cluster Qdrant disponibile e distribuito.

  6. Aggiungi un'etichetta allo statefulset Qdrant:

    kubectl label statefulset qdrant-database examples.ai.gke.io/source=qdrant-guide -n qdrant
    
  7. Esegui il deployment di un bilanciatore del carico interno per accedere al database Qdrant in esecuzione nella stessa VPC del tuo cluster GKE:

    kubectl apply -n qdrant -f manifests/02-values-file/ilb.yaml
    

    Il manifest ilb.yaml descrive il servizio LoadBalancer:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        #cloud.google.com/neg: '{"ingress": true}'
        networking.gke.io/load-balancer-type: "Internal"
      labels:
        app.kubernetes.io/name: qdrant
      name: qdrant-ilb
    spec:
      ports:
      - name: http
        port: 6333
        protocol: TCP
        targetPort: 6333
      - name: grpc
        port: 6334
        protocol: TCP
        targetPort: 6334
      selector:
        app: qdrant
        app.kubernetes.io/instance: qdrant-database
      type: LoadBalancer
  8. Controlla lo stato del deployment:

    helm ls -n qdrant
    

    Se il deployment del database qdrant viene eseguito correttamente, l'output è simile al seguente:

    NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
    qdrant-database  qdrant          1               2024-02-06 20:21:15.737307567 +0000 UTC deployed        qdrant-0.7.6    v1.7.4
    
  9. Attendi che GKE avvii i carichi di lavoro richiesti:

    kubectl wait pods -l app.kubernetes.io/instance=qdrant-database --for condition=Ready --timeout=300s -n qdrant
    

    Il completamento di questo comando potrebbe richiedere alcuni minuti.

  10. Dopo che GKE avvia i carichi di lavoro, verifica che GKE abbia creato carichi di lavoro Qdrant:

    kubectl get pod,svc,statefulset,pdb,secret -n qdrant
    
  11. Avvia la risorsa HighAvailabilityApplication (HAA) per Qdrant:

    kubectl apply -n qdrant -f manifests/01-regional-pd/ha-app.yaml
    

    Il manifest ha-app.yaml descrive la risorsa HighAvailabilityApplication:

    kind: HighAvailabilityApplication
    apiVersion: ha.gke.io/v1
    metadata:
      name: qdrant-database
      namespace: qdrant
    spec:
      resourceSelection:
        resourceKind: StatefulSet
      policy:
        storageSettings:
          requireRegionalStorage: true
        failoverSettings:
          forceDeleteStrategy: AfterNodeUnreachable
          afterNodeUnreachable:
            afterNodeUnreachableSeconds: 20 # 60 seconds total

    Per il cluster Qdrant vengono create le seguenti risorse GKE:

    • Qdrant StatefulSet che controlla tre repliche di pod.
    • A PodDisruptionBudget, garantendo un massimo di una replica non disponibile.
    • Il servizio qdrant-database, che espone la porta Qdrant per le connessioni in entrata e la replica tra i nodi.
    • Il servizio qdrant-database-headless, che fornisce l'elenco dei pod Qdrant in esecuzione.
    • Il secret qdrant-database-apikey, che facilita la connessione sicura al database.
    • Pod dell'operatore HA stateful e risorsa HighlyAvailableApplication che monitora attivamente l'applicazione Qdrant. La risorsa HighlyAvailableApplication definisce le regole di failover da applicare a Qdrant.
  12. Per verificare se le regole di failover sono state applicate, descrivi la risorsa e conferma Status: Message: Application is protected.

    kubectl describe highavailabilityapplication qdrant-database -n qdrant
    

    L'output è simile al seguente:

    Status:
    Conditions:
        Last Transition Time:  2023-11-30T09:54:52Z
        Message:               Application is protected
        Observed Generation:   1
        Reason:                ApplicationProtected
        Status:                True
        Type:                  Protected
    

Carica il set di dati ed esegui query di ricerca con Jupyter Notebook

Qdrant organizza vettori e payload in raccolte. L'embedding vettoriale è una tecnica che rappresenta parole o entità come vettori numerici mantenendo al contempo le loro relazioni semantiche. Questo è importante per le ricerche di somiglianza perché consente di trovare somiglianze in base al significato anziché a corrispondenze esatte, rendendo le attività come i sistemi di ricerca e consigli più efficaci e sfumati.

Questa sezione spiega come caricare i vettori in una nuova raccolta di Qdrant ed eseguire query di ricerca.

In questo esempio, utilizzi un set di dati di un file CSV contenente un elenco di libri di generi diversi. Qdrant fungerà da motore di ricerca e il pod del blocco note Jupyter che crei fungerà da client che esegue query sul database Qdrant.

  1. Crea gli oggetti ConfigMap books-dataset e demo-app ed esegui il deployment del blocco note Jupyter:

    kubectl create -n qdrant configmap books-dataset --from-file=manifests/04-notebook/dataset.csv
    kubectl create -n qdrant configmap notebook --from-file=manifests/04-notebook/vector-database.ipynb
    kubectl apply -n qdrant -f manifests/04-notebook/jupyter.yaml
    
    • Il secret denominato qdrant-apikey creato in precedenza è montato sul client Pod come variabile di ambiente denominata APIKEY.
    • Il ConfigMap books-dataset contiene un file csv con i dati dei libri per la raccolta Qdrant
    • Il ConfigMap notebook contiene il blocco note Jupyter per creare Raccolta Qdrant di books-dataset.
  2. Attendi che GKE avvii il pod Jupyter:

    kubectl wait pods -l app=jupyter-notebook --for condition=Ready --timeout=300s -n qdrant
    
  3. Apri questo URL e fai clic sul file vector-database.ipynb. Premi Esegui -> Corsa tutte le celle. Jupyter eseguirà tutto il codice ed eseguirà una query di ricerca.

    Questa query esegue una ricerca semantica sulla tua raccolta my_books in Qdrant, recupera un massimo di due risultati con il punteggio di corrispondenza più alto pertinente al testo della query.

    Stampa ogni risultato separato da una riga di trattini, nel seguente formato :

    • Title: titolo del libro
    • Author: autore del libro
    • Description: come memorizzato nel campo dei metadati description del documento
    • Published: data di pubblicazione del libro
    • Score: il punteggio di pertinenza di Qdrant

    L'output è simile al seguente:

    Title: Romeo and Juliet
    Author: William Shakespeare, Paul Werstine (Editor), Barbara A. Mowat (Editor),
    Paavo Emil Cajander (Translator)
    Description: In Romeo and Juliet, Shakespeare creates a violent world, in which
    two young people fall in love. It is not simply that their families disapprove;
    the Montagues and the Capulets are engaged in a blood feud.In this death-filled
    setting, the movement from love at first sight to the lovers' final union in
    death seems almost inevitable. And yet, this play set in an extraordinary world
    has become the quintessential story of young love. In part because of its exquisite
    language, it is easy to respond as if it were about all young lovers. Published: 01/01/04
    Score: 0.8935013
    -----
    Title: The Unbearable Lightness of Being
    Author: Milan Kundera, Michael Henry Heim (Translator)
    Description: In The Unbearable Lightness of Being, Milan Kundera tells the story
    of a young woman in love with a man torn between his love for her and his incorrigible
    womanizing and one of his mistresses and her humbly faithful lover. This magnificent
    novel juxtaposes geographically distant places, brilliant and playful reflections,
    and a variety of styles, to take its place as perhaps the major achievement of
    one of the world's truly great writers. Published: 10/27/09
    Score: 0.8931863
    -----
    

Visualizza le metriche di Prometheus per il tuo cluster

Il cluster GKE è configurato con Google Cloud Managed Service per Prometheus, che consente la raccolta delle metriche nel formato Prometheus. Questo servizio fornisce una soluzione completamente gestita per il monitoraggio e l'invio di avvisi, consentendo la raccolta, lo stoccaggio e l'analisi delle metriche del cluster e delle relative applicazioni.

Il seguente diagramma mostra come Prometheus raccoglie le metriche per il cluster:

Raccolta delle metriche di Prometheus

Il cluster privato GKE nel diagramma contiene i seguenti componenti:

  • Pod Qdrant che espongono le metriche sul percorso / e sulla porta 80. Queste metriche sono forniti dal container collaterale denominato metrics.
  • Collettori basati su Prometheus che elaborano le metriche dai pod Qdrant.
  • Una risorsa PodMonitoring che invia le metriche a Cloud Monitoring.

Per esportare e visualizzare le metriche, segui questi passaggi:

  1. Crea la PodMonitoring risorsa per eseguire lo scraping delle metriche in base a labelSelector:

    kubectl apply -n qdrant -f manifests/03-prometheus-metrics/pod-monitoring.yaml
    

    Il manifest pod-monitoring.yaml descrive la risorsa PodMonitoring:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: qdrant
    spec:
      selector:
        matchLabels:
          app: qdrant
          app.kubernetes.io/instance: qdrant-database
      endpoints:
      - port: 80
        interval: 30s
        path: / 
  2. Crea una dashboard di Cloud Monitoring con le configurazioni definite in dashboard.json :

    gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.json
    
  3. Una volta eseguito correttamente il comando, vai alle dashboard di Cloud Monitoring:

    Vai alla panoramica delle dashboard

  4. Dall'elenco delle dashboard, apri la dashboard Qdrant Overview. Potrebbe impiegano 1-2 minuti per raccogliere e visualizzare le metriche.

    La dashboard mostra un conteggio delle metriche chiave:

    • Raccolte
    • Vettori incorporati
    • Operazioni in attesa
    • Nodi in esecuzione

Esegui il backup della configurazione del cluster

La funzionalità Backup per GKE consente di pianificare backup regolari dell'intera configurazione del cluster GKE, inclusi i carichi di lavoro di cui è stato eseguito il deployment e i relativi dati.

In questo tutorial configurerai un piano di backup per l'esecuzione del tuo cluster GKE backup di tutti i carichi di lavoro, inclusi secret e volumi, ogni giorno alle 03:00. Per garantire una gestione efficiente dello spazio di archiviazione, i backup che risalgono a più di tre giorni fa verranno eliminati automaticamente.

Per configurare i piani di backup:

  1. Abilita la funzionalità Backup per GKE per il cluster:

    gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \
    --project=${PROJECT_ID} \
    --region=${REGION} \
    --update-addons=BackupRestore=ENABLED
    
  2. Crea un piano di backup con una pianificazione giornaliera per tutti gli spazi dei nomi all'interno del cluster:

    gcloud beta container backup-restore backup-plans create ${KUBERNETES_CLUSTER_PREFIX}-cluster-backup \
    --project=${PROJECT_ID} \
    --location=${REGION} \
    --cluster="projects/${PROJECT_ID}/locations/${REGION}/clusters/${KUBERNETES_CLUSTER_PREFIX}-cluster" \
    --all-namespaces \
    --include-secrets \
    --include-volume-data \
    --cron-schedule="0 3 * * *" \
    --backup-retain-days=3
    

    Il comando utilizza le variabili di ambiente pertinenti in fase di esecuzione.

    Il formato del nome del cluster è relativo al progetto e alla regione come segue:

    projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
    

    Quando richiesto, digita y.. L'output è simile al seguente:

    Create request issued for: [qdrant-cluster-backup]
    Waiting for operation [projects/PROJECT_ID/locations/us-central1/operations/operation-1706528750815-610142ffdc9ac-71be4a05-f61c99fc] to complete...⠹
    

    Questa operazione potrebbe richiedere alcuni minuti. Dopo il completa, l'output è simile al seguente:

    Created backup plan [qdrant-cluster-backup].
    
  3. Puoi visualizzare il piano di backup qdrant-cluster-backup appena creato nell'elenco la console Backup per GKE.

    Vai a Backup per GKE

Se vuoi ripristinare le configurazioni di backup salvate, consulta Ripristinare un backup.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per evitare la fatturazione è eliminare il progetto per cui questo tutorial.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Se hai eliminato il progetto, la pulizia è stata completata. Se non hai eliminato il progetto, procedi con l'eliminazione delle singole risorse.

Elimina singole risorse

  1. Imposta le variabili di ambiente.

    export PROJECT_ID=${PROJECT_ID}
    export KUBERNETES_CLUSTER_PREFIX=qdrant
    export REGION=us-central1
    
  2. Esegui il comando terraform destroy:

    export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
    terraform  -chdir=terraform/FOLDER destroy \
    -var project_id=${PROJECT_ID} \
    -var region=${REGION} \
    -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
    

    Sostituisci FOLDER con gke-autopilot o gke-standard, a seconda del tipo di cluster GKE che hai creato.

    Quando richiesto, digita yes.

  3. Trova tutti i dischi scollegati:

    export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,region)")
    
  4. Elimina i dischi:

    for i in $disk_list; do
     disk_name=$(echo $i| cut -d'|' -f1)
     disk_region=$(echo $i| cut -d'|' -f2|sed 's|.*/||')
     echo "Deleting $disk_name"
     gcloud compute disks delete $disk_name --region $disk_region --quiet
    done
    
  5. Elimina il repository GitHub:

    rm -r ~/kubernetes-engine-samples/
    

Passaggi successivi