Está en la página 1de 46

Adminstración de

contenedores con Amazon ECS


Necesidad de administrar un contenedor
¿Qué es un contenedor?

Un contenedor es una unidad de software que encapsula una aplicación y


todas sus dependencias en un paquete portátil y autónomo. Cada
contenedor se ejecuta como un proceso aislado en un host, lo que significa
que no depende de la infraestructura subyacente. Los contenedores ofrecen
una forma eficiente y rápida de implementar y ejecutar aplicaciones, lo que
los hace ideales para escenarios en los que es necesario mover
aplicaciones entre diferentes entornos o plataformas.
Necesidad de administrar un contenedor
¿Por qué es importante administrar un contenedor?

Es importante administrar un contenedor por varias razones. En primer lugar,


los contenedores pueden tener dependencias complejas y requerir
configuraciones específicas para funcionar correctamente. La administración
adecuada de los contenedores garantiza que todas las dependencias estén
instaladas y configuradas correctamente, lo que evita posibles errores y
fallos en la aplicación.
Necesidad de administrar un contenedor
¿Por qué es importante administrar un contenedor?

En segundo lugar, los contenedores son efímeros, lo que significa que pueden
ser creados y eliminados rápidamente. La administración adecuada de los
contenedores garantiza que se implementen y eliminen de forma correcta y
segura, lo que ayuda a mantener la integridad y seguridad de la aplicación.
Necesidad de administrar un contenedor
¿Por qué es importante administrar un contenedor?

Por último, la administración adecuada de los contenedores permite una mejor


gestión del rendimiento y la escalabilidad de la aplicación. Los contenedores
pueden ser escalados horizontalmente, lo que significa que se pueden
agregar o eliminar contenedores según sea necesario para manejar la carga
de trabajo.
Problemas de la virtualización
App 1 App 1 App 1 App 1 La virtualización es una tecnología que permite la creación
de máquinas virtuales en un servidor físico, lo que permite
Runtime Runtime Runtime Runtime la ejecución de múltiples sistemas operativos y
aplicaciones en un solo servidor. Aunque la virtualización
ha tenido un impacto positivo en la eficiencia y la
escalabilidad de la infraestructura de TI, también ha
Guest OS Guest OS Guest OS Guest OS presentado algunos problemas. Algunos de los problemas
de la Virtualización.

1. Sobrecarga de recursos: La virtualización puede resultar


en una sobrecarga de recursos, lo que significa que se
AWS Hypervisor asignan más recursos a las máquinas virtuales de lo que
realmente necesitan. Esto puede provocar un uso
ineficiente de los recursos y, en última instancia, una
AWS EC2 Host disminución del rendimiento y una reducción de la
eficiencia.
Problemas de la virtualización
2. Complejidad: La virtualización puede aumentar la complejidad
App 1 App 1 App 1 App 1 de la infraestructura de TI. La creación y gestión de múltiples
máquinas virtuales en un solo servidor puede ser complicado y
Runtime Runtime Runtime Runtime requiere una gestión y supervisión cuidadosa para garantizar
que todo funcione correctamente.

3. Dependencia de la infraestructura subyacente: La


Guest OS Guest OS Guest OS Guest OS virtualización depende de la infraestructura subyacente para
proporcionar recursos y soporte. Si la infraestructura
subyacente falla, todas las máquinas virtuales que dependen
de ella también fallarán.

AWS Hypervisor
4. Costo: La virtualización puede ser costosa. Se requiere
hardware y software especializado para implementar y
administrar las máquinas virtuales, lo que puede aumentar los
AWS EC2 Host costos de la infraestructura de TI.
Problemas de la virtualización
5. Seguridad: La virtualización también puede presentar
App 1 App 1 App 1 App 1 riesgos de seguridad. Las vulnerabilidades en la
infraestructura subyacente pueden ser explotadas por los
Runtime Runtime Runtime Runtime atacantes para acceder a múltiples máquinas virtuales y,
potencialmente, a toda la red.

Guest OS Guest OS Guest OS Guest OS En conclusión, aunque la virtualización puede mejorar la


eficiencia y la escalabilidad de la infraestructura de TI,
también puede presentar algunos problemas, como la
sobrecarga de recursos, la complejidad, la dependencia
de la infraestructura subyacente, el costo y la seguridad.
AWS Hypervisor

AWS EC2 Host


Contenerización
La contenerización es una tecnología que permite la creación y
App 1 App 1 App 1 App 1 ejecución de aplicaciones en contenedores, lo que proporciona
numerosas ventajas. A continuación, describiré algunas de las
Runtime Runtime Runtime Runtime ventajas más destacadas de la contenerización:

App 5 App 5 App 6 App 7


1. Portabilidad: La contenerización permite que las aplicaciones se
Runtime Runtime Runtime Runtime ejecuten de manera consistente en diferentes entornos de
desarrollo, prueba y producción. Los contenedores pueden ser
fácilmente trasladados entre diferentes plataformas y sistemas
Container Engine operativos sin tener que preocuparse por problemas de
compatibilidad.

Host OS 2. Eficiencia: Los contenedores son más eficientes que las


máquinas virtuales, ya que pueden compartir recursos con el
sistema operativo host y otros contenedores en el mismo
servidor. Esto permite una utilización más eficiente de los
Host Hardware recursos y un menor costo de infraestructura.
Contenerización
3.Escalabilidad: La contenerización permite escalar rápidamente las
App 1 App 1 App 1 App 1 aplicaciones para adaptarse a cambios en la demanda. Los
contenedores pueden ser fácilmente replicados y distribuidos en
Runtime Runtime Runtime Runtime múltiples servidores para satisfacer las necesidades de
capacidad.
App 5 App 5 App 6 App 7

Runtime Runtime Runtime Runtime 4.Flexibilidad: La contenerización permite a los desarrolladores


crear, probar y desplegar aplicaciones de manera más rápida y
flexible. Los contenedores pueden ser fácilmente creados y
Container Engine destruidos, lo que facilita el proceso de desarrollo y reduce el
tiempo de inactividad.

Host OS 5.Aislamiento: Los contenedores proporcionan aislamiento entre las


aplicaciones y el sistema operativo host, lo que significa que si
una aplicación falla, no afectará a otras aplicaciones en el mismo
servidor. Esto mejora la estabilidad y la seguridad de la
Host Hardware infraestructura.
Arquitectura de imágenes Docker
jskdhs9273n73j834

jf837nfjf2bnc02732

ajkdf0y72l4k0ks742
Imagen de Docker
Arquitectura de imágenes Docker
Una imagen de Docker es como una plantilla que contiene todos los componentes necesarios para ejecutar una aplicación o
servicio. El proceso de creación de una imagen de Docker se realiza a través de un archivo llamado Dockerfile, que contiene
una serie de instrucciones para construir la imagen.

Cada instrucción en el Dockerfile produce una nueva capa en el sistema de archivos de la imagen de Docker. Estas capas se
superponen y contienen los comandos necesarios para construir y configurar la aplicación o servicio contenido en la imagen.

Cuando se inicia un contenedor de Docker, se agrega una capa de lectura y escritura encima de las capas de solo lectura de
la imagen de Docker. Esta capa de lectura y escritura permite que el contenedor modifique el sistema de archivos de la
imagen sin afectar las capas subyacentes de la imagen. En otras palabras, cualquier cambio que se realice en el contenedor
se almacena en la capa de lectura/escritura, lo que garantiza que la imagen original permanezca sin cambios y pueda ser
reutilizada para múltiples contenedores.

Este enfoque de sistema de archivos en capas es muy útil porque permite construir imágenes de Docker de forma rápida y
eficiente. Si una imagen ya está construida, sólo se necesitan actualizar o reconstruir las capas que hayan cambiado, lo que
ahorra tiempo y recursos. Además, este enfoque también facilita la distribución y el uso compartido de las imágenes de
Docker, ya que sólo se necesitan transferir las capas actualizadas.
Arquitectura de contenedores Docker
jskdhs9273n73j834 R/W Layer

jf837nfjf2bnc02732 jskdhs9273n73j834

ajkdf0y72l4k0ks742 jf837nfjf2bnc02732
Imagen de Docker ajkdf0y72l4k0ks742
Docker container 1

Contenedores 1 y 2 son idénticos, excepto por la capa de R/W Layer


lectura/escritura.
jskdhs9273n73j834

jf837nfjf2bnc02732
Los contenedores comparten algunas capas, lo que los hace más
eficientes. Se minimiza el uso de disco. ajkdf0y72l4k0ks742
Docker container 2
Docker en un Sistema Operativo
Container Registry

Docker host

Docker host

Dockerfile Container Registry.


Ej: Dockerhub, ECR
¿Dónde se almacenan las imágenes
Docker?

