Diez buenas prácticas para desplegar aplicaciones en entornos híbridos y multi-cloud
Las estrategias multi-cloud están siendo cada vez más populares porque ayudan a evitar la dependencia de un sólo proveedor y permiten aprovechar las distintas ventajas de la gran variedad de recursos en la nube.
Sin embargo, los ecosistemas multi-cloud son difíciles de configurar y mantener.
Kubernetes permite abstraerse de los distintos proveedores cloud y sus servicios. Esto ayuda a implementar fácilmente una estrategia multi-cloud y realizar los despliegues de manera consistente y optimizar los servicios y aplicaciones de acuerdo con las necesidades del negocio.
Hoy os enseñamos diez buenas prácticas para desplegar aplicaciones en entornos híbridos y multi-cloud.
Diez buenas prácticas para desplegar aplicaciones en entornos híbridos y multi-cloud
1. Estandariza
Uno de los mayores beneficios de Kubernetes es que permite el uso de métodos declarativos. Esto significa que se pueden estandarizar los entornos y despliegues usando una fuente de verdad centralizada.
La estandarización de las aplicaciones se complica cuando se trata de despliegues multi-cloud; debido a los problemas que pueden causar las pequeñas diferencias de los distintos proveedores.
Es mejor decidir en favor de opciones agnósticas al proveedor, aunque suponga perder ciertas customizaciones u optimizaciones.
2. Automatiza
El despliegue ideal de aplicaciones sobre Kubernetes estaría totalmente automatizado con un esfuerzo mínimo aparte de las configuraciones iniciales.
Hay multitud de herramientas disponibles para automatizar despliegues para usar la que mejor se adapte al entorno donde se ubique la infraestructura y el tipo de aplicación.
Se pueden generar las plantillas con Kustomize o crear charts de Helm, y crear los pipelines con Jenkins, ArgoCD, o Rancher Fleet para ejecutar los despliegues.
3. Dimensiona y optimiza
Ésta es una práctica importante en cualquier tipo de entorno cloud. Y es mucho más difícil de cumplir cuando no se dispone de una buena cantidad de métricas en las que apoyarse.
Sin una visibilidad total del conjunto de entornos es complicado identificar recursos sin utilizar y despliegues sobre provisionados.
Aunque optimizar no siempre se trata de reducir, también hay que optimizar el rendimiento, una tarea mucho más difícil cuando diferentes componentes de la misma aplicación están alojados en distintos proveedores.
Una plataforma de gestión multi-cloud como SUSE Rancher ayuda a visualizar los recursos que se están utilizando.
4. Securiza de principio a fin
No podemos tomarnos la seguridad de nuestro clúster y aplicaciones a la ligera, estas son varias formas de proteger las aplicaciones desplegadas sobre Kubernetes en la nube:
- RBAC: asignar roles y conceder sólo los permisos necesarios a los distintos usuarios y crear service accounts
- Las imágenes también son un punto clave a tener en cuenta, construir las imágenes de las aplicaciones sobre una base segura con los mínimos paquetes necesarios y analizar las imágenes al momento de subirlas al repositorio antes de que lleguen a ser usadas son dos acciones que remedian la mayoría de vulnerabilidades antes de llegar a producción.
- Que los secretos sean siempre secretos: La información sensible como contraseñas, claves SSH, certificados y tokens deberían ser auditadas y cambiarse periódicamente para evitar accesos no autorizados. Los desarrolladores no deberían preocuparse de tener que gestionar estos secretos. Consolidar y centralizar la gestión de secretos con una herramienta como Hashicorp Vault es la mejor opción en estos casos.
5. Separa los entornos de trabajo
Hay multitud de buenas prácticas que dan información para administrar entornos Kubernetes. La manera más sencilla y obvia sería crear un entorno por cada fase del desarrollo: Desarrollo, QA, preproducción y producción.
Una opción para separar los entornos lógicos es usar los namespaces, una funcionalidad propia de Kubernetes que permite separar los entornos por nombres de manera que los objetos Kubernetes específicos están aislados, mientras que al mismo tiempo comparten los nodos y recursos de la infraestructura.
Otra forma de separar las cargas de trabajo es con los taints y tolerations.
Se marcan los nodos y los despliegues para evitar que se asignen cargas a ciertos nodos y permite que el planificador de Kubernetes decida en qué nodo debe alojar la carga basándose en los recursos que normalmente necesita; algunas cargas de trabajo pueden requerir la ejecución en hardware específico (como GPU), pero también puede ser preferible que las aplicaciones se ejecuten en un proveedor de nube dedicado, ya sea por razones de propiedad, legales o técnicas.
6. Despliega con redundancia y alta disponibilidad
Una de las razones comunes para adoptar el multi-cloud es incrementar la disponibilidad de los servicios desplegando instancias redundantes. Se puede conseguir esta redundancia sin Kubernetes, pero es más difícil puesto que en la mayoría de los casos las diferencias entre AWS, Azure y otros proveedores hacen que aunque el servicio sea idéntico, es necesario configurarla de manera distinta dependiendo del proveedor.
Al contenerizar tus aplicaciones y desplegarlas sobre Kubernetes, la redundancia y la alta disponibilidad es mucho más fácil de alcanzar. Puedes configurar el despliegue una vez y reproducirlo en tantas nubes como necesites, porque a Kubernetes no le importa la infraestructura subyacente sea on premise o en la nube.
7. Gestiona los entornos como uno sólo y centraliza la visión
El etiquetado de recursos ayuda significativamente a administrar su configuración, ya que puede usar selectores y reglas de afinidad. Es muy recomendable etiquetar al menos los nodos con información sobre sus especificidades, como el proveedor que los gestiona.
Cuando se administran múltiples clústeres de Kubernetes, ya sean on premise o en proveedores cloud, puede llegar a ser tedioso administrar los recursos desde los distintos paneles de control de cada proveedor, aunque la monitorización esté centralizada. Una herramienta que permite centralizar toda la visión de esos recursos bajo un mismo panel de control es SUSE Rancher. Además de ofrecer consistencia sobre los clústeres y facilitar las operaciones sobre ellos, también proporciona capacidades de aprovisionamiento, gestión de la versión de Kubernetes, visibilidad y diagnóstico, monitorización y alertas y auditoría centralizada.
8. Controla los costes de las múltiples clouds
Muchas veces se promociona el uso de múltiples clouds como una manera de reducir costes porque permite seleccionar la solución más barata y eficiente. Sin embargo, cuantas más recursos tengas en múltiples nubes, es más fácil que se levanten instancias o se utilicen servicios innecesarios, malgastando recursos y dinero.
Aunque Kubernetes no impide que esto ocurra, es más difícil cometer errores que incrementen los costes ya que es más sencillo realizar una correcta configuración para repartir las cargas entre las distintas nubes y aprovechar las diferencias en los servicios que ofrecen para evitar preocuparse por imprevistos a final de mes.
9. Diseña tu solución de almacenamiento
Los proveedores de la nube ofrecen soluciones de almacenamiento que solo se pueden adjuntar a sus propios servicios de infraestructura. Si bien se recomienda el uso de una solución de base de datos externa y es compatible con cualquier solución multi-cloud, los usuarios de Kubernetes a veces requieren almacenamiento persistente dentro de sus clústeres de Kubernetes.
Los volúmenes persistentes son administrados por el componente Container Storage Interface (CSI) y, afortunadamente, casi todos los proveedores de la nube hicieron su CSI de código abierto, lo que permite a los clientes implementarlos dentro de sus clústeres.
La mejor práctica sigue siendo utilizar las etiquetas establecidas en diferentes nodos para apuntar a las instancias de cada proveedor y proporcionarles el CSI correspondiente.
10. Monitorea tus aplicaciones desde un mismo panel
La configuración de reglas de alertas y monitoreo es vital para ejecutar cualquier carga de trabajo de producción de manera segura y confiable. Recopilar, procesar, agregar y mostrar datos cuantitativos en tiempo real sobre un sistema es fundamental para prevenir o solucionar incidencias que puedan tener impacto en el funcionamiento de las aplicaciones.
Soluciones como Prometheus y Grafana permiten extraer datos del plano de control, los nodos y las implementaciones de las cargas de trabajo para representarlas en forma de métricas a través de paneles. Con ello los Administradores de Sistemas pueden realizar análisis para administrar mejor su organización: detener las emergencias del sistema antes de que comiencen, desarrollar estrategias de mantenimiento o restaurar servidores fallados.
A través de la configuración de una solicitud HTTP a un punto final de sus aplicaciones en un intervalo determinado podemos extraer gráficas en formato Prometheus y utilizarlas para generar alertas con Grafana o depurar incidencias en nuestros sistemas. También permite enviar notificaciones a los usuarios vía Email, Slack, PagerDuty, etc.
Además con SUSE Rancher podemos unificar todas estas herramientas y gestionar todos nuestros clústeres a través de un mismo panel, lo que permitirá ahorrar tiempo y costes a los responsables de Sistemas.
Éstas sólo son algunas de las buenas prácticas para desplegar aplicaciones en Kubernetes.
Si quieres conocer más sobre cómo gestionar múltiples clouds, profundizar en cómo mejorar la seguridad de tus clústeres o cómo gestionar los secretos te recomendamos que veas estos vídeos de nuestro canal de YouTube y nos sigas en las redes sociales para que no te pierdas ninguno de nuestros Webinars: