En este documento se ofrece una descripción general de la gestión de cargas de trabajo en Google Distributed Cloud (GDC) aislado. Se tratan los siguientes temas:
Aunque se recomiendan algunos diseños de implementación de cargas de trabajo, no es obligatorio seguirlos al pie de la letra. Cada universo de GDC tiene requisitos y consideraciones únicos que deben cumplirse caso por caso.
Dónde desplegar cargas de trabajo
En la plataforma de GDC, las operaciones para desplegar cargas de trabajo de máquinas virtuales (VMs) y cargas de trabajo de contenedores son diferentes. En esta sección se explican las diferencias y dónde se implementa cada recurso.
Cargas de trabajo basadas en máquinas virtuales
Puedes crear VMs para alojar tus cargas de trabajo basadas en VMs. Tienes muchas opciones de configuración para la forma y el tamaño de tu máquina virtual, lo que te ayudará a satisfacer los requisitos de tu carga de trabajo basada en máquinas virtuales. Debes crear una VM en un proyecto, que puede tener muchas VMs y cargas de trabajo de VMs. Para obtener más información, consulta la descripción general de las VMs.
Los proyectos que solo contienen cargas de trabajo basadas en VMs no requieren un clúster de Kubernetes. Por lo tanto, no es necesario aprovisionar clústeres de Kubernetes para cargas de trabajo basadas en VMs.
Cargas de trabajo basadas en contenedores
Puedes desplegar cargas de trabajo basadas en contenedores en un pod de un clúster de Kubernetes. Los clústeres de Kubernetes se pueden asociar a uno o varios proyectos, pero no son un recurso secundario de un proyecto. Recomendamos adjuntar clústeres solo a proyectos en el entorno de implementación adecuado. Por ejemplo, un clúster para cargas de trabajo de producción está asociado a un proyecto para cargas de trabajo de producción.
Para programar pods en un clúster de Kubernetes, GDC adopta los conceptos generales de Kubernetes de programación, preferencia y desalojo. Las prácticas recomendadas para programar pods en un clúster varían en función de los requisitos de tu carga de trabajo.
Para obtener más información sobre los clústeres de Kubernetes, consulta la descripción general de los clústeres de Kubernetes. Consulta la información general sobre las cargas de trabajo de contenedores para obtener más detalles sobre cómo gestionar tus contenedores en un clúster de Kubernetes.
Prácticas recomendadas para diseñar clústeres de Kubernetes
En esta sección se presentan las prácticas recomendadas para diseñar clústeres de Kubernetes:
- Crear clústeres independientes para cada entorno de implementación
- Crear menos clústeres, pero más grandes
- Crear menos grupos de nodos más grandes en un clúster
Crear clústeres independientes por entorno de implementación
Además de usar proyectos independientes para cada entorno de implementación, te recomendamos que diseñes clústeres de Kubernetes independientes para cada entorno de implementación. Al separar el clúster de Kubernetes y el proyecto por entorno, puedes aislar el consumo de recursos, las políticas de acceso, los eventos de mantenimiento y los cambios de configuración a nivel de clúster entre tus cargas de trabajo de producción y de no producción.
En el siguiente diagrama se muestra un diseño de clúster de Kubernetes de ejemplo para varias cargas de trabajo que abarcan proyectos, clústeres, entornos de implementación y clases de máquinas.
Esta arquitectura de ejemplo presupone que las cargas de trabajo de un entorno de implementación pueden compartir clústeres. Cada entorno de implementación tiene un conjunto independiente de clústeres de Kubernetes. A continuación, asigna proyectos al clúster de Kubernetes del entorno de implementación adecuado. Un clúster de Kubernetes se puede subdividir en varios grupos de nodos para cumplir los requisitos de diferentes clases de máquinas.
También es útil diseñar varios clústeres de Kubernetes para operaciones de contenedores como las siguientes:
- Tienes algunas cargas de trabajo fijadas a una versión específica de Kubernetes, por lo que mantienes diferentes clústeres en diferentes versiones.
- Tienes algunas cargas de trabajo que requieren diferentes configuraciones de clúster, como la política de copia de seguridad, por lo que creas varios clústeres con diferentes configuraciones.
- Ejecutas copias de un clúster en paralelo para facilitar las actualizaciones de versiones disruptivas o una estrategia de implementación azul-verde.
- Creas una carga de trabajo experimental que puede limitar el servidor de la API u otro punto único de fallo de un clúster, por lo que la aíslas de las cargas de trabajo existentes.
En el siguiente diagrama se muestra un ejemplo en el que se configuran varios clústeres por entorno de implementación debido a requisitos como las operaciones de contenedores descritas en la sección anterior.
Crear menos clústeres
Para utilizar los recursos de forma eficiente, te recomendamos que diseñes el menor número posible de clústeres de Kubernetes que cumplan tus requisitos para separar los entornos de implementación y las operaciones de los contenedores. Cada clúster adicional conlleva un consumo de recursos adicional, como los nodos de plano de control adicionales que se requieren. Por lo tanto, un clúster más grande con muchas cargas de trabajo utiliza los recursos de computación subyacentes de forma más eficiente que muchos clústeres pequeños.
Cuando hay varios clústeres con configuraciones similares, se genera una carga de mantenimiento adicional para monitorizar la capacidad de los clústeres y planificar las dependencias entre clústeres.
Si un clúster se acerca a su capacidad, te recomendamos que añadas nodos a un clúster en lugar de crear uno nuevo.
Crear menos grupos de nodos en un clúster
Para utilizar los recursos de forma eficiente, te recomendamos que diseñes menos grupos de nodos, pero más grandes, en un clúster de Kubernetes.
Configurar varios grupos de nodos es útil cuando necesitas programar pods que requieren una clase de máquina diferente a la de otros. Crea un grupo de nodos para cada clase de máquina que necesiten tus cargas de trabajo y configura la capacidad de los nodos para que se autoescale, lo que permitirá usar los recursos de computación de forma eficiente.