Docker Hub (https://hub.docker.com)

Docker Hub es un servicio en la nube que ofrece una amplia variedad de imágenes de Docker preconstruidas, incluyendo imágenes oficiales de
proveedores de software, así como imágenes de la comunidad. Docker Hub también permite a los usuarios crear sus propias imágenes y subirlas al
repositorio, ya sea de forma pública o privada, lo que les brinda una opción flexible para compartir y administrar sus imágenes de contenedores.


Amazon ECR (Amazon Elastic Container Registry)

Amazon Elastic Container Registry (ECR) es un servicio de registro de imágenes de contenedores totalmente administrado por Amazon Web Services
(AWS). Es una opción muy adecuada para usuarios que ya estén trabajando con AWS ya que proporciona una integración perfecta con otros servicios de
AWS como Amazon Elastic Kubernetes Service (EKS), Amazon Elastic Container Service (ECS) y AWS Fargate.

ECR proporciona un registro privado para almacenar y administrar imágenes de contenedores de forma segura y escalable. Los usuarios pueden crear
repositorios de imágenes y administrar el acceso a estos repositorios mediante políticas de permisos de AWS Identity and Access Management (IAM).
Además, los usuarios de ECR pueden escalar el almacenamiento de imágenes en función de sus necesidades y solo pagar por el almacenamiento y la
transferencia de datos que usan.
Amazon ECR
Amazon Elastic Container Registry (ECR) es un servicio completamente administrado de registro de contenedores que permite a los
desarrolladores almacenar, administrar y desplegar imágenes de contenedores de Docker en la nube de AWS. ECR es un componente clave
en la construcción de aplicaciones basadas en contenedores, ya que proporciona un lugar seguro y escalable para almacenar y compartir
imágenes de contenedores Docker.
ECR ofrece características como:
Almacenamiento seguro y escalable de imágenes de contenedores Docker: ECR almacena y administra las imágenes de contenedores
Docker de forma segura en la nube de AWS. Los desarrolladores pueden almacenar cualquier número de imágenes de contenedores
Docker, lo que permite una fácil escalabilidad de aplicaciones basadas en contenedores.
Integración sin problemas con otras herramientas de AWS: ECR se integra sin problemas con otras herramientas de AWS, como Amazon
Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS) y AWS Fargate, lo que facilita la implementación de aplicaciones
basadas en contenedores en la nube de AWS.
Control de acceso basado en políticas: ECR ofrece opciones de control de acceso basado en políticas que permiten a los desarrolladores
controlar quién tiene acceso a las imágenes de contenedores almacenadas. Esto ayuda a garantizar la seguridad de las imágenes de
contenedores y a cumplir con los requisitos de cumplimiento.
Integración con herramientas de terceros: ECR se integra con herramientas de terceros como Jenkins, Travis CI y otras herramientas de
integración y entrega continuas (CI / CD). Esto facilita la implementación de aplicaciones basadas en contenedores y la automatización de
todo el proceso de construcción y despliegue.
Gestión de contenedores en AWS
Amazon ofrece una serie de soluciones de contenedores en la nube para satisfacer las necesidades de
diferentes tipos de usuarios.

Amazon ECS es una plataforma de contenedores propia de Amazon que permite a los usuarios
ejecutar, escalar y administrar contenedores Docker de manera eficiente en la nube.

Por otro lado, Amazon EKS es un servicio de Kubernetes completamente administrado por AWS, que
ofrece una manera fácil de ejecutar, escalar y administrar aplicaciones de contenedores de Kubernetes.

Además, AWS Fargate es una plataforma de contenedores serverless de Amazon que permite a los
usuarios ejecutar aplicaciones de contenedores sin tener que administrar la infraestructura subyacente.

Amazon ECR es un servicio de registro de imágenes de contenedores de Amazon, donde los usuarios
pueden almacenar y administrar sus imágenes de contenedores de forma segura y escalable.

Amazon ofrece una amplia gama de soluciones de contenedores en la nube, incluyendo plataformas
propias como ECS y Fargate, así como soluciones de código abierto como EKS, todas las cuales están
diseñadas para ayudar a los usuarios a ejecutar aplicaciones de contenedores de manera eficiente y
escalable.
Configurar la escalabilidad de un
contenedor con clusters

Configurar la escalabilidad de un contenedor con clusters en Amazon ECS es una
tarea esencial para lograr que tus aplicaciones sean altamente disponibles y
escalables. En Amazon ECS, los contenedores se ejecutan en clústeres, que son
grupos de instancias de Amazon EC2 que se ejecutan en diferentes zonas de
disponibilidad.


