m1lectura4-salida.pdf
Document Details
Uploaded by Deleted User
Tags
Full Transcript
Administracióny orquestación de contenedores Introducción Si bien vamosa analizar más a fondo los contenedores, resaltando la idea de escalabilidad,a medida que crece el número de contenedores surge otro interrogante: ¿como administrarlos? En esta lectura, vamosa conocer tecnologías que solucionan...
Administracióny orquestación de contenedores Introducción Si bien vamosa analizar más a fondo los contenedores, resaltando la idea de escalabilidad,a medida que crece el número de contenedores surge otro interrogante: ¿como administrarlos? En esta lectura, vamosa conocer tecnologías que solucionan loanteriormente mencionado. 1.Situación problemática Te contratan como SRE (site reliability engineer) para un equipo de trabajo que se encarga administrar la infraestructura de software de una empresa de televisión por streamingy video os demand. La empresa tenía registrados 100 suscriptores, pero en apenas dos meses losclientes ascendierona 500,y esa situación comenzóa preocupara la empresa. La firma ha efectuado relevamientos, encuestas y estudios de mercado, y se ha identificado que el servicio está creciendo en su demanday necesita expandir sus aplicacionesy servicios, siguiendo una idea de escalabilidad. La empresa ha definido los siguientes requerimientos: necesidad de más aplicacionesy servicios. Infraestructura escalabley segura. Uso de microservicios. Establecimiento de una política de escalabilidad horizontal. Necesidad de más servidores, físicosy virtuales. En lo que respectaa la infraestructuray el desarrollo de software, se establece que el uso de la virtualizacióny los contenedores será clave. Ya conocemos lasvirtudes de la virtualizacióny de los contenedores, pero ahora analicemos: en lasituación problemática, escalar no es una opción, sino una obligación. El uso de contenedores será la políticaa seguir, pero dado elaumento de aplicacionesy servicios, también crecerá la cantidad de contenedores. Entonces, frentea esto, surge otra situacióna resolver: ¿cómo organizary administrar correctamente esos contenedores? 2. Escalabilidad, balanceo de cargay clústeres Analizar estos conceptos nos permitirá comprender mejor laadministración de contenedores. Escalabilidad De acuerdo con laJunta de Andalucía (s. f.), el concepto de escalabilidad puede definirse de la siguiente manera: “Se entiende por escalabilidada la capacidad de adaptacióny respuesta de un sistema con respectoa su rendimiento,a medida que aumenta de forma significativa su número de usuarios” (https://bit.Iy/3loOFds). Cuando un sistema necesita crecer para atender a más usuarios, pero manteniendo su rendimiento, se deben considerar dos opciones: aumentar lapotencia del hardware sobre el que opera,y buscar alternativas en lo que respecta al software combinado con hardware. Se pueden distinguir dos tipos de escalabilidad: vertical y horizontal. En este sentido, se establece losiguiente: el escalar verticalmenteo escalar hacia arriba significa añadir más recursosa un solo nodo en particular dentro de un sistema, tal como el añadir memoriao un disco duro más rápidoa una computadorao servidor (Junta de Andalucía, s. f.). La escalabilidad horizontal significa agregar más nodos a un sistema (más equipos servidores), para dar más potenciaa la red de trabajo. Este tipo de escalabilidad se basa en lamodularidad de su funcionalidad (Junta de Andalucía, s.f.). Balanceo de carga Es la técnica que se usa para dividir el trabajoy compartirlo entre varios procesos, ordenadoresu otros recursos. Se busca que elbalanceo de carga sea equitativo entre las partes intervinientes,a través del uso de algoritmos que redirigen las peticiones de los sistemas hacia los recursos más apropiados,y evitar sobrecargara recursos en uso, mientras otros están más liberados. Existen algoritmos de balanceo de carga por hardwarey por software (Junta de Andalucía, s.f.). Clúster sobre servidores Se basa en laidea de agrupar varios servidores para que trabajen en un entorno en paralelo. Es decir, trabajar como si fuera un solo servidor (Junta de Andalucía, s. f.). Administracióny orquestación de contenedores Hay que hacer una gestión de los contenedores en cuantoa la producción, con el fin de hacer frentea situaciones como lasquese describena continuación: se necesitan muchos servidores físicos y virtuales para dar soporte a aplicaciones y servicios. Las aplicaciones pueden necesitar correr en más de un servidor y será necesario mantenerlas (cambios, actualizaciones). Administrary mantener los microservicios: puede ser necesario hacer un seguimiento de cientos de componentes. Hacer una administración manual de una gran cantidad de contenedores en cuantoa la producción puede llegara ser Ientoy peligroso, porque el humano es falibley se equivoca (piensen en cambiar la configuración en producción de una aplicación bajo contenedores que operan en 20, 30o más servidores). Estas situaciones ameritan establecer un mecanismo que automatice esta administración. Las tecnologías de la información tienen una respuestaa esta necesidad por medio de lo que se conoce como orquestación de contenedores, lo cual permite administrar un gran número de contenedores y la manera en la que interactúan entre sí. En este sentido, se establece lo siguiente: La portabilidady reproducibilidad de un proceso en contenedores brinda la oportunidad de movery escalar nuestras aplicaciones en contenedoresa través de nubesy centros de datos. Los contenedores garantizan eficazmente que esas aplicaciones se ejecuten de la misma manera en cualquier Iugar, lo que nos permite aprovechar todos estos entornos de forma rápida y sencilla. Además, a medida que ampliamos nuestras aplicaciones, necesitamos algunas herramientas para ayudara automatizar el mantenimiento de esas aplicaciones, habilitar el reemplazo de contenedores defectuosos automáticamente y administrar la implementación de actualizaciones y reconfiguraciones de esos contenedores durante su ciclo de vida. Las herramientas para administrar, escalary mantener aplicaciones en contenedores se denominan orquestadores. (Docker, Inc., s. f., https://dockr.Iy/3II1u8I). Herramientas para orquestar contenedores Algunas de lasherramientas para orquestación de contenedores son Kubernetes, Docker Swarm y OpenShift. Para la situación problemática, se opta por Kubernetes, porque es uno de los servicios más completosy más utilizados en la actualidad en lo empresarial,y es completamente aplicable para lasituación problemática. Kubernetes De acuerdo con loestablecido por The Kubernetes Authors (s. f.): “Kubernetes es una plataforma portátil, extensible y de código abierto para administrar cargas de trabajo y servicios en contenedores, que facilita tanto la configuración declarativa como la automatización” (https://bit.Iy/3rEm3B1). Kubernetes fue liberado por Google en 2014y actualmente es mantenido por Cloud Native Computing Foundation (parte de Linux Foundation). Kubernetes ofrece un entorno de administración que se centra en contenedores. Kubernetes orquesta la infraestructura de cómputo, redesy almacenamiento, para que las cargas de trabajo de los usuarios no tengan que hacerlo (The Kubernetes Authors, s. f.). Los componentes de Kubernetes son losque se observan en lafigura 1. Figura 1:Arquitectura de Kubernetes Fuente: Kubernetes, s. f., https://bit.fy/3o5i91D. Figura 1: Arquitectura de Kubernetes. En la figura 2, se describen los componentes que conforman laarquitectura de Kubernetes. Kubernetes c/osfer (clúster de Kubernetes): al implementar Kubernetes, se obtiene un clúster. Un clúster es un conjunto de nodos (worker machineso máquinas trabajadoras), que ejecutan aplicaciones en contenedores. Los clústeres de Kubernetes permiten que los contenedores se ejecuten en varias máquinasy entornos: virtuales, físicos, basados en lanubey locales. Los worker nos/es (nodos trabajadores) alojan los pods, que son loscomponentes de lacarga de trabajo (workload) de la aplicación (The Kubernetes Authors, s. f.). Estos worker nodes son las instancias,y cada uno de ellos corre el Kubelets, que es el agente de Kubernetes,y otro servicio Ilamado kube-proxy. Kube-proxy recibe el tráficoy lo redirigea los pods que lorequierano a los que les corresponda ese tráfico. Todos estos nodosy sus componentes se conectana laAPI de Kubernetes. Pods: grupo de contenedores (unoo más contenedores) que comparten elmismo namespace de red; se suele decir que comparten la misma IP. Normalmente, se corre un solo contenedor por cada pod, pero en ocasiones se puede correr más de un contenedor para dividir tareas. El control plane (plano de control) administra los worker nodesy lospods en el clúster (The Kubernetes Authors, s. f.). Se encarga de las tareas como orquestador. En entornos de producción, el control plane, generalmente, se ejecuta en varios equipos, y un clúster generalmente ejecuta varios nodos, loque brinda toleranciaa fallasy alta disponibilidad. Componentes delcontrol plane: toman decisiones globales sobre elclúster (como, por ejemplo, la programación), además de detectary respondera loseventos del clúster (por ejemplo, iniciar un nuevo pod cuando el campo de réplicas de una implementación no está satisfecho) (The Kubernetes Authors, s. f.). Los componentes del plano de control se pueden ejecutar en cualquier máquina delclúster. Sin embargo, para simplificar, los scripts de configuración, generalmente, inician todos los componentes delcontrol plane en la misma máquina,y no ejecutan contenedores de usuario en esta máquina (The Kubernetes Authors, s. f.). API server de Kubernetes (API): expone laAPI de Kubernetes. El servidor de API es la interfaz (front end) del control plane de Kubernetes. La implementación principal de un servidor API de Kubernetes es kube-apiserver; kube-apiserver está diseñado para escalar horizontalmente, es decir, escalar mediante la implementación de más instancias. Es posible ejecutar varias instancias de kube-apiserver y equilibrar el tráfico entre esas instancias (The Kubernetes Authors, s. f.). Scheduler (sched): es un planificador que se encarga de buscar pods recién creados sin un nodo asignado,y selecciona un nodo para que se ejecuten según ciertas políticas. Los factores que se tienen en cuenta para las decisiones de programación incluyen los siguientes: requisitos de recursos individuales y colectivos, restricciones de hardware, software, localidad de datos, interferencia entre cargas de trabajo y fechas límite (The Kubernetes Authors, s. f.). Contro//er manager: regula el estado del clúster para que se correspondaa como se había diseñado, dirige la orquestación. Ejecuta los procesos del controlador; por ejemplo, un tipo de controlador es el controlador de nodo que se encarga de notificary responder cuando los nodos se caen. Cloud Controller Manager (c-c-m): es opcional. Permite hacer tareas extras (a las propias de Kubernetes) con el proveedor de Cloud. Se conectaa la API del proveedor de Cloud (Cloud provider API), por ejemplo, Amazon, Google Cloud, para hacer tareas tales como, por ejemplo, las siguientes: crear un load balancer (balanceador de carga), crearo destruir instancias, solicitar recursos al proveedor de Cloud como, por ejemplo, un disco virtualy asociarloa una instancia, entre otras. etcd: base de datos de tipo key value (clave valor) que permite guardar el estado (datos) del clúster de Kubernetes. ¿Cómo trabajar con Kubernetes? Retomando lasituación problemática: el equipo de trabajo del que formas parte va a efectuar pruebas levantando un clúster de Kubernetes en una computadora local con Windows 10,para posteriormente llevar, progresivamente, este modo de trabajoa las aplicaciones de la empresa. Se necesitan las siguientes herramientas: Kubectl (Kubernetes comand line too/). Cliente de Kubernetes que se vaa conectara un clúster de Kubernetes. Interfaz por línea de comandos que permite ejecutar comandos en clústeres de Kubernetes. Con kubectl, se pueden implementar aplicaciones, inspeccionar y administrar recursos del clúster,y ver registros. Minikube: permite ejecutar Kubernetes localmente (en una computadora local con Linux, Windowso macos); ejecuta un clúster de Kubernetes de un solo nodo. Instala una máquina virtual con todos loscomponentes de Kubernetes. Docker Desktop instaladoy con su engine corriendo en la computadora. Descargar e instalar el ejecutable (.exe) de kubectl desde https://kubernetes.io/docs/tasks/tooIs/install-kubectl-windows/. Agregar a la variable de entorno path la ruta absoluta al ejecutable descargado. Esto hace que Windows sepa dónde se encuentra el ejecutable al momento de correr comandos kubectl desde un intérprete. Luego, desde cmd o PowerShell, ejecutar el comando kubectl version -- client=true. Este comando devuelve laversión instalada de kubectl. Crear un clúster local de Kubernetes con Minikube. Descargar el ejecutable (.exe) de Minikube desde https://minikube.sigs.k8s.io/docs/start/e instalarlo. Figura 2: Instalación de Kubernetes Minikube Fuente: elaboración propia. Figura 2. Instalación de Kubernetes Minikube. En la figura 2, se puede observar la ventana del proceso de instalación de Minikube en Windows 10. AIterminar la instalación, incluir la ruta C:\Program Files\Kubernetes\Minikubea la variable de entorno path. Levantar un clúster de Kubernetes desde PowerShell como administrador con el comando minikube start. Esto hace que se conecte elcliente kubectl con Minikube, descarguey configure Kubernetes, cree un clúster Ilamado Minikubey se utilice el namespace por defecto Ilamado default. Figura 3: Iniciar Minikube Fuente: elaboración propia. Figura 3: Iniciar Minikube. En lafigura 3, es posible observar cómo elcomando minikube start iniciay crea elclúster de Kubernetes Ilamado Minikube. Verificar el nodo creado con el comando kubectl get nodesy se obtiene: NAME: minikube, STATUS: Ready, ROLES: control-plane, master AGE: 4m6s VERSION: v1.22.2. Esto indica que el nodo se Ilama Minikube, que está Iisto,y que fue creado hace4 m 6 s. Oep/oymenf de aplicaciones: se vaa desplegar una aplicación de muestra Ilamada hello- minikube en el puerto 8080, almacenada en un contenedor basado en la imagen k8s.gcr.io.echoserver. Este despliegue es posible por medio de los comandos kubectl create deploymenty kubectl expose deployment. Además, con elcomando minikube service hello-minikube se despliega laaplicación en el navegador web (ver figura 4). Figura 4: Despliegue de una aplicación en un clúster Fuente: elaboración propia. Figura 4: Despliegue de una aplicación en un clúster. En esta figura, se observa cómo se despliegay se levanta una aplicación en un clúster de Kubernetes. Si la aplicación no abre en el navegador web, usar el comando kubectl port-forward service/hello-minikube 7080:8080, que permite direccionar el puerto. Luego, dirigirsea la URL http://IocaIhost:7080/. Allí, se debe desplegar laaplicación (ver figura 5). Figura 5: Despliegue de una aplicación Fuente: elaboración propia. Figura 5: Despliegue de una aplicación. En la figura 5, se puede observar la aplicación hello- minikube en un navegador web. Se muestran losmetadatos de solicitud del servidor nginx como losCLIENT VALUES, SERVER VALUES, losHEADERS RECEIVEDy elBODY enlasalida de la aplicación. En la interfaz de Docker Desktop, se puede ver elcontenedor con la aplicación que está corriendo en el clúster de Kubernetes (ver figura 6). Figura 6: Interfaz de Docker Desktop Fuente: captura de pantalla del software Docker Desktop (Hykes, 2013). Figura 6: Interfaz de Docker Desktop. En la figura 6, se puede observar el contenedor de la aplicación hello-minikube. Ejecutamos los siguientes comandos (ver figura 7): kubectl get nodes, que detalla los nodos delclúster, es un solo nodo Ilamado Minikube; kubectl get-context Iista el contexto, que es una combinación de la URL del servidor en el que se encuentra el clústery las credenciales para conectarnosa ese servidor. En este caso, el servidor es localy es la máquina virtual que crea Minikube; kubectl get ns obtiene namespaces del clúster. Un namespace es una división lógica del clúster para poder separar la carga de trabajo (workload). Se listan los namespaces habituales de cualquier clúster; kubectl -n default get pods muestra elúnico pod del nodo con el contenedor de la aplicación hello-minikubey su servidor nginx; kubectl -n kube-system get pods muestran lospods del namespace kube-system, que es un namespace que usa Kubernetes para correr sus pods de sistema; kubectl dashboard despliega un panel de control en el navegador web predeterminado para administrar, de manera visual, nuestro clúster en la URL http://127.0.0.1:58497/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes- dashboard:/proxy/#/workIoads?namespace=default (ver figura 8). Figura 7: Comandos kubectl Fuente: elaboración propia. Figura 7: Comandos kubectl. En la figura 7, se observan los comandos para listar nodos, identificar namespace, listar podsy desplegar dashboard. Figura 8: Dashboard Fuente: elaboración propia. Figura 8: Dashboard. En esta figura, se presenta el panel de control que muestra características del clúster. El panel muestra el único deployment en elnamespace default de la aplicación hello- minikube, elpod y la única réplica. Escalar la aplicación desplegada. Lo haremos por medio de lacreación de 3 réplicas. La creación de réplicas permite balancear la cargay el tráfico de la aplicación, y, en caso de que una de las réplicas deje de operar, es reemplazada por otra. Ejecutar los siguientes comandos: kubectl get deployments, que Iista el único deployment hecho en elúnico pod, kubectl get rs, que Iista las réplicas (replicas set; hasta el momento una). El comando kubectl scale deployments/hello-minikube -replicas=3 crea 3 réplicas; kubectl get deployments Iista las 3 réplicas; kubectl get pods -o wide muestra los3 pods con diferentes direcciones IP. Figura 9: Escalar en Kubernetes Fuente: elaboración propia. Figura 9: Escalar en Kubernetes. En lafigura 9, se presenta el comando para escalar por medio de lacreación de3 réplicas. Desplegamos elpanel de Kubernetes, con el comando minikube dashboard. En él, se observan elúnico despliegue, los tres pods ejecutándosey una réplica ejecutándose. Figura 10: Escalar Fuente: elaboración propia. Figura 10: Escalar. En la figura 10, se presenta el panel de control de Kubernetes con las actualizaciones hechas. Actividades de repaso de lectura Pregunta de múltiple opción Sobre kubectl, ¿cuál de lassiguientes afirmaciones es correcta? Cliente de Kubernetes que se vaa conectara un clúster de Docker. Es un clúster de Kubernetes Cliente de Kubernetes que se vaa conectara un clúster de Kubernetes Cliente de Docker para administrar contenedores Cierrey repaso En conclusión, en la situación problemática se decidió trabajar con Kubernetes. Se efectuó una prueba creando un clúster de un solo nodo; este nodo tiene un pod con un contenedor con la imagen k8s.gcr.io/echoserver:1.4, dicha imagen es una aplicación tipo «hola mundo» Ilamada hello-minikube, que corre bajo el servidor web nginx. Luego, se escaló la aplicación desplegada por medio de la creación de3 réplicas. Después de esta prueba, el equipo de trabajo concluye que es viable aplicar Kubernetes, y comenzarán los procesos para levantar clústeres de Kubernetes con respectoa servidoresy proveedores de Cloud de forma progresiva, para administrar los contenedores de las diferentes aplicaciones que tiene la empresa de televisión. Referencias Docker, Inc., (s. f.). Overview of Docker. Orchestration [traducción propia]. Recuperado de https://docs.docker.com/get-started/orchestration/ Hykes, S. (2013). Docker Desktop. Docker, Inc.: Palo Alto, California. Junta de Andalucía, (s. f.). Conceptos sobre la escalabilidad. Recuperado de http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/220 The Kubernetes Authors, (s. f.). What is Kubernetes [traducción propia]. Recuperado de https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/