Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

¿Está Kubernetes preparado para las cargas de trabajo con estado?

Esta podría ser la pregunta que te ha llevado a abrir este libro. Desde que surgió la computación en nube, la infraestructura de datos (NoSQL/NewSQL, streaming, analítica) y la infraestructura de aplicaciones (Docker, Kubernetes) han ido madurando rápidamente, pero por vías separadas. En nuestra opinión, ha llegado el momento de formalizar la unión de estas dos áreas. Esto no es una aspiración para el futuro; ya está ocurriendo con la colaboración entre múltiples comunidades. Las organizaciones que intentan gestionar dos pilas distintas para aplicaciones y datos pronto se encontrarán en desventaja competitiva.

Durante los primeros años de existencia de Kubernetes tras su lanzamiento público en 2014, rara vez se cuestionó la máxima de que no estaba preparado para cargas de trabajo de datos y con estado. Un ejemplo de la sabiduría predominante se puede encontrar en este tweet de Kelsey Hightower de 2018:

Kubernetes ha mejorado enormemente la capacidad de ejecutar cargas de trabajo con estado, incluidas bases de datos y colas de mensajes, pero yo sigo prefiriendo no ejecutarlas en Kubernetes.

En los últimos años, la marea ha cambiado. Los ingenieros de resolución de problemas aceptaron este reto de Kelsey y lo convirtieron en acción. En cierto sentido, la maduración de Kubernetes para cargas de trabajo con estado era inevitable, ya que la demanda era muy grande. Los que recordamos las discusiones sobre por qué una base de datos tenía que ejecutarse en una máquina "bare-metal" o por qué nunca se debía implementar una infraestructura de datos en contenedores, podemos identificarnos con esta preocupación.

También hemos aprendido que hay una gran diferencia entre "nunca" y "todavía no". El cálculo, el almacenamiento y las redes se consideran ahora productos básicos; ¿por qué no la gestión de datos? La propuesta de valor de Kubernetes para reducir costes y simplificar el desarrollo de aplicaciones significa que la migración de la infraestructura de datos a Kubernetes era inevitable. Los cambios no se limitan a Kubernetes. Como verás, los proyectos de infraestructura de datos también han cambiado.

Por qué escribimos este libro

Nos vimos inmersos en la tendencia de trasladar cargas de trabajo con estado a Kubernetes cuando nuestras responsabilidades de "trabajo diario" en DataStax nos desafiaron a considerar cómo implementar y operar Apache Cassandra en Kubernetes de forma eficaz. En el espíritu del desarrollo de código abierto, buscamos a otros profesionales que estuvieran intentando hazañas similares (y teniendo éxito) con bases de datos y otras cargas de trabajo con estado. Encontramos un grupo de personas con ideas afines y ayudamos a lanzar la Comunidad de Datos en Kubernetes (DoKC) en 2020. DoKC es ahora una organización independiente y ha organizado más de 100 reuniones y varios eventos presenciales. La variedad de temas y presentadores en las reuniones de la DoKC es prueba de una comunidad vibrante, que trabaja en colaboración para establecer normas y buenas prácticas. Lo más importante es que estamos aprendiendo juntos, aplicando las lecciones del pasado y apoyándonos mutuamente mientras construimos algo nuevo.

A medida que participábamos en estas reuniones, empezaron a surgir una serie de temas comunes. Escuchamos, una y otra vez, las virtudes del subsistema PersistentVolume, los pros y los contras de StatefulSets, la promesa del patrón operador para hacer más manejables las operaciones de base de datos, y los primeros indicios de ideas para nuevos tipos de gestión de datos. Con el tiempo, llegamos a la firme convicción de que esta incipiente comunidad de profesionales necesitaba un lugar donde reunir toda la sabiduría dispersa en múltiples presentaciones y entradas de blog y destilarla en una forma digerible. Este libro es el resultado de ese proceso.

Queda mucho trabajo por hacer en el ámbito de los datos nativos de la nube, y muchas áreas necesitan una mayor exploración, como los operadores, el aprendizaje automático, las API de datos, la gestión declarativa de conjuntos de datos y muchas más. Nuestra esperanza es que este libro abra las puertas a una avalancha de libros, blogs, presentaciones y recursos de aprendizaje adicionales.

¿A quién va dirigido este libro?