Para configurar la escalabilidad de un contenedor en Amazon ECS, es importante
definir correctamente los parámetros de configuración del servicio y la definición de
tareas en el clúster. El servicio es el elemento principal que se encarga de la gestión y
la escalabilidad de los contenedores en Amazon ECS. La definición de tareas, por otro
lado, es una descripción de los recursos necesarios para ejecutar un contenedor,
incluyendo la imagen Docker, la memoria y CPU asignadas, y la red.
Configurar la escalabilidad de un
contenedor con clusters

Para configurar la escalabilidad de un servicio en Amazon ECS, puedes utilizar diferentes
estrategias de escalado, como la escalabilidad manual, la escalabilidad programada o la
escalabilidad automática. En la escalabilidad manual, el usuario controla manualmente el
número de contenedores que se ejecutan en el servicio. En la escalabilidad programada,
se definen reglas para aumentar o disminuir el número de contenedores en función de un
cronograma o evento específico. En la escalabilidad automática, Amazon ECS aumenta o
disminuye automáticamente el número de contenedores en función de la carga de
trabajo.

Además de la estrategia de escalado, es importante tener en cuenta otros factores como
la distribución de tareas en diferentes zonas de disponibilidad, la gestión de la memoria y
la CPU, y la monitorización y el registro de los contenedores. Amazon ECS proporciona
herramientas integradas para la monitorización y el registro, como Amazon CloudWatch y
Amazon CloudTrail.
Configurar la escalabilidad de un
contenedor con clusters
Material adicional opcional de consulta:
https://docs.aws.amazon.com/es_es/AmazonECS/latest/
developerguide/cluster-auto-scaling.html
Configurar definiciones de tareas
relacionadas a la administración del
contenedor
Para ejecutar contenedores Docker en Amazon ECS, se requiere una definición de tareas. Entre los parámetros que se pueden especificar en
una definición de tareas se incluyen los siguientes:

La imagen de Docker que se va a utilizar con cada contenedor en su tarea

La cantidad de CPU y de memoria que se va a utilizar con cada tarea o cada contenedor dentro de una tarea

El tipo de lanzamiento a utilizar, que determina la infraestructura en la que se alojan sus tareas

El modo de red de Docker que utilizar para los contenedores en la tarea

La configuración de registros que se va a utilizar para sus tareas

Si la tarea se sigue ejecutando si el contenedor finaliza o falla

El comando que el contenedor ejecuta al iniciarse

Los volúmenes de datos que se utilizan con los contenedores en la tarea

El rol de IAM que las tareas utilizan
Configurar definiciones de tareas
relacionadas a la administración del
contenedor
Una definición de tarea en ECS es una descripción de los recursos necesarios para ejecutar uno o más
contenedores. Esta descripción incluye información como la imagen de Docker a utilizar, los recursos de
CPU y memoria asignados, la configuración de red, entre otros aspectos.

Material adicional:
https://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/task_definitions.html
https://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-
definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html
Configurar respaldos, backups, imágenes y
seguridad de contenedores.
Para asegurar la disponibilidad de las imágenes de contenedor, se puede crear un backup de las imágenes y almacenarlas en un repositorio
privado, como Amazon ECR (Elastic Container Registry).
Amazon ECR transfiere las imágenes de los contenedores mediante HTTPS y las cifra automáticamente en reposo. Se puede configurar políticas
para gestionar los permisos en cada repositorio y restringir el acceso a usuarios y funciones de IAM u otras cuentas de AWS
Para configurar la seguridad de contenedor utilizando Amazon ECR, se pueden seguir los siguientes pasos:
1) Crear un repositorio de ECR: Lo primero que se debe hacer es crear un repositorio de Amazon ECR. El repositorio actuará como un lugar
seguro para almacenar y administrar las imágenes de contenedor.
2) Escanear imágenes de contenedor: Amazon ECR permite escanear automáticamente las imágenes de contenedor en busca de posibles
vulnerabilidades y errores de configuración utilizando Amazon ECR Image Scanning. Esta función se puede habilitar para escanear
automáticamente las imágenes de contenedor cada vez que se empujan al repositorio, o se pueden programar escaneos regulares.
3) Utilizar la integración de AWS Identity and Access Management (IAM): AWS Identity and Access Management (IAM) es un servicio que
permite administrar de forma segura el acceso a los recursos de AWS. Se puede utilizar IAM para definir permisos y roles para los usuarios y
aplicaciones que interactúan con los contenedores. De esta forma, se garantiza que solo los usuarios autorizados puedan acceder y
manipular las imágenes de contenedor almacenadas en Amazon ECR.
4) Utilizar Amazon ECR Registry Policies: Las políticas de registro de Amazon ECR permiten controlar el acceso a los repositorios de ECR y las
imágenes de contenedor que contienen. Se pueden definir políticas para controlar el acceso de los usuarios y las aplicaciones, limitar el
acceso a los repositorios y las imágenes, o incluso restringir el acceso a las imágenes basadas en etiquetas específicas.
El orquestador de contenedores
Kubernetes
Kubernetes es una plataforma de código abierto para
automatizar la implementación, el escalado y la
administración de aplicaciones en contenedores. Agrupa los
contenedores que conforman una aplicación en unidades
lógicas para una fácil administración y descubrimiento. Es
portable y extensible, lo que le brinda la libertad de
aprovechar su infraestructura propia (on-premises), híbrida
o de nube pública. Facilita la automatización y la
configuración declarativa y tiene un ecosistema grande y en
rápido crecimiento
¿Qué es un orquestador de contenedores y
su rol?

