Kitabı oku: «Guía práctica de Kubernetes»
Guía práctica de Kubernetes
Proyectos para crear aplicaciones de éxito con Kubernetes
Brendan Burns, Eddie Villalba,
Dave Strebel y Lachlan Evenson
Guía práctica de Kubernetes
Proyectos para crear aplicaciones
de éxito con Kubernetes
Brendan Burns, Eddie Villalba,
Dave Strebel y Lachlan Evenson
Edición original publicada en inglés por O’Reilly con el título Kubernetes Best Practices, ISBN 978-1-492-05647-8 © Brendan Burns, Eddie Villalba, Dave Strebel y Lachlan Evenson, 2020. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.
Título de la edición en español:
Guía práctica de Kubernetes
Primera edición en español, 2021
© 2021 MARCOMBO, S.L.
Diseño de portada: Karen Montgomery
Ilustración: Rebecca Demarest
Traducción: Francisco Martínez Carreno
Corrección: Anna Alberola
Producció del ebook: booqlab
«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. La presente publicación contiene la opinión del autor y tiene el objetivo de informar de forma precisa y concisa. La elaboración del contenido, aunque se ha trabajado de forma escrupulosa, no puede comportar una responsabilidad específica para el autor ni el editor de los posibles errores o imprecisiones que pudiera contener la presente obra.»
ISBN: 978-84-267-3244-6
Contenidos
Prefacio
Reconocimientos
1. Configuración de un servicio básico
Visión general de la aplicación
Gestión de archivos de configuración
Creación de un servicio replicado mediante Deployments
Mejores prácticas para la gestión de imágenes
Creación de una aplicación replicada
Configuración de Ingress externa para tráfico HTTP
Configuración de la aplicación con ConfigMaps
Gestión de autenticación con Secrets
Despliegue de una sencilla base de datos con estado
Creación de un equilibrador de carga TCP con Services
Uso de Ingress para enrutar el tráfico a un servidor de archivos estáticos
Parametrización de la aplicación utilizando Helm
Mejores prácticas en el despliegue de servicios
Resumen
2. Flujos de trabajo para desarrolladores
Objetivos
Creación de un clúster de desarrollo
Configuración de un clúster compartido por varios desarrolladores
Registro de usuarios
Creación y dotación de seguridad a un espacio de nombres
Administración de espacios de nombres
Servicios a nivel de clúster
Habilitación de flujos de trabajo para desarrolladores
Instalación inicial
Preparación de la fase de desarrollo activo
Preparación de pruebas y depuración
Mejores prácticas en el establecimiento de un entorno de desarrollo
Resumen
3. Monitorización y recopilación de registros en Kubernetes
Métricas versus registros
Técnicas de monitorización
Formas de monitorización
Visión general de las métricas en Kubernetes
cAdvisor
Servidor de métricas
kube-state-metrics
¿Qué métricas debemos monitorizar?
Herramientas de monitorización
Monitorización en Kubernetes con Prometheus
Descripción general de la recopilación de registros
Herramientas para la recopilación de registros
Recopilación de registros mediante la pila EFK
Alertas
Mejores prácticas para monitorización, recopilación de registros y alertas
Monitorización
Recopilación de registros
Alertas
Resumen
4. Configuración, Secrets y RBAC
Configuración mediante ConfigMaps y Secrets
ConfigMaps
Secrets
Mejores prácticas habituales para las API de ConfigMap y Secrets
Mejores prácticas específicas en Secrets
RBAC
Manual de RBAC
Sujetos
Reeglas
Roles
RoleBindings
Mejores prácticas de RBAC
Resumen
5. Integración continua, pruebas y despliegue
Control de versiones
Integración continua
Pruebas
Compilación de contenedores
Etiquetados de imágenes de contenedores
Despliegue continuo
Estrategias de despliegue
Pruebas en producción
Configuración de una pipeline y realización de un experimento de caos
Configuración de CI
Configuración de CD
Realización de la actualización de puesta en marcha
Un sencillo experimento de caos
Mejores prácticas para CI/CD
Resumen
6. Versionado, versiones de lanzamiento y puesta en marcha
Versionado
Versiones de lanzamiento
Puesta en marcha
Todo junto
Mejores prácticas para versionado, versiones de lanzamiento y puesta en marcha
Resumen
7. Distribución y preproducción de aplicaciones a nivel mundial
Distribución de la imagen
Parametrización del despliegue
Tráfico con equilibrio de carga a nivel mundial
Puesta en marcha confiable de software a nivel mundial
Validación previa al despliegue
Región de canario
Identificación de los tipos de región
Elaboración de la puesta en marcha a nivel global
Cuando algo sale mal
Mejores prácticas de puesta en marcha a nivel mundial
Resumen
8. Administración de recursos
Planificador de Kubernetes
Predicados
Prioridades
Técnicas avanzadas de planificación
Afinidad y antiafinidad de cápsulas
nodeSelector
Manchas y tolerancias
Administración de recursos de cápsulas
Solicitud de recursos
Límites a los recursos y calidad de servicio de cápsulas
PodDisruptionBudgets
Mínimo disponible
Máximo no disponible
Administración de recursos mediante espacios de nombres
ResourceQuota
LimitRange
Escalado de clúster
Escalado manual
Escalado automático de clúster
Escalado de aplicaciones
Escalado con HPA
HPA con métricas personalizadas
Vertical Pod Autoscaler
Mejores prácticas en la gestión de recursos
Resumen
9. Interconexión, seguridad en red y malla de servicios
Principios de red en Kubernetes
Complementos de red
Kubenet
Mejores prácticas en Kubenet
El complemento CNI
Mejores prácticas en CNI
Servicios en Kubernetes
Tipo de servicio ClusterIP
Tipo de servicio NodePort
Tipo de servicio ExternalName
Tipo de servicio LoadBalancer
Ingress y controladores Ingress
Administración del protocolo HTTP
Mejores prácticas en servicios y controladores Ingress
Políticas de seguridad de red
Mejores prácticas en política de red
Mallas de servicios
Mejores prácticas en malla de servicios
Resumen
10. Seguridad de cápsulas y contenedores
API de PodSecurityPolicy
Habilitación de PodSecurityPolicy
Anatomía de PodSecurityPolicy
Retos de PodSecurityPolicy
Políticas con incumplimientos razonables
Mucho esfuerzo
¿Están interesados nuestros desarrolladores en aprender PodSecurityPolicy?
La depuración es engorrosa
¿Confiamos en artefactos fuera de nuestro control?
Mejores prácticas en PodSecurityPolicy
Siguientes pasos en PodSecurityPolicy
Aislamiento de tareas y RuntimeClass
Utilización de RuntimeClass
Aplicaciones del tiempo de ejecución
Mejores prácticas en aislamiento de tareas y RuntimeClass
Otras consideraciones sobre la seguridad
Controladores de admisión
Herramientas de detección de intrusiones y anomalías
Resumen
11. Política y gobierno del clúster
Por qué la política y la gestión son importantes
¿En qué sentido esta política es diferente?
Motor de políticas nativas en la nube
Introducción a Gatekeeper
Ejemplos de políticas
Terminología Gatekeeper
Restricción
Rego
Plantilla de restricción
Definición de plantillas de restricción
Definición de restricciones
Replicación de datos
UX (Experiencias de usuario)
Auditoría
Familiarizándonos con Gatekeeper
Siguientes pasos en Gatekeeper
Mejores prácticas en política y gestión
Resumen
12. Administración de varios clústeres
¿Por qué varios clústeres?
Consideraciones sobre la utilización de varios clústeres en el diseño
Administración de despliegues de varios clústeres
Patrones de despliegue y administración
Enfoque de GitOps para la administración de clústeres
Herramientas de administración de varios clústeres
Federation de Kubernetes
Mejores prácticas en la gestión de un conjunto de clústeres
Resumen
13. Integración de servicios externos y Kubernetes
Importación de servicios a Kubernetes
Servicios sin selector para direcciones IP fijas
Servicios basados en CNAME para nombres DNS fijos
Enfoques basados en controlador activo
Exportación de servicios desde Kubernetes
Exportación de servicios mediante equilibradores de carga internos
Exportación de servicios en NodePorts
Integración entre máquinas externas y Kubernetes
Compartición de servicios entre Kubernetes
Herramientas de terceros
Mejores prácticas en conexión de clústeres y servicios externos
Resumen
14. Ejecución de aprendizaje automático en Kubernetes
¿Por qué Kubernetes es ideal para el aprendizaje automático?
Flujo de trabajo del aprendizaje automático
Aprendizaje automático para administradores de clúster de Kubernetes
Entrenamiento del modelo en Kubernetes
Entrenamiento del primer modelo en Kubernetes
Entrenamiento distribuido en Kubernetes
Restricciones de recursos
Planificación de particularidades
Hardware especializado
Bibliotecas, controladores y módulos de kernel
Almacenamiento
Almacenamiento y distribución del conjunto de datos entre nodos esclavos durante el entrenamiento
Puntos de control y modelos de grabación
Interconexión
Protocolos especializados
Preocupaciones del científico de datos
Mejores prácticas en aprendizaje automático en Kubernetes
Resumen
15. Creación de patrones de aplicaciones de alto nivel sobre Kubernetes
Enfoques para desarrollar abstracciones de alto nivel
Extensión de Kubernetes
Extensión de clústeres de Kubernetes
Ampliación de la experiencia de usuario de Kubernetes
Consideraciones de diseño en la creación de plataformas
Apoyo a la exportación de una imagen de contenedor
Soporte a los mecanismos existentes de servicios y descubrimiento de servicios
Mejores prácticas en la creación de plataformas de aplicaciones
Resumen
16. Gestión de aplicaciones con estado y apátridas
Volúmenes y montajes de volumen
Mejores prácticas en volúmenes
Almacenamiento en Kubernetes
PersistentVolume
PersistentVolumeClaims
Clases de almacenamiento
Interfaz de almacenamiento de contenedores y FlexVolume
Mejores prácticas en almacenamiento de Kubernetes
Aplicaciones con estado
StatefulSets
Operadores
Mejores prácticas en StatefulSet y Operators
Resumen
17. Control de admisión y autorización
Control de admisión
¿Qué son?
¿Por qué son importantes?
Tipos de controladores de admisión
Configuración de webhooks de admisión
Mejores prácticas en control de admisión
Autorización
Módulos de autorización
ABAC
RBAC
Webhook
Mejores prácticas de autorización
Resumen
18. Conclusión
Prefacio
A quién va dirigido este libro
Kubernetes es el estándar de facto para el desarrollo nativo en la nube. Es una potente herramienta que puede hacer que tu próxima aplicación sea más fácil de desarrollar, más rápida de desplegar y más fiable a la hora de operar. Sin embargo, para descubrir el poder de Kubernetes es necesario saber usarlo correctamente. Este libro está dirigido a cualquier persona que implemente aplicaciones del mundo real con Kubernetes y que esté interesada en aprender los diseños y las prácticas que se pueden emplear en las aplicaciones que se crean con esta herramienta.
Es importante destacar que este libro no es una introducción a Kubernetes. Suponemos que tú, lector, estás familiarizado a nivel básico con la API y con sus herramientas, y que sabes cómo crear e interactuar con el clúster de Kubernetes.
Este libro es un recurso para todos aquellos que quieran profundizar en cómo desplegar aplicaciones específicas y tareas en Kubernetes. Te será de utilidad tanto si estás a punto de desplegar tu primera aplicación con esta herramienta como si llevas años utilizando Kubernetes.
Por qué hemos escrito este libro
Entre los cuatro autores, acumulamos mucha experiencia ayudando a una gran cantidad de usuarios a desplegar sus aplicaciones en Kubernetes. A través de esta experiencia, hemos visto dónde encuentran más dificultades los usuarios, y los hemos ayudado a encontrar su camino hacia el éxito. Cuando nos sentamos a escribir este libro, intentamos plasmar estas experiencias para que muchas más personas pudieran aprender con las lecciones que asimilamos de la escucha de las necesidades de los usuarios. Esperamos que al ponerlo por escrito podamos difundir nuestro conocimiento y ayudarte a que puedas implementar y administrar con éxito tu aplicación en Kubernetes.
Exploración del libro
Aunque el libro se puede leer de principio a fin en una sola sesión, no es así como pretendemos que se haga. Lo diseñamos como una colección de capítulos independientes; cada capítulo ofrece una visión general completa de una tarea en particular de Kubernetes. Os animamos a que os sumerjáis en el contenido del libro para aprender sobre un tema o sobre algo en lo que tengáis un interés específico, y que luego lo dejéis para regresar a él solo cuando surja un nuevo tema.
A pesar de este enfoque independiente, hay algunos temas recurrentes a lo largo del libro. Por ejemplo, hay varios capítulos que tratan el desarrollo de aplicaciones en Kubernetes. El capítulo 2 se ocupa de los flujos de trabajo del desarrollador. El capítulo 5 trata sobre la integración continua y las pruebas. El capítulo 15 aborda la creación de plataformas de alto nivel sobre Kubernetes, y en el capítulo 16 se discute la gestión del estado de aplicaciones con estado. Además de tratar el desarrollo de aplicaciones, hay varios capítulos sobre servicios operativos en Kubernetes. El capítulo 1 se dedica a la configuración de un servicio básico, y el capítulo 3 trata la monitorización y las métricas. El capítulo 4 aborda la gestión de la configuración, mientras que el capítulo 6 se dedica a versiones y lanzamientos. El capítulo 7 se ocupa de la implantación de las aplicaciones a nivel mundial.
También hay varios capítulos sobre gestión de clústeres, incluido el capítulo 8 sobre gestión de recursos, el capítulo 9 sobre interconexión, el capítulo 10 sobre seguridad de cápsulas, el capítulo 11 sobre políticas y gobierno, el capítulo 12 sobre la administración de varios clústeres, y el capítulo 17 sobre control de admisión y autorización. Finalmente, hay varios capítulos que son totalmente independientes, que tratan sobre el aprendizaje automático (capítulo 14) y la integración con servicios externos (capítulo 13).
Aunque puede ser útil leer todos los capítulos antes de poner en práctica cualquier aspecto en el mundo real, tenemos la esperanza de que el libro se trate como un manual principal de referencia. Tiene la intención de ser una guía, ya que pone en práctica estos temas en el mundo real.
Convenciones que se utilizan en el libro
Este elemento indica un consejo o una sugerencia.
Este elemento indica una nota general.
Este elemento indica una advertencia o precaución.
Uso de los ejemplos de código
Hay material complementario actualizado (ejemplos de código, ejercicios, etc.) disponible para su descarga en https://oreil.ly/KBPsample.
Si tienes alguna pregunta técnica o algún problema cuando utilices los ejemplos de código, por favor, envía un correo electrónico a info@marcombo.com.
Este libro está aquí para ayudarte a hacer tu trabajo. Los códigos de ejemplo que se facilitan en este libro puedes usarlos en tus programas y documentación. No necesitas ponerte en contacto con nosotros para pedir permiso, a menos que vayas a reproducir una parte importante del código. Por ejemplo, escribir un programa que use varios fragmentos de código de este libro no requiere permiso; vender o distribuir ejemplos de los libros de Marcombo requiere permiso; responder a una pregunta citando este libro y citar un código de ejemplo no requiere permiso; y la incorporación de una cantidad importante de código de los ejemplos de este libro en la documentación de tu producto requiere permiso.
Generalmente no pedimos que se incluya una atribución, pero apreciamos que se haga. Una atribución contiene título, autor, editor e ISBN. Por ejemplo: Guía práctica de Kubernetes de Brendan Burns, Eddie Villalba, Dave Strebel y Lachlan Evenson, Editorial Marcombo, ISBN: 978-84-267-2880-7.
Si crees que el uso por tu parte de los ejemplos de código no está justificado o no respeta los permisos otorgados más arriba, no dudes en ponerte en contacto con nosotros en info@marcombo.com.