El público principal de este libro son los desarrolladores y arquitectos que diseñan, construyen y ejecutan aplicaciones en la nube. Si eso te describe a ti y estás cogiendo este libro, es probable que hayas oído el estruendoso rebaño de organizaciones que adoptan Kubernetes y te hayas unido a esa tendencia o, al menos, te lo estés planteando. Sin embargo, es posible que también hayas oído las reservas sobre las cargas de trabajo con estado en Kubernetes y estés buscando ayuda sobre cómo proceder. ¡Has llegado al lugar adecuado! Al leer este libro obtendrás lo siguiente:

  • Comprensión de los recursos básicos de Kubernetes y cómo se utilizan para componer la infraestructura de datos.

  • Comprensión de cómo herramientas como Helm y los operadores pueden automatizar la implementación y las operaciones de la infraestructura de datos en Kubernetes.

  • La capacidad de evaluar y seleccionar tecnologías de infraestructura de datos para utilizarlas en tus aplicaciones

  • El conocimiento de cómo integrar estas tecnologías de infraestructura de datos en tu pila general

  • Una visión hacia las tecnologías emergentes que mejorarán tus aplicaciones basadas en Kubernetes en los próximos años

Un público más reducido, pero no menos importante, incluye a los desarrolladores del núcleo de Kubernetes y a los desarrolladores de infraestructuras de datos, a muchos de los cuales hemos conocido a través del DoKC. Esperamos crear un conjunto común de principios y buenas prácticas que podamos utilizar como marco para impulsar mejoras en el núcleo de Kubernetes, así como en la infraestructura de datos construida para funcionar en Kubernetes. Juntos podemos impulsar la práctica de los datos en Kubernetes.

Para todos, debes saber que nuestro objetivo en este libro es disparar directamente. Cuando la tecnología sea madura y sólida, te lo haremos saber, pero también hay muchas áreas en las que la tecnología aún está emergiendo. Nos aseguraremos de destacar aquellas áreas en las que es necesario mejorar.

Cómo leer este libro

Este libro está diseñado para ser leído de principio a fin, especialmente por los lectores menos experimentados en Kubernetes. Los primeros capítulos introducen la terminología y los conceptos de Kubernetes a los que se hace referencia en el resto del libro a medida que se tratan temas más avanzados. Así es como está organizado este libro:

Capítulo 1, "Introducción a la Infraestructura de Datos Nativa de la Nube: Persistencia, Streaming y Análisis por Lotes"
Este capítulo establece el objetivo de modernizar tus aplicaciones nativas de la nube poniendo en Kubernetes cargas de trabajo no sólo sin estado, sino también con estado. Por supuesto que diríamos esto, pero realmente deberías empezar por aquí, ya que definimos objetivos y términos clave para que todos los lectores estén en igualdad de condiciones. En concreto, proponemos una definición para el término datos nativos de la nube y definimos principios para la infraestructura de datos nativos de la nube que utilizaremos para medir las tecnologías a lo largo del resto del libro.
Capítulo 2, "Gestión del almacenamiento de datos en Kubernetes"
En este capítulo, examinaremos una de las áreas fundamentales de la infraestructura de datos en Kubernetes: el almacenamiento. Empezaremos por cómo funciona el almacenamiento en los sistemas en contenedores, empezando por Docker, para pasar después a Kubernetes y su subsistema PersistentVolume. Hablaremos de los distintos tipos de almacenamiento disponibles, como el almacenamiento de archivos, bloques y objetos, y de las ventajas y desventajas de utilizar soluciones de almacenamiento locales frente a remotas.
Capítulo 3, "Bases de datos en Kubernetes por las malas"
Este capítulo presenta los recursos informáticos de Kubernetes, como Pods, Implementaciones y StatefulSets, y te guía paso a paso por el proceso de implementación de bases de datos como MySQL y Apache Cassandra utilizando estos recursos. Aprenderás algunos de los puntos fuertes y débiles de StatefulSets para gestionar bases de datos distribuidas.
Capítulo 4, "Automatización de la Implementación de Bases de Datos en Kubernetes con Helm"
Continuando con los temas del capítulo anterior, retomamos la implementación de MySQL y Cassandra en Kubernetes, esta vez de forma más automatizada utilizando el gestor de paquetes Helm. También aprenderás sobre los recursos de Kubernetes que ayudan con la configuración, incluidos ConfigMaps y Secrets. Discutiremos el papel de Helm en tu proceso general de DevOps y en tu conjunto de herramientas de CI/CD, así como algunas de sus deficiencias con respecto a la gestión de las operaciones de bases de datos.
Capítulo 5, "Automatizar la gestión de bases de datos en Kubernetes con operadores"
Este capítulo concluye nuestra secuencia sobre la implementación de bases de datos introduciendo el patrón de operadores y demostrando cómo los operadores pueden ayudar a gestionar las operaciones de bases de datos del "segundo día". Examinaremos cómo los operadores amplían el plano de control de Kubernetes para gestionar bases de datos, utilizando Vitess (MySQL) y Cass Operator (Apache Cassandra) como ejemplos. Por el camino, aprenderás a evaluar la madurez de los operadores e incluso a construir tus propios operadores utilizando marcos como el SDK de Operador.
Capítulo 6, "Integrar la infraestructura de datos en una pila de Kubernetes"
En este capítulo, empezamos a ampliar el enfoque más allá de la mera implementación y funcionamiento de las bases de datos, para considerar cómo pueden incorporarse las bases de datos y otras infraestructuras de datos a la pila general de tu aplicación. Examinaremos un proyecto llamado K8ssandra que integra Apache Cassandra junto con herramientas para gestionar el monitoreo, la seguridad y las copias de seguridad de las bases de datos, y una capa API para facilitar el acceso a los datos.
Capítulo 7, "La base de datos nativa de Kubernetes"
En este punto, damos un paso atrás y resumimos lo que has aprendido sobre la gestión de datos nativa de la nube en la primera mitad del libro, y utilizamos ese conocimiento para considerar la pregunta: "¿Qué es una base de datos nativa de Kubernetes?" Más que un debate sobre palabras de moda en el sector, esta discusión es importante para ti, que participas en la selección de la infraestructura de datos, y para quienes desarrollan esa infraestructura.
Capítulo 8, "Streaming de datos en Kubernetes"
Más allá de la persistencia, empezaremos a trabajar en el resto de la infraestructura de datos, empezando por las tecnologías de streaming. Mover y procesar datos en aplicaciones nativas de la nube es tan frecuente como la persistencia en bases de datos, pero requiere estrategias diferentes en la implementación: conectar los puntos finales de forma segura y construir resiliencia y elasticidad por defecto. En este capítulo, se utilizarán Apache Pulsar y Apache Flink para demostrar esas prácticas importantes de construir.
Capítulo 9, "Análisis de datos en Kubernetes"
Irónicamente, las necesidades de implementaciones analíticas a gran escala forman parte de la historia del origen de muchas de las metodologías que vemos utilizadas en Kubernetes hoy en día, a saber, la orquestación y la gestión de recursos. Cerrando el círculo, la ejecución de análisis en Kubernetes es ahora una prioridad en muchas organizaciones. Destacamos los cambios en Apache Spark para darte una ventaja para tu caso de uso y echamos un vistazo al perímetro más avanzado de la analítica en Kubernetes con los proyectos Dask y Ray.
Capítulo 10, "Aprendizaje automático y otros casos de uso emergentes"
Los temas de la IA y el aprendizaje automático ya están en el perímetro de vanguardia dentro de la infraestructura. Los proyectos que se han iniciado en los últimos años podrían empezar primero en Kubernetes, y es algo interesante a tener en cuenta. Hay otros tipos de proyectos que piensan en términos de nube nativa primero y proporcionan cierta direccionalidad al futuro de los datos. Este capítulo pretende ser un estudio de esos proyectos y se ofrece a grandes rasgos como ideas y metodologías a tener en cuenta a medida que avanzas con los datos nativos de la nube.
Capítulo 11, "Migración de cargas de trabajo de datos a Kubernetes"
Todo el conocimiento que has obtenido al leer el libro se echa a perder si no lo pones en práctica. En este capítulo, destacamos las enseñanzas clave de los capítulos anteriores y proponemos un marco de cambios en las personas, los procesos y la tecnología que puedes realizar para migrar con éxito tus cargas de trabajo con estado a Kubernetes. Concluimos con una visión de cómo podría ser la infraestructura de datos de tu organización en un futuro próximo.

La disciplina de la gestión de datos en Kubernetes es una disciplina emergente con muchos cambios en áreas concretas. Reconocemos que éste, como cualquier libro técnico, representa una instantánea de los conocimientos disponibles en un momento concreto, en este caso, finales de 2022. El verdadero peligro de escribir un libro sobre un tema que evoluciona rápidamente es lo rápido que puede volverse irrelevante la información.