La arquitectura de Kubernetes se compone de diferentes
elementos que permiten explotar, desplegar y actualizar los
programas contenerizados2.


El principal componente de Kubernetes es el clúster que
reagrupa a los servidores virtuales o físicos. Estas máquinas
desempeñarán la función de maestro o de nodo2.
Elementos de Kubernetes

Kubernetes se compone de varios elementos clave que trabajan juntos para administrar y coordinar
aplicaciones en contenedores en un entorno de producción:

Clúster: Un clúster es un conjunto de nodos trabajadores que trabajan juntos para ejecutar
aplicaciones con contenedores.

Nodo: Un nodo es un equipo virtual o físico que se especificó con un conjunto mínimo de requisitos de
hardware. Cada nodo es su propio entorno de Linux®, y puede ser una máquina virtual o física.

Plano de control: El plano de control es el conjunto de componentes que forman el plano de control
toman decisiones globales sobre el clúster (por ejemplo, la planificación) y detectan y responden a
eventos del clúster.
Elementos de Kubernetes

kube-apiserver: El servidor de la API es el componente del plano de control de Kubernetes que expone
la API de Kubernetes. Se trata del frontend de Kubernetes, recibe las peticiones y actualiza
acordemente el estado en etcd.

etcd: Almacén de datos persistente, consistente y distribuido de clave-valor utilizado para almacenar
toda a la información del clúster de Kubernetes.

kube-scheduler: Componente del plano de control que está pendiente de los Pods que no tienen
ningún nodo asignado y seleciona uno donde ejecutarlo.

kube-controller-manager: Componente del plano de control que ejecuta los controladores de
Kubernetes.
Alternativas de orquestadores

Docker Swarm es la herramienta de orquestación nativa de Docker. Es fácil de usar y configurar y está integrada con el
ecosistema de Docker.

Nomad es una herramienta de orquestación de contenedores y aplicaciones desarrollada por HashiCorp. Es fácil de usar e
instalar y permite manejar tareas y crear un clúster con nodos sin rodeos.

Rancher es una plataforma que permite instalar y configurar Kubernetes de forma simplificada además de agregar
características extra.

Apache Mesos es una plataforma para la gestión de recursos y el lanzamiento de aplicaciones en clústeres a gran escala. Es
una alternativa a Kubernetes si buscamos mayor estabilidad y sistemas elásticos, sobre todo para grandes volúmenes de
datos.

Cloudify es una plataforma abierta que permite la orquestación y automatización del despliegue y gestión de aplicaciones en
múltiples entornos.
¿Qué es Amazon EKS?
Amazon EKS (Elastic Kubernetes Service) es un servicio totalmente administrado que permite ejecutar aplicaciones en
contenedores utilizando Kubernetes en la nube de AWS. Kubernetes es un sistema de orquestación de contenedores
de código abierto que permite automatizar la implementación, escala y gestión de aplicaciones en contenedores.
Amazon EKS facilita el uso de Kubernetes en AWS, eliminando la necesidad de administrar y mantener la
infraestructura subyacente necesaria para ejecutar los clústeres de Kubernetes.

