Cambia el tamaño de un clúster de usuario

En esta página, se describe cómo cambiar el tamaño de un clúster de usuario de GKE On-Prem. Cambiar el tamaño de un clúster de usuario implica agregar o quitar nodos en ese clúster. Quitar nodos de un clúster debería liberar las direcciones IP del clúster, de modo que estén disponibles para que las usen otros nodos. Agregar nodos requiere que las direcciones IP estén disponibles para esos nodos.

Puedes cambiar el tamaño de un clúster de usuario si cambias los campos replicas de la configuración de MachineDeployment del clúster. Puedes aplicar un parche a la configuración desde la línea de comandos mediante kubectl patch.

Para obtener información sobre los límites máximos y mínimos de los clústeres de usuario, consulta Cuotas y límites.

Verifica que haya suficientes direcciones IP disponibles

Si agregas nodos adicionales a un clúster, asegúrate de que el clúster tenga suficientes direcciones IP. Verificar que tienes suficientes direcciones IP depende de si el clúster usa un servidor DHCP o direcciones IP estáticas.

DHCP

Si el clúster usa DHCP, verifica que el servidor DHCP de la red en la que se crean los nodos tenga suficientes direcciones IP. Debe haber más direcciones IP que nodos en ejecución en el clúster de usuario.

IP estáticas

Si el clúster usa direcciones IP estáticas, verifica que hayas asignado suficientes direcciones IP en el clúster:

kubectl get cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] \
-n [USER_CLUSTER_NAME] [USER_CLUSTER_NAME] -o yaml

En el ejemplo anterior, se ilustra lo siguiente:

  • [ADMIN_CLUSTER_KUBECONFIG] le indica a kubectl que use el kubeconfig del clúster de administrador, que se usa para ver o cambiar la configuración del clúster de usuario.
  • -n [USER_CLUSTER_NAME] le indica a kubectl que busque en un espacio de nombres con el mismo nombre del clúster de usuario.
  • [USER_CLUSTER_NAME] -o yaml le indica a kubectl en qué clúster de usuario se ejecuta el comando. -o yaml muestra la configuración del clúster de usuario.

En el resultado del comando, busca el campo reservedAddresses. Debe haber más direcciones IP en el campo que nodos en ejecución en el clúster de usuario.

Si necesitas agregar más direcciones al campo reservedAddresses, sigue estos pasos:

  1. Abre el recurso del clúster de usuario para editarlo:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] edit cluster [USER_CLUSTER_NAME] \
    -n [USER_CLUSTER_NAME]
    

    La configuración del clúster se abre en el editor predeterminado de tu shell.

  2. Agrega tantos bloques de IP estáticas adicionales como sea necesario. Un bloque de IP se compone de los campos gateway, hostname, ip y netmask.

A continuación, se muestra un campo reservedAddresses de ejemplo con sus cuatro bloques de IP estáticas resaltados:

...
networkSpec:
  dns:
  - 172.x.x.x
  ntp: 129.x.x.x
  reservedAddresses:
  - gateway: 100.x.x.x
    hostname: host-1
    ip: 100.x.x.x
    netmask: x
  - gateway: 100.x.x.x
    hostname: host-2
    ip: 100.x.x.x
    netmask: x
  - gateway: 100.x.x.x
    hostname: host-3
    ip: 100.x.x.x
    netmask: x
  - gateway: 100.x.x.x
    hostname: host-4
    ip: 100.x.x.x
    netmask: x
...

Antes de comenzar

Exporta una variable de entorno KUBECONFIG que apunte al kubeconfig del clúster de usuario al que le deseas cambiar el tamaño:

export KUBECONFIG=[USER_CLUSTER_KUBECONFIG]

Cambia el tamaño de un clúster de usuario

Puedes cambiar el tamaño de un clúster si editas el recurso MachineDeployment del clúster de usuario. Para buscar el nombre del recurso MachineDeployment del clúster de usuario, ejecuta el siguiente comando:

kubectl get machinedeployments

Este recurso incluye el nombre del clúster de usuario.

Para cambiar el tamaño del clúster de usuario, debes aplicar un parche a la configuración del MachineDeployment del clúster. Debes cambiar el valor del campo replicas de la configuración, que indica cuántos nodos debe ejecutar el clúster:

kubectl patch machinedeployment [MACHINE_DEPLOYMENT_NAME] -p "{\"spec\": {\"replicas\": [INT] }}" --type=merge

En el ejemplo anterior, [INT] es la cantidad de nodos que quieres que ejecute el clúster de usuario.

Verifica el cambio de tamaño

Para verificar que el cambio de tamaño se haya realizado de forma correcta, ejecuta lo siguiente:

kubectl get nodes
kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME] | grep Replicas

La cantidad de nodos que elegiste debe reflejarse en los resultados de estos comandos.

Solución de problemas

Para obtener más información, consulta Soluciona problemas.

El cambio de tamaño de un clúster de usuario falla

Síntomas

Una operación de cambio de tamaño en un clúster de usuario falla.

Causas posibles

Varios factores pueden hacer que las operaciones de cambio de tamaño fallen.

Solución

Si falla el cambio de tamaño, sigue estos pasos:

  1. Verifica el estado del MachineDeployment del clúster para ver si hay eventos o mensajes de error:

    kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME]
  2. Verifica si hay errores en las máquinas recién creadas:

    kubectl describe machine [MACHINE_NAME]

Error: “No se pueden asignar direcciones”

Síntomas

Después de cambiar el tamaño de un clúster de usuario, kubectl describe machine [MACHINE_NAME] muestra el siguiente error:

Events:
   Type     Reason  Age                From                    Message
   ----     ------  ----               ----                    -------
   Warning  Failed  9s (x13 over 56s)  machineipam-controller  ipam: no addresses can be allocated
   
Causas posibles

No hay suficientes direcciones IP disponibles para el clúster de usuario.

Solución

Asigna más direcciones IP al clúster. Luego, borra la máquina afectada:

kubectl delete machine [MACHINE_NAME]

Si el clúster se configura de forma correcta, se creará una máquina de reemplazo con una dirección IP.

Hay una cantidad suficiente de direcciones IP asignadas, pero la máquina no se registra con el clúster

Síntomas

La red tiene suficientes direcciones asignadas, pero la máquina aún no se logra registrar con el clúster de usuario.

Causas posibles

Puede haber un conflicto de IP. Es posible que otra máquina o tu balanceador de cargas tome la IP.

Solución

Verifica que no se haya tomado la dirección IP de la máquina afectada. Si hay un conflicto, debes resolverlo en tu entorno.

Se crearon nodos nuevos, pero no en buen estado

Síntomas

Los nodos nuevos no se registran en el plano de control del clúster de usuario cuando usan el modo de balanceo de cargas manual.

Causas posibles

Es posible que la validación de Ingress en nodos esté habilitada y que bloquee el proceso de inicio de los nodos.

Solución

Para inhabilitar la validación, ejecuta este comando:

kubectl patch machinedeployment [MACHINE_DEPLOYMENT_NAME] -p '{"spec":{"template":{"spec":{"providerSpec":{"value":{"machineVariables":{"net_validation_ports": null}}}}}}}' --type=merge

Diagnostica problemas de clústeres mediante gkectl

Usa los comandos gkectl diagnose para identificar los problemas de clústeres y compartir la información de un clúster con Google. Consulta Diagnostica problemas de clústeres.

Comportamiento de registro predeterminado

Para gkectl y gkeadm, basta con usar la configuración de registro predeterminada:

  • De forma predeterminada, las entradas de registro se guardan de la siguiente manera:

    • Para gkectl, el archivo de registro predeterminado es /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log, y el archivo está vinculado con un symlink con el archivo logs/gkectl-$(date).log en el directorio local donde ejecutas gkectl.
    • Para gkeadm, el archivo de registro predeterminado es logs/gkeadm-$(date).log en el directorio local en el que ejecutas gkeadm.
  • Todas las entradas de registro se guardan en el archivo de registro, incluso si no se imprimen en la terminal (cuando --alsologtostderr es false).
  • El nivel de verbosidad -v5 (predeterminado) cubre todas las entradas de registro que necesita el equipo de asistencia al cliente.
  • El archivo de registro también contiene el comando ejecutado y el mensaje de error.

Recomendamos que envíes el archivo de registro al equipo de asistencia al cliente cuando necesites ayuda.

Especifica una ubicación no predeterminada para el archivo de registro

A fin de especificar una ubicación no predeterminada para el archivo de registro gkectl, usa la marca --log_file. El archivo de registro que especifiques no se vinculará con un symlink con el directorio local.

A fin de especificar una ubicación no predeterminada para el archivo de registro gkeadm, usa la marca --log_file.

Ubica los registros de la API de clúster en el clúster de administrador

Si una VM no se inicia después de que se inicia el plano de control de administrador, puedes intentar depurarla mediante la inspección de los registros de los controladores de la API de clúster en el clúster de administrador:

  1. Encuentra el nombre del Pod de controladores de la API de clúster en el espacio de nombres kube-system, en el que [ADMIN_CLUSTER_KUBECONFIG] es la ruta de acceso al archivo kubeconfig del clúster de administrador:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
  2. Abre los registros del Pod, en los que [POD_NAME] es el nombre del Pod. De manera opcional, usa grep o una herramienta similar para buscar errores:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system logs [POD_NAME] vsphere-controller-manager