Gestire i cluster Kubernetes

Google Distributed Cloud (GDC) air-gapped ti consente di gestire i cluster Kubernetes dopo la creazione utilizzando GKE on GDC. Questo servizio ti consente di adattarti ai requisiti in continua evoluzione dei carichi di lavoro dei container e di mantenere i nodi del cluster esistenti con i seguenti flussi di lavoro:

Questo documento è destinato agli amministratori IT del gruppo di amministratori della piattaforma che gestiscono i carichi di lavoro dei container ospitati in cluster che si estendono su più progetti e agli sviluppatori del gruppo di operatori delle applicazioni responsabili della creazione di carichi di lavoro delle applicazioni all'interno di un singolo progetto. Per saperne di più, consulta la sezione Pubblico della documentazione di GDC con air gap.

Prima di iniziare

Per completare le attività descritte in questo documento, devi richiedere le autorizzazioni necessarie e preparare l'ambiente.

Richiedi i ruoli IAM

Devi disporre di ruoli specifici per ottenere le autorizzazioni necessarie per gestire il cluster Kubernetes. I ruoli richiesti dipendono dal fatto che tu stia lavorando all'interno di un cluster condiviso con ambito a livello di organizzazione o di un cluster standard con ambito a livello di progetto. Per saperne di più, consulta la sezione Configurazione dei cluster Kubernetes.

Ruoli del cluster condiviso

Per visualizzare e gestire il cluster Kubernetes condiviso e le relative risorse, chiedi all'amministratore IAM dell'organizzazione di concederti i seguenti ruoli in base all'attività da eseguire:

  • Project Creator (project-creator): crea o visualizza le risorse del progetto. Questo ruolo è necessario per collegare un cluster condiviso a un progetto.

  • Project Editor (project-editor): elimina, aggiorna o visualizza le risorse del progetto. Questo ruolo è necessario per scollegare un cluster condiviso da un progetto.

  • User Cluster Viewer (user-cluster-viewer): visualizza il cluster condiviso e le relative risorse. Questo ruolo fornisce l'accesso alle API del piano di gestione per il cluster condiviso ospitato nel server API di gestione.

Questi ruoli non sono associati a uno spazio dei nomi del progetto.

Ruoli del cluster standard

Per visualizzare il cluster Kubernetes standard e le relative risorse, chiedi all'amministratore IAM del progetto di concederti il ruolo Visualizzatore cluster standard (standard-cluster-viewer). Questo ruolo fornisce l'accesso alle API del piano di gestione per il cluster standard ospitato nel server API di gestione.

Questo ruolo è associato allo spazio dei nomi del progetto.

Prepara l'ambiente

Per eseguire comandi su un cluster Kubernetes utilizzando l'API, assicurati di disporre delle seguenti risorse:

  • Individua il nome del cluster Kubernetes o chiedi a un membro del gruppo di amministratori della piattaforma qual è il nome del cluster.

  • Utilizza il nome del cluster Kubernetes per sostituire CLUSTER_NAME in queste istruzioni.

  • Accedi e genera il file kubeconfig per il server API di gestione.

  • Utilizza il percorso kubeconfig del server API di gestione per sostituire MANAGEMENT_API_SERVER in queste istruzioni.

Sposta i cluster nella gerarchia dei progetti

I progetti forniscono un raggruppamento logico delle istanze di servizio. Puoi aggiungere e rimuovere cluster Kubernetes condivisi dalla gerarchia dei progetti GDC per raggruppare i servizi in modo appropriato. Non puoi spostare i cluster standard nella gerarchia dei progetti perché sono limitati a un singolo progetto.

Collega un progetto a un cluster condiviso

Quando crei un cluster condiviso dalla console GDC, devi collegare almeno un progetto prima di poter eseguire il deployment dei carichi di lavoro dei container. Se devi aggiungere altri progetti a un cluster esistente, completa i seguenti passaggi:

Console

  1. Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.
  2. Nell'elenco dei cluster, fai clic sul nome del cluster per aprire la pagina Dettagli cluster.
  3. Seleziona Collega progetto.
  4. Nell'elenco dei progetti disponibili, fai clic sul nome del progetto da collegare al cluster.
  5. Fai clic su Salva.

API

  • Crea una nuova risorsa personalizzata ProjectBinding per il cluster:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectBinding
    metadata:
      name: CLUSTER_NAME-PROJECT_NAME
      namespace: platform
      labels:
        resourcemanager.gdc.goog/projectbinding-for-user-project: "true"
    spec:
      clusterRef:
       name: CLUSTER_NAME
      selector:
        nameSelector:
          matchNames:
          - PROJECT_NAME
    EOF
    

    Sostituisci quanto segue:

    • MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.
    • CLUSTER_NAME: il nome del cluster.
    • PROJECT_NAME: il nome del progetto a cui associare il cluster. Ogni risorsa ProjectBinding può essere mappata a un solo cluster. Se un progetto richiede l'accesso a più cluster, è necessario creare un ProjectBinding univoco per ogni cluster.

Terraform

  1. In un file di configurazione di Terraform, inserisci il seguente snippet di codice per creare la risorsa personalizzata ProjectBinding:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" {
      manifest = {
        "apiVersion" = "resourcemanager.gdc.goog/v1"
        "kind" = "ProjectBinding"
        "metadata" = {
          "name" = "CLUSTER_NAME-PROJECT_NAME"
          "namespace" = "platform"
          "labels" = {
            "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true"
          }
        }
        "spec" = {
          "clusterRef" = {
            "name" = "CLUSTER_NAME"
          }
          "selector" = {
            "nameSelector" = {
              "matchNames" = [
                "PROJECT_NAME",
              ]
            }
          }
        }
      }
    }
    

    Sostituisci quanto segue:

    • MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.
    • PROJECT_BINDING_RESOURCE_NAME: il nome della risorsa Terraform dell'associazione del progetto, ad esempio CLUSTER_NAME-PROJECT_NAME-binding. Questo nome viene utilizzato da Terraform per identificare l'associazione del progetto e non viene utilizzato da GDC.
    • CLUSTER_NAME: il nome del cluster. Ogni risorsa ProjectBinding può essere mappata a un solo cluster. Se un progetto richiede l'accesso a più cluster, è necessario creare un ProjectBinding univoco per ogni cluster.
    • PROJECT_NAME: il nome del progetto a cui eseguire l'associazione. Ogni risorsa ProjectBinding può essere mappata a un solo cluster. Se un progetto richiede l'accesso a più cluster, è necessario creare un ProjectBinding univoco per ogni cluster.
  2. Applica la nuova associazione del progetto:

    terraform apply
    

Scollega un progetto da un cluster condiviso

Scollegare un progetto da un cluster condiviso può introdurre modifiche significative, ad esempio l'eliminazione dei carichi di lavoro in esecuzione nel cluster. Assicurati di comprendere le conseguenze prima di scollegare un progetto da un cluster condiviso.

Per scollegare un progetto da un cluster condiviso esistente, completa i seguenti passaggi:

Console

  1. Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.
  2. Fai clic sul cluster nell'elenco dei cluster per aprire la pagina Dettagli cluster.
  3. Fai clic su Scollega per il progetto da scollegare dal cluster.

API

  • Elimina la risorsa ProjectBinding che collega il progetto e il cluster:

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \
        CLUSTER_NAME-PROJECT_NAME -n platform
    

    Sostituisci quanto segue:

    • MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.
    • CLUSTER_NAME: il nome del cluster.
    • PROJECT_NAME: il nome del progetto da scollegare dal cluster.

Terraform

  • Elimina la risorsa di associazione del progetto:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    Sostituisci PROJECT_BINDING_RESOURCE_NAME con il nome della risorsa Terraform dell'associazione del progetto da eliminare, ad esempio CLUSTER_NAME-PROJECT_NAME-binding. Questo nome viene utilizzato da Terraform per identificare l'associazione del progetto e non viene utilizzato da GDC.

