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.

Antes de empezar

Para ver y gestionar grupos de nodos en un clúster de Kubernetes, debes tener los siguientes roles:

  • Administrador de clústeres de usuario (user-cluster-admin)
  • Lector de nodos de clúster de usuario (user-cluster-node-viewer)

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

Para ejecutar comandos en un clúster de Kubernetes, asegúrate de que tienes los siguientes recursos:

  1. Busca el nombre del clúster de Kubernetes o pregunta a tu administrador de la plataforma cuál es.

  2. Inicia sesión y genera el archivo kubeconfig del clúster de Kubernetes si no tienes uno.

  3. Usa la ruta kubeconfig del clúster de Kubernetes para sustituir KUBERNETES_CLUSTER_KUBECONFIG en estas instrucciones.

Realizar el mantenimiento de los nodos

Cuando necesites reparar o mantener nodos, primero ponlos en modo de mantenimiento. Al poner los nodos en modo de mantenimiento, se vacían de forma segura sus pods y cargas de trabajo, y se excluyen los nodos de la programación de pods. En el modo de mantenimiento, puedes trabajar en tus nodos sin riesgo de interrumpir el tráfico de pods.

Cómo funciona

El modo de mantenimiento de GDC es similar a ejecutar kubectl cordon y kubectl drain en un nodo específico. A continuación, te indicamos algunos detalles relevantes sobre el modo de mantenimiento:

  • Los nodos especificados se marcan como no programables. Esta acción es lo que hace kubectl cordon.
  • Las intolerancias de nodos se añaden a nodos específicos para indicar que no se pueden programar ni ejecutar pods en los nodos. Esta acción es similar a kubectl drain.
  • Se aplica un tiempo de espera de 20 minutos para asegurarse de que los nodos no se queden esperando a que finalicen los pods. Es posible que los pods no finalicen si están configurados para tolerar todos los taints o si tienen finalizadores. Los clústeres de GDC intentan finalizar todos los pods, pero, si se supera el tiempo de espera, el nodo se pone en modo de mantenimiento. Este tiempo de espera evita que los pods en ejecución bloqueen las actualizaciones.
  • Si tienes una carga de trabajo basada en una VM que se ejecuta en el nodo, los clústeres de GDC aplican un NodeSelector al pod de la instancia de máquina virtual (VMI) y, a continuación, detienen el pod. El NodeSelector asegura que el pod de VMI se reinicie en el mismo nodo cuando se quite el nodo del modo de mantenimiento.

Poner un nodo en modo de mantenimiento

Elige los nodos que quieras poner en modo de mantenimiento especificando los intervalos de direcciones IP de los nodos seleccionados en la sección maintenanceBlocks del archivo de configuración del clúster. Los nodos que elijas deben tener el estado Ready y funcionar en el clúster.

Para poner los nodos en modo de mantenimiento, sigue estos pasos:

  1. Edita el archivo de configuración del clúster para seleccionar los nodos que quieras poner en modo de mantenimiento.

    Puedes editar el archivo de configuración con el editor que quieras o editar el recurso personalizado del clúster directamente ejecutando el siguiente comando:

    kubectl edit cluster KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Sustituye lo siguiente en el clúster de Kubernetes:

    • KUBERNETES_CLUSTER_NAME: el nombre del clúster.
    • KUBERNETES_CLUSTER_NAMESPACE: el espacio de nombres del clúster.
    • KUBERNETES_CLUSTER_KUBECONFIG: la ruta del archivo kubeconfig.

    Una vez que se aplica la configuración del clúster, este pone los nodos correspondientes en modo de mantenimiento.

  2. Añade la sección maintenanceBlocks al archivo de configuración del clúster para especificar una sola dirección IP o un intervalo de direcciones para los nodos que quieras poner en modo de mantenimiento.

    En el siguiente ejemplo se muestra cómo seleccionar varios nodos especificando un intervalo de direcciones IP:

    ...
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    ...
    
  3. Obtén el estado de los nodos de tu clúster:

    kubectl get nodes -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    La respuesta es similar a la siguiente:

    NAME                STATUS                     ROLES    AGE     VERSION
    user-gdc-01        Ready                      master   2d22h   v1.23.5-gke.1502
    user-gdc-04        Ready                      none     2d22h   v1.23.5-gke.1502
    user-gdc-05        Ready,SchedulingDisabled   none     2d22h   v1.23.5-gke.1502
    user-gdc-06        Ready                      none     2d22h   v1.23.5-gke.1502
    

    El estado SchedulingDisabled indica que un nodo está en modo de mantenimiento.

  4. Obtener el número de nodos en modo de mantenimiento:

    kubectl get nodepools --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    La respuesta tiene un aspecto similar al siguiente:

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    La columna UNDERMAINTENANCE de este ejemplo muestra que un nodo está en modo de mantenimiento.

    Los clústeres también añaden los siguientes taints a los nodos cuando se ponen en modo de mantenimiento:

  • baremetal.cluster.gke.io/maintenance:NoExecute
  • baremetal.cluster.gke.io/maintenance:NoSchedule

Cambiar el tamaño de los grupos de nodos

Se puede cambiar el tamaño del grupo de nodos de cualquier clúster de KUBERNETES del entorno de GDC para que se ajuste a los cambios en la carga de trabajo. Para gestionar grupos de nodos en un clúster de Kubernetes, debes tener el rol Administrador de clúster de usuario (user-cluster-admin). Este rol no está vinculado a un espacio de nombres.

Para escalar un grupo de nodos en un clúster, sigue estos pasos:

Consola

  1. En el panel de control, selecciona el proyecto en el que se encuentra el clúster que quieres editar.
  2. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.
  3. Selecciona el nombre del clúster al que está asociado el grupo de nodos. Se mostrará la página Detalles del clúster.
  4. Haz clic en la pestaña Grupos de nodos.
  5. Selecciona el icono Editar del grupo de nodos cuyo tamaño quieras cambiar. Se muestra la petición Editar grupo de nodos.
  6. Actualice el campo Número de nodos para reflejar la nueva cantidad de nodos que se necesitan en el grupo de nodos. Puedes aumentar o reducir el número de nodos para adaptarlo a los requisitos de tu carga de trabajo.

  7. Haz clic en Guardar.

  8. Vuelve a la pestaña Grupos de nodos de tu clúster y confirma que el grupo de nodos redimensionado tiene el estado Ready y el número correcto de nodos. El grupo de nodos puede tardar unos minutos en escalarse a las especificaciones que hayas indicado.

    Confirma que tu grupo de nodos está listo mediante la consola.

API

  1. Abre la especificación de recursos personalizados Cluster con la CLI de kubectl mediante el editor interactivo:

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
          --kubeconfig MANAGEMENT_API_SERVER
    

    Haz los cambios siguientes:

    • KUBERNETES_CLUSTER_NAME: el nombre del clúster que aloja el grupo de nodos.
    • MANAGEMENT_API_SERVER: ruta kubeconfig del servidor de la API zonal donde se aloja el clúster de Kubernetes. Si aún no has generado un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta la sección Iniciar sesión para obtener más información.
  2. Actualiza el campo nodeCount del grupo de nodos cuyo tamaño quieras cambiar:

    nodePools:
    ...
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    Sustituye NUMBER_OF_WORKER_NODES por el número actualizado de nodos de trabajador que se aprovisionarán en el grupo de nodos.

  3. Guarda el archivo y cierra el editor.

  4. Para comprobar que el escalado de nodos se ha completado, consulta la configuración del grupo de nodos:

    kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform -o json \
        --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
    

    Confirma que el número readyNodes refleja la cantidad de nodos que has definido para el grupo de nodos. El grupo de nodos puede tardar unos minutos en escalarse según tus especificaciones.

Mover clústeres en la jerarquía de proyectos

Los proyectos proporcionan una agrupación lógica de instancias de servicio. Puedes añadir y quitar clústeres de Kubernetes de la jerarquía de proyectos de GDC para agrupar tus servicios de forma adecuada.

Adjuntar un proyecto a un clúster

Cuando creas un clúster 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:

  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. Selecciona Adjuntar proyecto.
  4. Selecciona los proyectos disponibles que quieras añadir de la lista de proyectos. Haz clic en Guardar.

Desvincular un proyecto de un clúster

Para separar un proyecto de un clúster de Kubernetes, sigue estos pasos:

  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.

Ver todos los clústeres de una organización

Puede ver todos los clústeres de Kubernetes disponibles en 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.

Consola

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

    Se muestran todos los clústeres disponibles de 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 de Kubernetes de la organización.

kubectl

  • Lista de los clústeres de Kubernetes disponibles en una zona de una organización:

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

    Sustituye MANAGEMENT_API_SERVER por la ruta de kubeconfig del servidor de la API zonal. Si aún no has generado un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta Iniciar sesión para obtener más información.

    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
    

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 de el 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.

kubectl

  • 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. Si aún no has generado un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta Iniciar sesión para obtener más información.

    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 kubectl CLI. Por ejemplo, puedes cambiar el tamaño de un grupo de nodos.

Escalar el tamaño de la dirección IP del servicio de entrada

Puedes escalar el tamaño de la dirección IP de tu servicio de entrada después de crear un clúster de Kubernetes.

  1. Abre la especificación de recursos personalizados Cluster con la CLI kubectl mediante el editor interactivo:

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Haz los cambios siguientes:

    • KUBERNETES_CLUSTER_NAME: nombre del clúster que proporciona la dirección IP.
    • MANAGEMENT_API_SERVER: ruta kubeconfig del servidor de la API zonal donde se aloja el clúster de Kubernetes. Si aún no has generado un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta la sección Iniciar sesión para obtener más información.
  2. Actualiza el campo ingressServiceIPSize al nuevo tamaño de la dirección IP:

    ...
    spec:
    ...
      loadBalancer:
        ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE
    ...
    

    Sustituye INGRESS_SERVICE_IP_SIZE por el tamaño de la dirección IP del servicio de entrada actualizada.

  3. Guarda el archivo y cierra el editor.

No hay un límite establecido en el tamaño de la dirección IP del servicio de entrada. La cantidad de direcciones IP que solicites se asignará en función de tu organización. Si no se puede completar la solicitud, el clúster informa de un error.

Actualizar un clúster de Kubernetes

Puedes actualizar tu clúster de Kubernetes de forma automática o manual. Para obtener más instrucciones sobre cómo actualizar tu clúster, consulta la sección Actualización de clústeres.