Mantén clústeres de Kubernetes

Google Distributed Cloud (GDC) aislado te permite administrar tus clústeres de Kubernetes después de crearlos con GKE en GDC. Este servicio te permite adaptarte a los requisitos cambiantes de la carga de trabajo de los contenedores y mantener los nodos de clúster existentes con los siguientes flujos de trabajo:

Este documento está dirigido a los administradores de TI del grupo de administradores de la plataforma que administran las cargas de trabajo de contenedores alojadas en clústeres que abarcan varios proyectos y a los desarrolladores del grupo de operadores de aplicaciones que son responsables de crear cargas de trabajo de aplicaciones en un solo proyecto. Para obtener más información, consulta Públicos de la documentación de GDC aislado.

Antes de comenzar

Para completar las tareas de este documento, debes solicitar los permisos necesarios y preparar tu entorno.

Solicita roles de IAM

Debes tener roles específicos para obtener los permisos que necesitas para mantener tu clúster de Kubernetes. Los roles que necesitas dependen de si trabajas en un clúster compartido con alcance de organización o en un clúster estándar con alcance de proyecto. Para obtener más información, consulta Configuraciones de clústeres de Kubernetes.

Roles de clúster compartidos

Para ver y mantener tu clúster de Kubernetes compartido y sus recursos, pídele al administrador de la organización de IAM que te otorgue los siguientes roles según la tarea que realizarás:

  • Creador de proyectos (project-creator): Crea o visualiza recursos del proyecto. Este rol es obligatorio para adjuntar un clúster compartido a un proyecto.

  • Editor del proyecto (project-editor): Borra, actualiza o visualiza recursos del proyecto. Este rol es necesario para desconectar un clúster compartido de un proyecto.

  • Visualizador de clústeres de usuario (user-cluster-viewer): Visualiza el clúster compartido y sus recursos. Este rol proporciona acceso a las APIs del plano de administración para el clúster compartido alojado en el servidor de la API de administración.

Estos roles no están vinculados a un espacio de nombres del proyecto.

Roles de clúster estándar

Para ver tu clúster de Kubernetes estándar y sus recursos, pídele al administrador de proyectos de IAM que te otorgue el rol de Visualizador de clústeres estándar (standard-cluster-viewer). Este rol proporciona acceso a las APIs del plano de administración para el clúster estándar alojado en el servidor de la API de administración.

Este rol está vinculado al espacio de nombres de tu proyecto.

Prepara el entorno

Para ejecutar comandos en un clúster de Kubernetes con la API, asegúrate de tener los siguientes recursos:

  • Busca el nombre del clúster de Kubernetes o pregúntale a un miembro del grupo de administradores de la plataforma cuál es el nombre del clúster.

  • Usa el nombre del clúster de Kubernetes para reemplazar CLUSTER_NAME en estas instrucciones.

  • Accede y genera el archivo kubeconfig para el servidor de la API de administración.

  • Usa la ruta de acceso de kubeconfig del servidor de la API de administración para reemplazar MANAGEMENT_API_SERVER en estas instrucciones.

Mueve clústeres en la jerarquía de proyectos

Los proyectos proporcionan una agrupación lógica de las instancias de servicio. Puedes agregar y quitar clústeres de Kubernetes compartidos de la jerarquía de proyectos de GDC para agrupar tus servicios de forma adecuada. No puedes mover clústeres estándar en la jerarquía del proyecto, ya que solo se limitan a un proyecto.

Adjunta el proyecto a un clúster compartido

Cuando creas un clúster compartido desde la consola de GDC, debes adjuntar al menos un proyecto antes de poder implementar cargas de trabajo de contenedores en él de forma correcta. Si debes agregar proyectos adicionales a un clúster existente, completa los siguientes pasos:

Console

  1. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.
  2. En la lista de clústeres, haz clic en el nombre del clúster para abrir la página Detalles del clúster.
  3. Selecciona Adjuntar proyecto.
  4. En la lista de proyectos disponibles, haz clic en el nombre del proyecto que deseas conectar al clúster.
  5. Haz clic en Guardar.

API

  • Crea un recurso personalizado de ProjectBinding nuevo para tu clúster:

    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
    

    Reemplaza lo siguiente:

    • MANAGEMENT_API_SERVER: Es la ruta de acceso de kubeconfig del servidor de la API zonal.
    • CLUSTER_NAME: el nombre del clúster
    • PROJECT_NAME: Es el nombre del proyecto al que se vinculará el clúster. Cada recurso ProjectBinding solo se puede asignar a un clúster. Si un proyecto requiere acceso a varios clústeres, se debe crear un ProjectBinding único para cada clúster.