Con Amazon EKS, los clientes pueden implementar aplicaciones en contenedores utilizando Kubernetes en AWS de
forma sencilla y segura. Amazon EKS permite ejecutar aplicaciones en contenedores utilizando Kubernetes en AWS
sin tener que administrar el plano de control de Kubernetes ni preocuparse por la escalabilidad, la alta disponibilidad y
la seguridad del clúster. En lugar de eso, Amazon EKS se encarga de la administración y mantenimiento de los
clústeres de Kubernetes, mientras que los clientes se centran en implementar sus aplicaciones.
Implementación de K8s en Amazon EKS
Para implementar Kubernetes en Amazon EKS, primero debes crear un clúster de Amazon EKS. Esto se puede hacer a
través de la consola de administración de AWS, la CLI de AWS o las herramientas de infraestructura como código
como AWS CloudFormation. Una vez que hayas creado el clúster, puedes lanzar y administrar tus aplicaciones en
contenedores utilizando herramientas estándar de Kubernetes como kubectl.

También puedes configurar opciones adicionales como el balanceo de carga, el escalado automático y la supervisión y
registro para tus aplicaciones en contenedores.

Sugerencia de realización de laboratorio guiado:

https://aws.amazon.com/getting-started/guides/deploy-webapp-eks/
Creación de un cluster EKS y configuración
de VPC

Para crear un clúster de Amazon Elastic Kubernetes Service (EKS) y configurar una Virtual Private Cloud (VPC), se debe:

Crear una VPC: Puedes usar Amazon VPC para lanzar recursos de AWS en una red virtual que hayas definido. Esta red
virtual es prácticamente idéntica a una red tradicional que podrías operar en tu propio centro de datos, pero incluye los
beneficios que supone utilizar la infraestructura escalable de Amazon Web Services1. Si no tienes una VPC y subredes,
puedes crearlas utilizando una plantilla AWS CloudFormation proporcionada por Amazon EKS2.

Instalar herramientas necesarias: Asegúrate de tener instaladas las herramientas necesarias como kubectl y la AWS CLI
en tu dispositivo o en AWS CloudShell2.

Configurar permisos: Asegúrate de tener una entidad principal de IAM con permisos para crear y describir un clúster de
Amazon EKS2.

Crear el clúster: Puedes crear un clúster utilizando la herramienta eksctl, la consola de administración de AWS o la AWS
CLI2.
Ejemplo de implementación autoescalado
Horizontal
EKSCTL

Eksctl es una herramienta de línea de comandos para crear y administrar clústeres en Amazon Elastic Kubernetes Service
(EKS). Fue creada por Weaveworks y está escrita en Go. Utiliza AWS CloudFormation para crear y administrar los recursos
necesarios para un clúster de EKS1.


Con eksctl, puedes crear un clúster básico en minutos con solo un comando: eksctl create cluster. Este comando creará un
clúster con parámetros predeterminados, como un nombre generado automáticamente, dos nodos trabajadores m5.large y
una VPC dedicada1.


Para instalar o actualizar eksctl, puedes seguir las instrucciones proporcionadas por AWS en su documentación oficial2. Una
vez instalado, puedes utilizar eksctl para crear y administrar tu clúster de EKS.
EKSCTL

Para utilizar eksctl para crear y administrar clústeres en Amazon Elastic Kubernetes Service (EKS), seguir los siguientes
pasos:


Instalar eksctl: Asegúrate de tener eksctl instalado en tu dispositivo o en AWS CloudShell. Puedes seguir las instrucciones
proporcionadas por AWS para instalar o actualizar eksctl.


Crear un clúster: Para crear un clúster básico con parámetros predeterminados, puedes utilizar el comando eksctl create
cluster. Este comando creará un clúster con un nombre generado automáticamente, dos nodos trabajadores m5.large y una
VPC dedicada. También puedes personalizar tu clúster utilizando un archivo de configuración y especificando diferentes
opciones al crear el clúster.


Administrar el clúster: Una vez que hayas creado tu clúster, puedes utilizar eksctl para administrarlo. Por ejemplo, puedes
utilizar el comando eksctl get cluster para ver información sobre tus clústeres existentes, o el comando eksctl delete cluster
para eliminar un clúster existente.
Kubernetes Dashboard

El Kubernetes Dashboard es una interfaz de usuario basada en web para Kubernetes. Puedes usar el Dashboard para
implementar aplicaciones en contenedores en un clúster de Kubernetes, solucionar problemas de tus aplicaciones en
contenedores y administrar los recursos del clúster.


Con el Dashboard, puedes obtener una visión general de las aplicaciones que se ejecutan en tu clúster, así como crear o
modificar recursos individuales de Kubernetes (como Despliegues, Trabajos, DaemonSets, etc.). Por ejemplo, puedes
escalar un Despliegue, iniciar una actualización continua, reiniciar un pod o implementar nuevas aplicaciones utilizando un
asistente de implementación.


