Mantener clústeres de Kubernetes

Google Distributed Cloud (GDC) air-gapped te permite gestionar tus clústeres de Kubernetes después de crearlos con GKE en GDC. Este servicio te permite adaptarte a los requisitos cambiantes de tus cargas de trabajo de contenedores y mantener los nodos de clúster con los siguientes flujos de trabajo:

Este documento está dirigido a los administradores de TI del grupo de administradores de la plataforma que gestionan cargas de trabajo de contenedores alojadas en clústeres que abarcan varios proyectos, así como a los desarrolladores del grupo de operadores de aplicaciones que se encargan de crear cargas de trabajo de aplicaciones en un solo proyecto. Para obtener más información, consulta Audiencias de la documentación aislada de GDC.

Antes de empezar

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

Solicitar roles de gestión de identidades y accesos

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 ámbito de organización o en un clúster estándar con ámbito de proyecto. Para obtener más información, consulta las configuraciones de clústeres de Kubernetes.

Roles de clúster compartidos

Para ver y mantener tu clúster de Kubernetes compartido y sus recursos, pide al administrador de gestión de identidades y accesos de tu organización que te asigne los siguientes roles en función de la tarea que quieras realizar:

  • Creador de proyectos (project-creator): crea o consulta recursos de proyectos. Este rol es necesario para asociar un clúster compartido a un proyecto.

  • Editor de proyectos (project-editor): elimina, actualiza o consulta recursos de proyectos. Este rol es necesario para desvincular un clúster compartido de un proyecto.

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

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

Roles de clúster estándar

Para ver tu clúster de Kubernetes estándar y sus recursos, pide al administrador de gestión de identidades y accesos de tu proyecto que te conceda el rol Lector de clúster estándar (standard-cluster-viewer). Este rol proporciona acceso a las APIs del plano de gestión del clúster estándar alojado en el servidor de la API de gestión.

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

Prepara tu entorno

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

  • Busca el nombre del clúster de Kubernetes o pregunta 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 sustituir CLUSTER_NAME en estas instrucciones.

  • Inicia sesión y genera el archivo kubeconfig del servidor de la API de gestión.

  • Usa la ruta kubeconfig del servidor de la API de gestión para sustituir MANAGEMENT_API_SERVER en estas instrucciones.

Mover clústeres en la jerarquía de proyectos

Los proyectos proporcionan una agrupación lógica de las instancias de servicio. Puedes añadir 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 de proyectos, ya que solo se aplican a un proyecto.

Adjuntar un proyecto a un clúster compartido

Cuando creas un clúster compartido desde la consola de GDC, debes adjuntar al menos un proyecto para poder desplegar cargas de trabajo de contenedores en él. Si tienes que añadir más proyectos a un clúster, sigue estos pasos:

Consola

  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, haga clic en el nombre del proyecto al que quiera adjuntar el clúster.
  5. Haz clic en Guardar.

API

  • Crea un recurso personalizado ProjectBinding 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
    

    Haz los cambios siguientes:

    • MANAGEMENT_API_SERVER: la ruta de kubeconfig del servidor de la API zonal.
    • CLUSTER_NAME: el nombre del clúster.
    • PROJECT_NAME: el nombre del proyecto al que se va a 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",
              ]
            }
          }
        }
      }
    }
    

    Haz los cambios siguientes:

    • MANAGEMENT_API_SERVER: la ruta de kubeconfig del servidor de la API zonal.
    • PROJECT_BINDING_RESOURCE_NAME: el nombre de 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, pero 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: el nombre del proyecto al que se va a 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 nueva vinculación de proyecto:

    terraform apply
    

Desvincular un proyecto de un clúster compartido

Si separas un proyecto de un clúster compartido, se pueden producir cambios significativos, como la eliminación de cargas de trabajo que se estén ejecutando en el clúster. Asegúrate de que entiendes las consecuencias antes de separar un proyecto de un clúster compartido.

Para desvincular un proyecto de un clúster compartido, sigue estos pasos:

Consola

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

API

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

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

    Haz los cambios siguientes:

    • MANAGEMENT_API_SERVER: la ruta de kubeconfig del servidor de la API zonal.
    • CLUSTER_NAME: el nombre del clúster.
    • PROJECT_NAME: el nombre del proyecto que se va a desvincular del clúster.

Terraform

  • Elimina el recurso de vinculación del proyecto:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    Sustituye PROJECT_BINDING_RESOURCE_NAME por el nombre del recurso de Terraform del enlace del proyecto que quieras eliminar, como CLUSTER_NAME-PROJECT_NAME-binding. Terraform usa este nombre para identificar la vinculación de tu proyecto, pero GDC no lo usa.

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

Puede 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 de zona, solo puedes enumerar los clústeres por zona.

Consola

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

    Los clústeres estándar tienen el ámbito de un proyecto y los clústeres compartidos tienen el ámbito de una organización. Selecciona el ámbito 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, junto con sus estados y otra información:

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

gdcloud

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

    gdcloud clusters list
    

    El resultado debería ser similar al 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

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

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

    Haz los cambios siguientes:

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

    El resultado debería ser similar al siguiente:

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

Mostrar 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.

  • Lista de 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
    

    Sustituye 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
    

Ver propiedades actualizables

En cada clúster de Kubernetes, hay un conjunto de propiedades que se pueden cambiar después de crearlo. Solo puede 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 aprovisionar el clúster. Para ver estas propiedades actualizables, sigue estos pasos:

Consola

  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 el icono 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
    

    Sustituye MANAGEMENT_API_SERVER por la ruta de kubeconfig del servidor de la API zonal.

    El resultado debería ser similar al 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.
    

    Para actualizar estos ajustes, usa la consola de GDC o la CLI de kubectl. Por ejemplo, puedes cambiar el tamaño de un grupo de nodos.

Siguientes pasos