Contenedores SO

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 94

¿Kubernetes o

Docker.?

Sistemas Operativos.
INTRODUCCIÓN

Fuente: Kubernetes.io
KUBERNETES

Kubernetes es una plataforma portable y extensible de código


abierto para administrar cargas de trabajo y servicios. Kubernetes
facilita la automatización y la configuración declarativa. Tiene un
ecosistema grande y en rápido crecimiento. El soporte, las
herramientas y los servicios para Kubernetes están ampliamente
disponibles.
INTRODUCCIO
N
•Hoy en día, La gestión eficiente de contenedores y la
orquestación de aplicaciones es uno de los aspecto cruciales
para el éxito de proyectos de desarrollo y despliegue de
software. Kubernetes es una plataforma muy destacada por
la simplicidad para esta gestión. no brinda Minikube que
ofrece la capacidad de explorar y desarrollar aplicaciones en
un entorno kubernetes local, sin la necesidad de
configuraciones complejas.Con esta charla lograremos
configurar minikube en Linux, a manejar contenedores y
administrar nodos en Kubernetes. Con el propósito de
conocer tecnologías para que nuestras soluciones
tecnológicas puedan:
Que es Docker
1. Entorno Docker Docker es un proyecto de código abierto que automatiza
el despliegue de aplicaciones dentro de
contenedores de software, proporcionando una capa
adicional de abstracción y automatización de virtualización
de aplicaciones en múltiples sistemas operativos.1​Docker
utiliza características de aislamiento de recursos del
kernel Linux, tales como cgroups y
espacios de nombres (namespaces) para permitir que
"contenedores" independientes se ejecuten dentro de una
sola instancia de Linux, evitando la sobrecarga de iniciar y
mantener máquinas virtuales.
Virtualización
Arquitectura

Máquinas Virtuales
Arquitectura
Máquinas Virtuales Contenedores
Qué es
Docker?
• Implementación open-source de Linux Containers
• Es la implementación #1
• Repositorio de imágenes públicas: docker hub
Cuales son las
ventajas?
• No necesita Hypervisor
• Uso eficiente de recursos (CPU, Memoria)
• Menor consumo de disco (mucho menor)
• Levantan muy rápido (milisegundos)
• Ideales para Microservicios y DevOps
• Fácilmente automatizables
• Son muy fáciles de transportar y recrear (text file)
• Permiten tratar a la infraestructura como código
Cómo
funciona?
Docker Hub
push pull

App
build run Container
Image App
Dockerfile
Container
App
sw
Container
lib/deps
config
app bins
Llevándolo a la
práctica…
Docker

A crear Contenedores...
Orquestando
Docker

Contenedores
• Agrupamiento lógico (aplicación)
• Clustering de servidores
• Deploy automático
• Balanceo de carga
• Escalamiento automático
• Self-healing
• Rollouts y rollback
• Run Anywhere
Docker

Para qué se utiliza?


Ubuntu
• sudo apt install gnome-terminal
• # Add Docker's official GPG key:
• sudo apt-get update
• sudo apt-get install ca-certificates curl
• sudo install -m 0755 -d /etc/apt/keyrings
• sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
• sudo chmod a+r /etc/apt/keyrings/docker.asc

• # Add the repository to Apt sources:


• echo \
• "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc]
• https://download.docker.com/linux/ubuntu \
• $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
• sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
• sudo apt-get update
OS
Software
APP
Capas
• Docker start /stopNombre_Id_container :Inicio contenedores
• Docker ps : Listo los contenedores
• Docker Logs -f (espera tabs) Nombre_Id_container :Inicio
contenedores
• Docker run : ejecuta un contenedor nuevo a partir de una imagen
• Docker exec :corres comandos dentro de un contenedor que ya esta
corriendo
• Docker exec –it Nombre_contenedor sh
• Docker run –d nginx correr un contenedor en background

• Docker logs –f Nombre_contendor // muestra la salida de eso


contenedor
Como
desarrollamos
una aplicación
con contenedor
de Docker
Docker Image | grep alpine
PODS

Un Pod (como en una vaina de ballenas o vaina de guisantes) es un grupo de uno o más contenedores
(como contenedores Docker), con almacenamiento/red compartidos, y unas especificaciones de cómo
ejecutar los contenedores. Los contenidos de un Pod son siempre coubicados, coprogramados y
ejecutados en un contexto compartido.

Fuente: Kubernetes.io
ARQUITECTURA DE PODS

-IPC
-Network
-UTS

Fuente: Kubernetes.io
DEPLOYMEN
T
La implementación indica a Kubernetes cómo crear
y actualizar instancias de su aplicación. Una vez
que haya creado una implementación, el plano de
control de Kubernetes programa las instancias de la
aplicación incluidas en esa implementación para
que se ejecuten en nodos individuales del clúster.

Fuente: auth0 blog


PODS Y DEPLOYMENT

Fuente: auth0 blog


CONFIGMAP

Un configmap es un objeto de la API utilizado para almacenar datos no confidenciales en el formato


clave-valor. Los Pods pueden utilizar los ConfigMaps como variables de entorno, argumentos de la
línea de comandos o como ficheros de configuración en un Volumen.
SERVICE

Objeto de la API de Kubernetes que describe cómo se accede a las aplicaciones, tal como un conjunto
de Pods, y que puede describir puertos y balanceadores de carga.
Con Kubernetes no necesitas modificar tu aplicación para que utilice un mecanismo de
descubrimiento de servicios desconocido. Kubernetes le otorga a sus Pods su propia dirección IP y un
nombre DNS para un conjunto de Pods, y puede balancear la carga entre ellos.
UTILIDAD DE KUBERNETES EN
MI PROYECTO

1. Escalar nuestra aplicación ante altos picos de concurrencia.


2. Optimizar los recursos del servicio.
3. Automatización de tareas operativas.
EJERCICIO PRÁCTICO.

Objetivos del ejercicio práctico:


1. Realizar un Deployment de una aplicación.
2. Actualizar las versiones de los Pods de una aplicación.
3. Escalar los Pods de la una aplicación.
EJERCICIO PRÁCTICO.

Para la realización del ejercicio práctico, deberá tener instaladas las siguientes
herramientas:
1. VirtualBox. ->
https://www.virtualbox.org/wiki/Downloads
2. Kubectl. ->
https://kubernetes.io/docs/tasks/tools/
3. Minikube -> https://minikube.sigs.k8s.io/docs/start/
Exploración de Kubernetes
en Entornos de Desarrollo:
Configuración con
Minikube en Linux y Uso
de Nodos
¿Cuál es la diferencia entre Kubernetes y Docker?

• Docker es una tecnología de tiempo de ejecución de contenedores


que le permite crear, probar e implementar aplicaciones más
rápido que con los métodos tradicionales. Docker empaqueta
software en unidades estandarizadas llamadas contenedores que
incluyen todo lo necesario para que el software se ejecute,
incluidas bibliotecas, herramientas de sistema y código.
• Kubernetes es una herramienta de orquestación de contenedores
que le permite escalar sus sistemas de contenedores para que
pueda administrar, coordinar y programar contenedores a gran
escala
Docker y Kubernetes son dos tecnologías diferentes con casos
de uso distintos. Docker Desktop se utiliza para ejecutar, editar
y administrar el desarrollo de contenedores. Kubernetes se
utiliza para ejecutar aplicaciones de producción a gran escala.
¿Dónde se utilizan Kubernetes y Docker?

• Tanto Kubernetes como Docker son tecnologías de


contenedores. Las aplicaciones modernas están formadas
por microservicios o componentes independientes que
ejecutan cada proceso de la aplicación como un servicio.
Cada servicio realiza una única función y se comunica
con otros servicios a través de una interfaz bien definida
denominada API. La contenedorización proporciona la
herramienta de software para empaquetar microservicios
como programas que se pueden implementar en diferentes
plataformas.
Diferencias clave: Kubernetes en comparación con Docker

• Tanto Kubernetes como Docker son


tecnologías de contenedores de código
abierto. Sin embargo, se diferencian
fundamentalmente en su funcionamiento y
en el papel que desempeñan en la
distribución de aplicaciones en
contenedores. Los desarrolladores utilizan
Docker para crear y administrar imágenes
de contenedores. Utilizan Kubernetes para
administrar múltiples microservicios a gran
escala. Los microservicios están formados
por varios contenedores en sí mismos
TABLA DE CONTENIDO.

1. KUBECTL
2. SECRET
3. JOB
4. INGRESS
5. COMANDO KUBETCTL RUN NGINX – IMAGE=NGINX
6. CONCLUSIÓN
¿QUE ES KUBECTL?.

KubeCTL es una interfaz de línea de comandos para


ejecutar comandos sobre despliegues clusterizados de
Kubernetes. Esta interfaz es la manera estándar de
comunicación con el clúster ya que permite realizar
todo tipo de operaciones sobre el mismo.
¿QUE ES SECRET?.

Un Secret es un objeto de Kubernetes que almacena


datos confidenciales, como contraseñas, claves API y
certificados.

Los Secrets se almacenan de forma segura y no son


accesibles a los usuarios o aplicaciones de forma
predeterminada.
USOS DE SECRET.

• Almacenar credenciales de base de datos para Pods


que necesitan acceder a una base de datos.
• Almacenar claves API para Pods que necesitan
acceder a una API REST.
• Almacenar certificados para Pods que necesitan
comunicarse sobre HTTPS.
¿QUÉ ES JOB?.

Un Job es un objeto de Kubernetes que gestiona la


ejecución de un conjunto de Pods.

Los Jobs se suelen utilizar para ejecutar tareas


únicas, como ejecutar un trabajo por lotes o procesar
un conjunto de datos grande.
CONFIGURACIONES DE JOB.

Los Jobs se pueden configurar para ejecutar un Pod hasta


su finalización, o para ejecutar un Pod hasta que un
número especificado de Pods haya completado con éxito.

Los Jobs también se pueden configurar para volver a


intentar los fallos de Pod un número especificado de
veces.
¿QUÉ ES UN INGRESS?.

Un Ingress es un objeto de Kubernetes que gestiona


el acceso externo a los Servicios en un clúster.

Ingress se puede utilizar para proporcionar


equilibrio de carga, terminación SSL y alojamiento
virtual basado en nombres para los Servicios.
USOS DE INGRESS.

Los Ingress se utilizan típicamente para exponer


aplicaciones web a Internet.

También se pueden utilizar para exponer otros tipos de


aplicaciones, como APIs.
COMANDO KUBETCTL RUN NGINX – IMAGE=NGINX.

El comando kubectl run nginx - image=nginx


creará un nuevo pod en su clúster de Kubernetes que
ejecute la imagen Nginx.

La imagen nginx es una imagen precompilada del


servidor web Nginx.
USO DEL COMANDO.

Para acceder al servidor web Nginx, puede utilizar el


comando kubectl get service para obtener la dirección IP
y el puerto del servicio.

A continuación, puede utilizar un navegador web para


conectarse a la dirección IP y el puerto del servicio.
CONCLUSÓN.

Kubernetes es un sistema de orquestación de contenedores que


permite a los desarrolladores y administradores de sistemas crear,
administrar y escalar aplicaciones de contenedores de forma
eficiente.

Secret, Job e Ingress son tres objetos de Kubernetes que se utilizan


para almacenar datos confidenciales, ejecutar tareas únicas y exponer
aplicaciones a Internet, respectivamente.
Kubernetes
• Introducción
• Arquitectura
• Instalación
• Ejemplo en Kubernetes
• Workloads
• Introducción
• Kubernetes o K8s
• Orquestador de Kubernetes
• Gestión
• Despliegue
• Escalabilidad
• Monitorización
• Plataforma de código abierto y muy vivo
• Introducción
• CARACTERÍSTICAS IMPORTANTES:

• Distribución de contenedores
• Balanceo de carga
• Fácil gestión de servicios y aplicaciones
• Escalabilidad
• Alta disponibilidad
• Monitorización de contenedores
• Despliegue y retrocesos automáticos
• Muy modular, mucha flexibilidad
Kubernetes
• Introducción
• Arquitectura
• Instalación
• Ejemplo en Kubernetes
• Workloads
• Arquitectura
• Arquitectura
• Conceptos

o Cluster: Grupo de máquinas


o Nodo: Maquina que se ejecuta en kubernetes
o Pod: Grupo de contendores
o Replication Controller: Maneja fallos y recrea pods
o Servicio: Conjunto lógico de pods
o Labels: pares clave/valor
• Arquitectura
• COMPONENTES EN NODO MASTER Y ESCLAVOS

MASTER ESCLAVOS
SCHEDULER KUBE-PROXY

KUBE-CONTROLLER PODSDOCKER

KUBE-APISERVER cADVISOR

ETCD KUBELET
• Arquitectura
• COMPONENTES DE LOS NODOS

o Docker o rkt:
o Kubelet:
o Kubernetes-proxy:
Kubernetes
• Introducción
• Arquitectura
• Instalación
• Ejemplo en Kubernetes
• Workloads
• Instalación
• Varias Plataformas

• https://kubernetes.io/docs/setup/pick-right-solution/

• Minikube https://kubernetes.io/docs/setup/minikube/
• Microk8s

• Guía de instalación en cluster

• https://kubernetes.io/docs/setup/independent/install-
kubeadm/
• Instalación
• Pasos

1. Habilitamos docker y arrancamos si no está arrancado

2. Agregamos la clave de firma de Kubernetes:

curl -s
https://packages.cloud.google.com/apt/do
c/apt-key.gpg | sudo apt-key add
• Instalación
• Pasos

3. A continuación, agregamos el repositorio de Kubernetes e


instalamos Kubernetes

sudo apt-add-repository "deb


http://apt.kubernetes.io/ kubernetes-bionic
main"

sudo apt install kubeadm


• Instalación

4. Kubernetes se negará a funcionar si el sistema usa memoria de


intercambio (swap memory), por lo tanto, necesitamos
desactivar la memoria de intercambio en todos sus nodos
(maestro y esclavo):

>sudo swapoff -a

PRECAUCION: LA VM DONDE SE EJECUTE DEBE TENER AL MENOS 2 GBs DE


MEMORIOA PARA PODER DESACTIVAR LA SWAP
• Instalación
En el caso de que todas las máquinas tengan el mismo nombre, como es
nuestro caso al clonar las VMs ejecutar las siguientes sentencias una en cada
nodo

192.168.1.101: >sudo hostnamectl set-hostname manager01


192.168.1.102: >sudo hostnamectl set-hostname worker01
192.168.1.103: >sudo hostnamectl set-hostname worker02
• Instalación

5. Ahora estamos listos para inicializar el nodo maestro de


Kubernetes. Para ello, ejecute el siguiente comando en el nodo
maestro:

sudo kubeadm init --pod-network-cidr=192.168.1.101/16


• Instalación

5. Al finalizar nos devuelve una instrucción que deberemos


guardar para ejecutar posteriormente en los nodos esclavos
• Instalación

6. A continuación, es obligatorio ejecutar los siguientes comandos


como usuario regular, sólo en el nodo maestro, para comenzar a
usar el clúster de Kubernetes:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
• Instalación
7. Implementar una red pod:
El siguiente paso es desplegar una red de pod. La red de pod se usa
para la comunicación entre nodos dentro del clúster Kubernetes.
Para ello utilizaremos la red de pod de Flannel:

kubectl apply -f
https://raw.githubusercontent.com/coreos/flannel/master
/Documentation/kube-flannel.yml
• Instalación

7. Unir esclavos al cluster Kubernetes


Ejecutar el comando kubeadm join recuperado anteriormente de la
salida de inicialización del nodo maestro en todos los nodos esclavos
para unirse a su grupo de Kubernetes:
• Instalación

8. Implementar una red pod:


Con comando kubectl para confirmar que todo está listo
kubectl get pods --all-namespaces
• Instalación

6. En el nodo maestro de Kubernetes, confirmamos que los nodos


worker01 y worker02 ahora forma parte de nuestro clúster de
Kubernetes:
kubectl get nodes
Kubernetes
• Introducción
• Arquitectura
• Instalación
• Desplegando un servicio en un cluster Kubernetes
• Workloads
• Desplegando un servicio en un cluster Kubernetes

• Ejecutamos los siguientes dos comandos en el nodo maestro:


kubectl run nginx-server --image=nginx --replicas=2 --port=80
kubectl expose deployment nginx-server --port=8080 --name=nginx-
http• --type=NodePort
Ahora se debería ver un nuevo contenedor nginx docker
desplegado en el nodo esclavo al hacer docker ps
• Desplegando un servicio en un cluster Kubernetes

• Para confirmar que el nuevo servicio Nginx está en


funcionamiento, enumere todos los servicios disponibles en su
nodo maestro kubectl get svc

