Mantén clústeres de Kubernetes

Google Distributed Cloud (GDC) aislado te permite administrar tus clústeres de Kubernetes después de la creación con GKE en GDC. Este servicio te permite adaptarte a los requisitos cambiantes de tu carga de trabajo de contenedores.

Antes de comenzar

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

  • Administrador del clúster de usuario (user-cluster-admin)
  • Visualizador de nodos del 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 tener los siguientes recursos:

  1. Ubica el nombre del clúster de Kubernetes o pregúntale al administrador de la plataforma cuál es el nombre del clúster.

  2. Accede y genera el archivo kubeconfig para el clúster de Kubernetes si no tienes uno.

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

Realiza el mantenimiento del nodo

Cuando necesites reparar o mantener nodos, primero debes ponerlos en modo de mantenimiento. La ubicación de nodos en modo de mantenimiento desvía de forma segura sus Pods y cargas de trabajo, y excluye los nodos de la programación de Pods. En el modo de mantenimiento, puedes trabajar en tus nodos sin correr el riesgo de interrumpir el tráfico de los pods.

Cómo funciona

El modo de mantenimiento de GDC es similar a ejecutar kubectl cordon y kubectl drain para un nodo específico. Estos son algunos detalles que son relevantes para el modo de mantenimiento:

  • Los nodos especificados se marcan como no programables. Esta es la acción que realiza kubectl cordon.
  • Se agregan taints de nodo a los nodos especificados para indicar que no se puede programar ni ejecutar ningún Pod en los nodos. Esta acción es similar a kubectl drain.
  • Se aplica un tiempo de espera de 20 minutos para garantizar que los nodos no se detengan a la espera de 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 excede 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 VM que se ejecuta en el nodo, los clústeres de GDC aplican un NodeSelector al Pod de instancia de máquina virtual (VMI) y, luego, el Pod se detiene. El NodeSelector garantiza que el pod de VMI se reinicie en el mismo nodo cuando el nodo se quita del modo de mantenimiento.

Coloca un nodo en modo de mantenimiento

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

Para poner los nodos en modo de mantenimiento, realiza lo siguiente:

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

    Puedes editar el archivo de configuración con el editor que prefieras o puedes editar el recurso personalizado del clúster de forma directa si ejecutas el siguiente comando:

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

    Reemplaza lo siguiente para 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: Es la ruta de acceso del archivo kubeconfig.

    Después de aplicar la configuración del clúster, este coloca los nodos aplicables en modo de mantenimiento.

  2. Agrega la sección maintenanceBlocks al archivo de configuración del clúster a fin de especificar una sola dirección IP o un rango de direcciones para los nodos que deseas poner en modo de mantenimiento.

    En el siguiente ejemplo, se muestra cómo seleccionar varios nodos mediante la especificación de un rango 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 en 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
    

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

  4. Obtén la cantidad de nodos en modo de mantenimiento:

    kubectl get nodepools --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    La respuesta es similar al siguiente resultado:

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

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

    Los clústeres también agregan 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

Cambia el tamaño de los grupos de nodos

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

Para ajustar la escala de un grupo de nodos en un clúster existente, completa los siguientes pasos:

Console

  1. En el panel, selecciona el proyecto en el que existe el clúster que deseas editar.
  2. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.
  3. Selecciona el nombre del clúster con el que está asociado el grupo de nodos. Se muestra la página Detalles del clúster.
  4. Haz clic en la pestaña Grupos de nodos.
  5. Selecciona el ícono de Editar para el grupo de nodos cuyo tamaño deseas cambiar. Aparecerá el mensaje Editar grupo de nodos.
  6. Actualiza el campo Cantidad de nodos para reflejar la nueva cantidad de nodos requeridos en el grupo de nodos. Puedes aumentar o disminuir la cantidad de nodos para satisfacer 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 tenga el estado Ready y la cantidad correcta de nodos. El grupo de nodos puede tardar unos minutos en ajustarse según tus especificaciones.

    Confirma que tu grupo de nodos esté listo con la consola.

API

  1. Abre la especificación del recurso personalizado Cluster con la CLI de kubectl usando el editor interactivo:

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

    Reemplaza lo siguiente:

    • KUBERNETES_CLUSTER_NAME: Es el nombre del clúster que aloja el grupo de nodos.
    • MANAGEMENT_API_SERVER: Es la ruta de kubeconfig del servidor de la API zonal en la que se aloja el clúster de Kubernetes. Si aún no generaste un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta Accede para obtener más detalles.
  2. Actualiza el campo nodeCount del grupo de nodos al que se le cambiará el tamaño:

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

    Reemplaza NUMBER_OF_WORKER_NODES por la cantidad actualizada de nodos trabajadores que se aprovisionarán en el grupo de nodos.

  3. Guarda el archivo y sal del editor.

  4. Para verificar que se completó el ajuste de escala de nodos, 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 refleje la cantidad de nodos que estableciste para el grupo de nodos. El grupo de nodos puede tardar unos minutos en ajustarse según tus especificaciones.

Cómo mover clústeres en la jerarquía del proyecto

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

Cómo adjuntar un proyecto a un clúster

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

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

Desvincula un proyecto de un clúster

Para separar un proyecto de un clúster de Kubernetes existente, completa los siguientes pasos:

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

Visualiza todos los clústeres de una organización

Puedes ver todos los clústeres de Kubernetes disponibles en una organización, incluidos sus estados, versiones de Kubernetes y otros detalles. Dado que los clústeres de Kubernetes son un recurso zonal, solo puedes enumerar los clústeres por zona.

Console

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

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

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

kubectl

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

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

    Reemplaza MANAGEMENT_API_SERVER por la ruta de acceso al archivo kubeconfig del servidor de la API zonal. Si aún no generaste un archivo kubeconfig para el servidor de la API en la zona de destino, consulta Accede para obtener más detalles.

    El resultado es similar a este:

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

Cómo ver las propiedades que se pueden actualizar

Para cada clúster de Kubernetes, hay un conjunto de propiedades disponibles para cambiar después de su creación. Solo puedes cambiar las propiedades mutables que se encuentran en el spec del recurso personalizado Cluster. No todas las propiedades de spec son aptas para actualizarse 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.

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
    

    Reemplaza MANAGEMENT_API_SERVER por la ruta de acceso al archivo kubeconfig del servidor de la API zonal. Si aún no generaste un archivo kubeconfig para el servidor de la API en la zona de destino, consulta Accede para obtener más detalles.

    El resultado es similar a este:

    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.

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

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

  1. Abre la especificación del recurso personalizado de Cluster con la CLI de kubectl usando el editor interactivo:

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

    Reemplaza lo siguiente:

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

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

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

  3. Guarda el archivo y sal del editor.

No hay un límite establecido para el tamaño de la dirección IP del servicio de entrada. La cantidad de direcciones IP que solicitas se completa según tu organización. Si no se puede satisfacer la solicitud, el clúster informa un error.

Actualiza un clúster de Kubernetes

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