Visualizza tutti i cluster in un progetto o in un'organizzazione

Puoi visualizzare tutti i cluster Kubernetes disponibili in un progetto o in un'organizzazione, inclusi i relativi stati, le versioni di Kubernetes e altri dettagli.

Poiché i cluster Kubernetes sono una risorsa di zona, puoi elencare i cluster solo per zona.

Console

  1. Nel selettore dei progetti, seleziona il progetto o l'organizzazione.

    I cluster standard sono limitati al progetto e i cluster condivisi sono limitati all'organizzazione. Seleziona l'ambito corretto per visualizzare il tipo di cluster Kubernetes appropriato.

  2. Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.

    Vengono visualizzati tutti i cluster condivisi disponibili nell'organizzazione con i relativi stati e altre informazioni:

    Pagina dei dettagli del cluster per gli stati e altre informazioni per ogni cluster condiviso nell'organizzazione.

gdcloud

  • Elenca i cluster Kubernetes disponibili nella zona:

    gdcloud clusters list
    

    L'output è simile al seguente:

    CLUSTERREF.NAME   READINESS.STATE   TYPE   CURRENTVERSION.USERCLUSTERVERSION     CURRENTVERSION.SUPPORT.STATUS
    user-vm-1         Ready             user   1.15.0-gdch.394225-1.28.15-gke.1200   In Support
    user-vm-2         Ready             user   1.15.0-gdch.394225-1.29.12-gke.800    In Support
    

API

  • Elenca i cluster Kubernetes disponibili nella zona:

    kubectl get clusters.cluster.gdc.goog -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Sostituisci quanto segue:

    • MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.
    • KUBERNETES_CLUSTER_NAMESPACE: lo spazio dei nomi del cluster. Per i cluster condivisi, utilizza lo spazio dei nomi platform. Per i cluster standard, utilizza lo spazio dei nomi del progetto del cluster.

    L'output è simile al seguente:

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

Elenca le versioni di Kubernetes disponibili per un cluster

Puoi elencare le versioni di Kubernetes disponibili nella tua zona GDC per verificare le funzionalità di Kubernetes a cui puoi accedere nel cluster.

  • Elenca le versioni di Kubernetes disponibili nella tua zona:

    kubectl get userclustermetadata.upgrade.private.gdc.goog \
        -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Sostituisci MANAGEMENT_API_SERVER con il file kubeconfig del server API zonale del cluster.

    L'output è simile al seguente:

    K8S-VERSION
    1.25.10-gke.2100
    1.26.5-gke.2100
    1.27.4-gke.500
    

Visualizza le proprietà aggiornabili

Per ogni cluster Kubernetes, è disponibile un insieme di proprietà da modificare dopo la creazione. Puoi modificare solo le proprietà modificabili che si trovano in spec della risorsa personalizzata Cluster. Non tutte le proprietà in spec sono idonee all'aggiornamento dopo il provisioning del cluster. Per visualizzare queste proprietà aggiornabili, completa i seguenti passaggi:

Console

  1. Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.

  2. Nell'elenco dei cluster Kubernetes, fai clic sul nome di un cluster per visualizzarne le proprietà.

  3. Le proprietà modificabili hanno un'icona Modifica.

API

  • Visualizza l'elenco delle proprietà per la specifica Cluster e i valori validi corrispondenti a ogni proprietà:

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Sostituisci MANAGEMENT_API_SERVER con il percorso kubeconfig del server API zonale.

    L'output è simile al seguente:

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDC air-gapped version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDC maintains the cluster versions for
        users. Optional. Mutable.
    

    Aggiorna queste impostazioni utilizzando la console GDC o l'interfaccia a riga di comando kubectl. Ad esempio, puoi ridimensionare un node pool.

Passaggi successivi