Para implementar el Dashboard UI en tu clúster de Kubernetes, debes seguir las instrucciones proporcionadas por la
documentación oficial de Kubernetes. Una vez implementado el Dashboard UI, puedes acceder a él utilizando kubectl proxy
y visitando la URL proporcionada por kubectl
Ejemplo de K8 Dashboard
Kubernetes Dashboard

El Kubernetes Dashboard es una interfaz de usuario basada en web para Kubernetes. Puedes usar el Dashboard para
implementar aplicaciones en contenedores en un clúster de Kubernetes, solucionar problemas de tus aplicaciones en
contenedores y administrar los recursos del clúster.


Con el Dashboard, puedes obtener una visión general de las aplicaciones que se ejecutan en tu clúster, así como crear o
modificar recursos individuales de Kubernetes (como Despliegues, Trabajos, DaemonSets, etc.). Por ejemplo, puedes
escalar un Despliegue, iniciar una actualización continua, reiniciar un pod o implementar nuevas aplicaciones utilizando un
asistente de implementación.


Para implementar el Dashboard UI en tu clúster de Kubernetes, debes seguir las instrucciones proporcionadas por la
documentación oficial de Kubernetes. Una vez implementado el Dashboard UI, puedes acceder a él utilizando kubectl proxy
y visitando la URL proporcionada por kubectl
YAML para Kubernetes

Un archivo YAML para objetos Kubernetes es un archivo de configuración utilizado para definir
objetos de Kubernetes, como despliegues, servicios, volúmenes, entre otros. El archivo YAML
especifica las características del objeto, incluyendo su nombre, tipo, versiones, especificaciones y
metadatos.

Este archivo YAML describe un despliegue de Kubernetes llamado "mi-despliegue" que creará tres
réplicas de un contenedor llamado "mi-contenedor". El despliegue está configurado para utilizar la
imagen "mi-imagen" y exponer el puerto 80 en cada réplica.

Para construir un archivo YAML para un objeto de Kubernetes, es necesario seguir las
especificaciones de la API de Kubernetes para ese objeto específico. Cada objeto de Kubernetes
tiene una API y un conjunto de atributos únicos que deben ser especificados en el archivo YAML.

En general, para construir un archivo YAML para un objeto de Kubernetes, se deben seguir los
siguientes pasos:

1) Escribir la estructura básica del archivo YAML, que incluye la versión de la API, el tipo de
objeto y la metadata.

2) Definir las especificaciones del objeto, incluyendo cualquier etiqueta, selector, puertos,
volúmenes, configuraciones y otros atributos necesarios.

3) Guardar el archivo YAML con un nombre descriptivo y con la extensión ".yaml".


Consola API de Kubernetes
La consola de API de Kubernetes es una interfaz de programación de aplicaciones (API) que proporciona acceso a todas las funcionalidades
del clúster de Kubernetes. Es una API RESTful, lo que significa que utiliza los verbos HTTP para realizar operaciones en los objetos de
Kubernetes.

La consola de API de Kubernetes se utiliza para realizar tareas de administración en el clúster, como crear y eliminar objetos, actualizar
configuraciones, monitorear el estado de los recursos, entre otras. Algunos ejemplos de las operaciones que se pueden realizar a través de la
consola de API son:


Crear y eliminar despliegues, servicios, réplicas y otros objetos de Kubernetes.

Actualizar la configuración de los objetos de Kubernetes, como las imágenes de contenedores o los puertos expuestos.

Monitorear el estado del clúster y de los objetos de Kubernetes utilizando la API de consulta.

Escalar la capacidad de los objetos de Kubernetes en función de la demanda del tráfico de la aplicación.

La consola de API de Kubernetes es utilizada por los administradores y desarrolladores de aplicaciones para automatizar y simplificar tareas de
administración del clúster de Kubernetes. También se puede utilizar para crear herramientas personalizadas que interactúen con la API de
Kubernetes y realicen tareas específicas.

Para acceder a la consola de API de Kubernetes, es necesario autenticarse y autorizarse con las credenciales correctas. También se puede
acceder a la consola de API a través de herramientas como kubectl, que es la herramienta de línea de comandos oficial de Kubernetes.
Despliegue de web apps
Para desplegar una aplicación web en Amazon EKS, se pueden seguir los siguientes pasos generales:

1) Crear un clúster de EKS: Lo primero que debes hacer es crear un clúster de EKS en tu cuenta de AWS. Puedes hacerlo
utilizando la consola de AWS, la CLI de AWS o un archivo de configuración YAML. Una vez que tengas el clúster creado, debes
asegurarte de tener acceso a él desde tu entorno de desarrollo.

2) Crear un archivo YAML para el objeto de despliegue: En este archivo YAML, debes definir la especificación del objeto de
despliegue de Kubernetes que utilizarás para ejecutar tu aplicación web. Esto incluirá información como el número de réplicas,
la imagen del contenedor que se utilizará y cualquier configuración adicional que sea necesaria para que la aplicación se ejecute
correctamente.

3) Crear un objeto de servicio de Kubernetes: Un objeto de servicio se utiliza para exponer la aplicación web al tráfico externo.
Puedes crear este objeto de servicio de Kubernetes utilizando un archivo YAML similar al utilizado para el objeto de despliegue.

4) Crear un balanceador de carga: Para que el objeto de servicio se exponga al tráfico externo, necesitas crear un balanceador
de carga de AWS utilizando la consola de AWS. Este balanceador de carga se encargará de enrutar el tráfico a las instancias de
la aplicación web en el clúster de EKS.
Despliegue de web apps
4) Desplegar la aplicación web: Una vez que hayas creado los objetos de despliegue, servicio y balanceador de carga, debes
utilizar kubectl para aplicar los archivos YAML al clúster de EKS. Esto creará los objetos de Kubernetes necesarios para ejecutar la
aplicación web.

5) Probar la aplicación web: Finalmente, debes probar la aplicación web para asegurarte de que se está ejecutando correctamente en
el clúster de EKS. Puedes hacerlo mediante la dirección del balanceador de carga que creaste en el paso 4.

Es importante tener en cuenta que estos son solo los pasos generales para desplegar una aplicación web en Amazon EKS, y que
pueden variar en función de las necesidades específicas de tu aplicación. También debes tener en cuenta factores como la
escalabilidad, la disponibilidad y la seguridad al desplegar una aplicación web en un clúster de EKS.
Autoescalado Horizontal (HPA)

El Autoescalado Horizontal de Pods (HPA) en Kubernetes permite escalar automáticamente el número de pods en un controlador
de replicación, implementación o conjunto de réplicas en función del uso observado de la CPU u otras métricas seleccionadas. El
objeto de Kubernetes que habilita el autoescalado horizontal de pods se llama HorizontalPodAutoscaler (HPA). El HPA es un
controlador y un recurso de nivel superior de la API REST de Kubernetes. El HPA es un bucle de control intermitente, es decir,
verifica periódicamente la utilización de recursos contra los requisitos establecidos por el usuario y escala el recurso de carga de
trabajo en consecuencia1.


El HPA funciona mediante la implementación como un bucle de control que se ejecuta intermitentemente (no es un proceso
continuo). El intervalo está configurado por el parámetro --horizontal-pod-autoscaler-sync-period del kube-controller-manager (y el
intervalo predeterminado es 15 segundos). Una vez durante cada período, el administrador del controlador consulta la utilización
de recursos contra las métricas especificadas en cada definición de HorizontalPodAutoscaler. El administrador del controlador
encuentra el recurso objetivo definido por scaleTargetRef, luego selecciona los pods según las etiquetas .spec.selector del recurso
objetivo y obtiene las métricas ya sea desde la API de métricas de recursos (para métricas por pod) o desde la API personalizada
(para todas las demás métricas)2.
Implementación de Nginx mediante YAML

Para implementar un servicio común como Nginx en Kubernetes, puedes crear un objeto de implementación de Kubernetes y
describirlo en un archivo YAML. Por ejemplo, este archivo YAML describe una implementación que ejecuta la imagen Docker
nginx:1.14.2:
Implementación de Nginx mediante YAML

Para crear una implementación basada en el archivo YAML, puedes usar el comando kubectl apply y especificar la ruta al archivo
YAML:


Una vez que hayas creado la implementación, puedes exponerla como un servicio para permitir el acceso a ella desde fuera del
clúster de Kubernetes. Para hacerlo, puedes usar el comando kubectl expose y especificar el tipo de servicio que deseas crear (por
ejemplo, NodePort o LoadBalancer):


Esto creará un servicio llamado nginx-service que expone la implementación nginx-deployment en un puerto aleatorio en cada
nodo del clúster.
GRACIAS POR
LA ATENCIÓN
Nos vemos en la
próxima clase

También podría gustarte