Terraform

  1. En un archivo de configuración de Terraform, inserta el siguiente fragmento de código para crear el recurso personalizado 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",
              ]
            }
          }
        }
      }
    }
    

    Reemplaza lo siguiente:

    • MANAGEMENT_API_SERVER: Es la ruta de acceso de kubeconfig del servidor de la API zonal.
    • PROJECT_BINDING_RESOURCE_NAME: Es el nombre del recurso de Terraform de la vinculación del proyecto, como CLUSTER_NAME-PROJECT_NAME-binding. Terraform usa este nombre para identificar la vinculación de tu proyecto, y GDC no lo usa.
    • CLUSTER_NAME: el nombre del clúster Cada recurso ProjectBinding solo se puede asignar a un clúster. Si un proyecto requiere acceso a varios clústeres, se debe crear un ProjectBinding único para cada clúster.
    • PROJECT_NAME: Es el nombre del proyecto al que se vinculará. Cada recurso ProjectBinding solo se puede asignar a un clúster. Si un proyecto requiere acceso a varios clústeres, se debe crear un ProjectBinding único para cada clúster.
  2. Aplica la vinculación del proyecto nuevo:

    terraform apply
    

Desconecta un proyecto de un clúster compartido

Desvincular un proyecto de un clúster compartido puede generar cambios significativos, como borrar las cargas de trabajo que se ejecutan en el clúster. Asegúrate de comprender las consecuencias antes de desconectar un proyecto de un clúster compartido.

Para desconectar un proyecto de un clúster compartido existente, completa los siguientes pasos:

Console

  1. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.
  2. Haz clic en el clúster de la lista de clústeres para abrir la página Detalles del clúster.
  3. Haz clic en Desvincular para que el proyecto se desvincule del clúster.

API

  • Borra el recurso ProjectBinding que vincula el proyecto y el clúster:

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

    Reemplaza lo siguiente:

    • MANAGEMENT_API_SERVER: Es la ruta de acceso de kubeconfig del servidor de la API zonal.
    • CLUSTER_NAME: el nombre del clúster
    • PROJECT_NAME: Es el nombre del proyecto que se desconectará del clúster.

Terraform

  • Borra el recurso de vinculación del proyecto:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    Reemplaza PROJECT_BINDING_RESOURCE_NAME por el nombre del recurso de Terraform de la vinculación del proyecto que deseas borrar, como CLUSTER_NAME-PROJECT_NAME-binding. Terraform usa este nombre para identificar la vinculación de tu proyecto, y GDC no lo usa.

Visualiza todos los clústeres de un proyecto o una organización

Puedes ver todos los clústeres de Kubernetes disponibles en un proyecto o una organización, incluidos sus estados, versiones de Kubernetes y otros detalles.

Como los clústeres de Kubernetes son un recurso zonal, solo puedes enumerar los clústeres por zona.

Console

  1. En el selector de proyectos, elige tu proyecto u organización.

    Los clústeres estándar tienen alcance de proyecto y los clústeres compartidos tienen alcance de organización. Selecciona el permiso correcto para ver el tipo de clúster de Kubernetes adecuado.

  2. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.

    Se muestran todos los clústeres compartidos disponibles en la organización con sus estados y otra información:

    Página de detalles del clúster para ver los estados y otra información de cada clúster compartido de la organización

gdcloud

  • Enumera los clústeres de Kubernetes disponibles en la zona:

    gdcloud clusters list
    

    El resultado es similar a lo siguiente:

    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

  • Enumera los clústeres de Kubernetes disponibles en la zona:

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

    Reemplaza lo siguiente:

    • MANAGEMENT_API_SERVER: la ruta de acceso de kubeconfig del servidor de la API zonal.
    • KUBERNETES_CLUSTER_NAMESPACE: Es el espacio de nombres del clúster. Para los clústeres compartidos, usa el espacio de nombres platform. Para los clústeres estándar, usa el espacio de nombres del proyecto del clúster.

    El resultado es similar a lo siguiente:

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

Enumera las versiones de Kubernetes disponibles para un clúster

Puedes enumerar las versiones de Kubernetes disponibles en tu zona de GDC para verificar las funciones de Kubernetes a las que puedes acceder en el clúster.

  • Enumera las versiones de Kubernetes disponibles en tu zona:

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

    Reemplaza MANAGEMENT_API_SERVER por el archivo kubeconfig del servidor de la API zonal de tu clúster.

    El resultado es similar al siguiente:

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

Cómo ver las propiedades actualizables

Para cada clúster de Kubernetes, hay un conjunto de propiedades disponibles que se pueden cambiar después de crearlo. Solo puedes cambiar las propiedades mutables que se encuentran en el spec del recurso personalizado Cluster. No todas las propiedades de spec se pueden actualizar después de que se aprovisiona el clúster. Para ver estas propiedades actualizables, completa los siguientes pasos:

Console

  1. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.

  2. En la lista de clústeres de Kubernetes, haz clic en el nombre de un clúster para ver sus propiedades.

  3. Las propiedades editables tienen un ícono de Editar.

API

  • Consulta la lista de propiedades de la especificación Cluster y los valores válidos correspondientes a cada propiedad:

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

    Reemplaza MANAGEMENT_API_SERVER por la ruta de acceso de kubeconfig del servidor de la API zonal.

    El resultado es similar a lo siguiente:

    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.
    

    Actualiza estos parámetros de configuración con la consola de GDC o la CLI de kubectl. Por ejemplo, puedes cambiar el tamaño de un grupo de nodos.

¿Qué sigue?