Gestire i cluster Kubernetes

Google Distributed Cloud (GDC) con air gap ti consente di gestire i tuoi cluster Kubernetes dopo la creazione utilizzando GKE su GDC. Questo servizio ti consente di adattarti alle mutevoli esigenze dei workload dei container e di mantenere i nodi del cluster esistenti con i seguenti workflow:

Questo documento è rivolto agli amministratori IT del gruppo di amministratori della piattaforma che gestiscono i workload dei container ospitati in cluster che si estendono su più progetti e agli sviluppatori del gruppo di operatori delle applicazioni responsabili della creazione dei workload delle applicazioni all'interno di un singolo progetto. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per 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 ruoli IAM

Devi disporre di ruoli specifici per ottenere le autorizzazioni necessarie per gestire il tuo cluster Kubernetes. I ruoli necessari 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 Configurazioni dei cluster Kubernetes.

Ruoli cluster condivisi

Per visualizzare e gestire il cluster Kubernetes condiviso e le relative risorse, chiedi all'amministratore dell'organizzazione IAM 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.

  • Editor progetto (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 cluster standard

Per visualizzare il cluster Kubernetes standard e le relative risorse, chiedi all'amministratore del progetto IAM 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 tuoi servizi in modo appropriato. Non puoi spostare i cluster standard nella gerarchia dei progetti, poiché hanno come ambito un singolo progetto.

Collega il 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 workload 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 tuo 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 di zona.
    • 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 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 di zona.
    • 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 il progetto da un cluster condiviso

Lo scollegamento di un progetto da un cluster condiviso può introdurre modifiche significative, come l'eliminazione dei workload 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 di zona.
    • 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 un'organizzazione

Puoi visualizzare tutti i cluster Kubernetes disponibili in un progetto o 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 di progetti, seleziona il tuo progetto o la tua organizzazione.

    I cluster standard hanno un ambito a livello di progetto, mentre i cluster condivisi hanno un ambito a livello di 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 di zona.
    • 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 di zona del tuo 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à che possono essere modificate 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 per l'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 ciascuna proprietà:

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

    Sostituisci MANAGEMENT_API_SERVER con il percorso kubeconfig del server API di zona.

    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