• y con el comando curl realizamos una solicitud HTTP en su


CLUSTER IP:
curl -I 10.110.188.117
• Desplegando un servicio en un cluster Kubernetes

2. Creación de un pod a partir de fichero yaml


apiVersion: v1
kind: Pod
metadata:
name: rss-site
labels:
app: web
spec:
containers:
– name: front-end
image: nginx
ports:
– containerPort: 80
– name: rss-reader
image: nickchase/rss-php-nginx:v1
ports:
– containerPort: 88

• https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/
#_v1_podspec
• Desplegando un servicio en un cluster Kubernetes

spec:
containers:
– name: front-end
image: nginx
ports:
– containerPort: 80
– name: rss-reader
image: nickchase/rss-php-
nginx:v1
ports:
– containerPort: 88
• https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/
#_v1_container
• Desplegando un servicio en un cluster Kubernetes

• Para crear el pod en Kubernetes


kubcetl create –f pod.yaml

kubcetl get pods


• Instalación
• kubectl línea de comandos para ejecutar comandos contra
clusters Kubernetes.

• https://kubernetes.io/docs/reference/kubectl/overview/

• Para detalles sobre cada comando

• https://kubernetes.io/docs/reference/generated/kubectl/kubec
tl-commands
Kubernetes
• Introducción
• Arquitectura
• Instalación
• Ejemplo en Kubernetes
• Workloads
• Controladores
• Permiten dentro de un cluster, Vigilar, Desplegar y Mantener
Recursos

• Cada uno de ellos tendrá una misión

• Tipos
o Replication Controllers y Replication Sets
o Deployments
o StatefulSets
o DaemonSets
o Jobs y Cron Jobs
• Controladores
Replication Controllers y Replication Sets

• Replication Controller
• Define una plantilla de Pod
• Responsable de garantizar que la cantidad de pods
implementados en el clúster coincida con la cantidad de
pods en su configuración
• Replica Sets
• Replication Controller de próxima generación.
• Controladores
• Deployments
• Proporciona actualizaciones declarativas para Pods y
ReplicaSets.

• Uno de los controladores más usados

• Resuelven muchos de los puntos problemáticos que existían


en la implementación de actualizaciones continuas.
• Controladores
• StatefulSets
• Administración de aplicaciones con estado.
• Administran la implementación y la escalabilidad de un
conjunto de Pods
• Proporcionan un identificador de red estable al crear un
nombre único
• Controladores
• DaemonSets
• Un DaemonSet garantiza que todos los nodos (o algunos)
ejecuten una copia de un Pod.

• Permite eliminar Pods no usados.


• Controladores
• Jobs y CronJobs

• Jobs.
o Crean uno o más pods y asegura que un número
específico de ellos termine con éxito

• CronJobs
• Proporcionan una interfaz para ejecutar trabajos con un
componente de planificación
• Pods y configuración
• Pods

• Bloque de construcción básico de Kubernetes


• La unidad más pequeña y simple en el modelo de objeto
Kubernetes se puede crear.
• Un Pod representa un proceso en ejecución en su cluster

• Se pueden usar de dos maneras principales:


o Pods que ejecutan un solo contenedor
o Pods que ejecutan múltiples contenedores
REFERENTES BIBLIOGRAFICOS.
Carrión, C. (2022). Kubernetes scheduling: Taxonomy, ongoing issues and challenges. ACM Computing Surveys, 55(7), 1-37.
Recuperado de: https://link.springer.com/article/10.1007/s11227-021-03982-3

Mondal, S. K., Pan, R., Kabir, H. D., Tian, T., & Dai, H. N. (2022). Kubernetes in IT administration and serverless computing: An
empirical study and research challenges. The Journal of Supercomputing, 1-51. Recuperado de:
https://dl.acm.org/doi/abs/10.1145/3539606

Burns, B., Beda, J., Hightower, K., & Evenson, L. (2022). Kubernetes: up and running. " O'Reilly Media, Inc.". Recuperado de:
https://books.google.es/books?hl=es&lr=&id=KeB-EAAAQBAJ&oi=fnd&pg=PT17&dq=Kubernetes&ots=V9VSKRojWa&sig=8Ziviy
I2DHwhUwdLzImMzqFUp-o#v=onepage&q=Kubernetes&f=false

También podría gustarte