Para abordar mejor esta realidad, verás que en este libro se aplica una fórmula común: proporcionamos muchos ejemplos, pero hacemos hincapié en los fundamentos. A medida que avanzamos en el libro, la tecnología que examinamos va perdiendo madurez. En lugar de buscar la respuesta de copiar y pegar o la arquitectura de talla única, te animamos a extraer los principios básicos que puedes aplicar a tus casos de uso únicos.

En particular, dado que los capítulos 2-5 abordan temas bien establecidos, en ellos encontrarás explicaciones más profundas y ejemplos prácticos. Los capítulos 8-10 se adentran en la infraestructura de datos que aún está experimentando bastantes cambios, al menos en lo que se refiere a la implementación en Kubernetes. En estos casos, apuntamos con más frecuencia a recursos de aprendizaje de terceros para que puedas estar seguro de tener la experiencia más actualizada. Siguiendo el espíritu del inicio de este libro, te animamos a que compartas los nuevos recursos que encuentres con otras personas para que podamos avanzar juntos.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://github.com/data-on-k8s-book/examples.

Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Gestión de datos nativos de la nube en Kubernetes por Jeff Carpenter y Patrick McFadin (O'Reilly). Copyright 2023 Jeffrey Carpenter y Patrick McFadin, 978-1-098-11139-7".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita https://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/cloud-native-data-Kubernetes.

Envía un correo electrónico para comentar o hacer preguntas técnicas sobre este libro.

Para obtener noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

Síguenos en Twitter: https://twitter.com/oreillymedia.

Míranos en YouTube: https://youtube.com/oreillymedia.

Agradecimientos

Gracias en primer lugar a Jess Haberman, que creyó en el concepto de este libro desde nuestra primera conversación y luchó por hacerlo realidad, y a nuestra editora Jill Leonard por su continuo aliento y sabios consejos.

Una de las características clave de este libro es la inclusión de barras laterales basadas en nuestras conversaciones con tecnólogos y profesionales expertos. Hemos intentado que sus palabras hablen por sí solas con la menor edición posible. Por ello, queremos expresar nuestro más sincero agradecimiento a quienes han compartido su tiempo y sus ideas con nosotros: Rick Vasquez, Kiran Mova, Maciej Szulik, John Sanda, Deepthi Sigireddi, Umair Mufti, Irfan Ur Rehman, Dongxu (Ed) Huang, Jake Luciani, Jesse Anderson, Josh van Leeuwen, Holden Karau, Dean Wampler, Theofilos Papapanagiotou, Willem Pienaar, Xiaofan Luan, Josh Patterson, Adi Polak y Craig McLuckie.

Estos expertos no sólo han contribuido con sus palabras, sino que también han influido en la dirección de nuestra investigación y en la elección de las tecnologías que tratamos aquí. Deepthi, Jesse, Umair y Rick también cumplieron una doble función como revisores técnicos del libro. También agradecemos las opiniones de nuestros otros revisores técnicos: Wei Deng, Ali Ok, Aaron Morton y Noah Gift.

La Comunidad de Datos en Kubernetes (DoKC) ha sido una gran inspiración para este esfuerzo, y estamos especialmente agradecidos a Bart Farrell, Demitrios Brinkmann y Melissa Logan por ponernos en contacto con muchos otros miembros de la comunidad y por su ánimo y apoyo. Nos gustaría dar un reconocimiento especial a Evan Powell, que dio a luz al DoKC encontrando a Demetrios y financiando las reuniones iniciales. Esa fue la chispa que ha encendido la fragua de tantas cosas buenas por venir.

Sam Ramji ejerció una gran influencia en este libro, no sólo al escribir el prólogo, sino también al desafiar nuestros procesos de pensamiento recordándonos: "Hay que hacer el trabajo para tener una opinión". Sam siempre estaba dispuesto a ponerse al teléfono, hacer una presentación o compartir ideas tomando una cerveza.

Este libro nació durante los primeros días de una pandemia mundial y se nutrió a lo largo de temporadas de incertidumbre, desafío y renovación, tanto a nivel global como personal. Estamos muy agradecidos por el apoyo de muchos amigos y familiares que caminaron con nosotros en esos momentos y nos recordaron el poder de preguntas como "¿Cómo va el libro?" o incluso un simple "¿Cómo te va?".

Get Gestión de datos nativos de la nube en Kubernetes now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.