0% encontró este documento útil (0 votos)
96 vistas45 páginas

Laboratorio de Contenedores en Fedora

Este documento presenta una introducción a los conceptos de virtualización y contenedores. Explica las diferencias entre máquinas virtuales y contenedores, y describe herramientas como KVM, QEMU, libvirt, podman y buildah para crear y administrar máquinas virtuales y contenedores en Fedora.

Cargado por

Richzendy
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
96 vistas45 páginas

Laboratorio de Contenedores en Fedora

Este documento presenta una introducción a los conceptos de virtualización y contenedores. Explica las diferencias entre máquinas virtuales y contenedores, y describe herramientas como KVM, QEMU, libvirt, podman y buildah para crear y administrar máquinas virtuales y contenedores en Fedora.

Cargado por

Richzendy
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

CONTAINERS LAB

Fedora México

Alex Callejas
Senior Technical Support Engineer | Red Hat
Febrero 2019
About me
Alex Callejas
Senior Technical Support Engineer @Red Hat

@dark_axl

/rootzilopochtli

[Link]

2 Containers Lab
AGENDA
Containers Lab

Kernel-based Virtual Machine


Hipervisor KVM standalone

podman
Utilidad proporcionada como parte de la biblioteca libpod, para crear y mantener
contenedores.

buildah
Herramienta que facilita la creación de imágenes de contenedores OCI (Open Container
Initiative)

3 Containers Lab
Laboratorio de Pruebas
Laboratorio de Pruebas
Containers Lab

Mi configuración:
● Fedora 28
○ KVM
■ Cloud images

5 Containers Lab
Laboratorio de Pruebas
Containers Lab

Pre-requisitos:
● Procesador Intel con Intel VT-x e Intel 64 virtualization extensions for x86-based
systems; ó
● Procesador AMD con AMD-V y AMD64 virtualization extensions

# grep -E 'svm|vmx' /proc/cpuinfo

6 Containers Lab
Laboratorio de Pruebas
Containers Lab

Paquetes a instalar: Almacenamiento:


● qemu-kvm ● 5 - 10 Gb
● virt-manager ○ /var/lib/libvirt/images/
● virt-viewer
● libguestfs-tools
● virt-install
● genisoimage

7 Containers Lab
Virtualización y Contenedores
Máquinas Virtuales y Contenedores
Máquinas Virtuales Contenedores

VM aísla el hardware Container aísla el proceso

9 Containers Lab
Máquinas Virtuales y Contenedores

● Aislamiento de VM ● Aislamiento de contenedores


● OS completo ● Kernel compartido
● Computo estático ● Computo escalable
● Memoria estática ● Memoria escalable
● Alto uso de recursos ● Bajo uso de recursos

10 Containers Lab
Virtualización

11 Containers Lab
Arquitectura KVM

● Management: libvirt (virt tools, C


API, bindings, etc)
● qemu-kvm (user-level hardware
abstraction layer)
● KVM itself (linux kernel)
● Virtio paravirt drivers (Linux and
Windows)
● Spice paravirt drivers (linux and
windows

12 Containers Lab
Cloud Images
KVM y QEMU

QEMU soporta varios tipos de imágenes. El tipo "nativo" y más flexible es qcow2, que admite la
copia en escritura, el cifrado, la compresión y los snapshots de VM.

La forma más sencilla de obtener una máquina virtual que funciona con KVM es descargar una
imagen que alguien más ya haya creado:

● Fedora Cloud. Cloud Base Images [[Link]


● Atomic Host [[Link]
● OpenStack: Get images [[Link]

13 Containers Lab
Containers Lab
Creando VM’s - Fedora

Copiar imagen

$ sudo cp Fedora-Cloud-Base-29-1.2.x86_64.qcow2 /var/lib/libvirt/images/vmtest01.qcow2

Configurar VM

$ sudo virt-customize -a /var/lib/libvirt/images/vmtest01.qcow2 \


--hostname [Link] --root-password password:redhat \
--ssh-inject 'root:file:[Link]' --uninstall cloud-init --selinux-relabel

Importar VM
$ sudo virt-install --name vmtest01 --memory 1024 \
--vcpus 1 --disk /var/lib/libvirt/images/vmtest01.qcow2 \
--import --os-variant fedora29 --noautoconsole

14 Containers Lab
Containers Lab
Creando VM’s - Fedora

Abrir consola

$ sudo virsh console vmtest01

Listar / Apagar / Arrancar VM

$ sudo virsh list --all

$ sudo virsh [destroy | start] vmtest01

Eliminar VM

$ sudo virsh undefine vmtest01

15 Containers Lab
Containers Lab
Creando VM’s - Fedora

virt-viewer

$ virt-viewer --connect qemu:///system vmtest01 &

virt-manager

$ virt-manager &

16 Containers Lab
Containers

Un contenedor es la unidad de cómputo más pequeña


Los contenedores se crean a partir de imágenes

17 Containers Lab
Containers
Las imágenes del contenedor se almacenan en un registro de imágenes,
que contiene todas sus versiones

18 Containers Lab
¿Cómo funciona Docker?
Docker proporciona toda la funcionalidad necesaria para:

● Pull & push imágenes de un registro de imágenes


● Administrar contenedores locales:
○ Copy, add layers, commit & remove
● Pedir al kernel que ejecute un contenedor con el
name-space y cgroup correctos, etc.

Esencialmente, el demonio Docker hace todo el trabajo con


registros, imágenes, contenedores y el kernel. La línea de
comandos (CLI) de Docker le pide al demonio que haga
esto en su nombre.

19 Containers Lab
PODMAN

El enfoque de podman es simplemente interactuar


directamente con el registro de imágenes, con el
contenedor y el almacenamiento de imágenes, y con el
kernel de Linux a través del proceso de ejecución del
contenedor runC (no un demonio)

20 Containers Lab
PODMAN
podman está incluido en el último Fedora 29

Un CLI/API sin daemon para ejecutar, administrar y


depurar contenedores y pods OCI

● Rápido y ligero
● runC leverage
● Proporciona una sintaxis "tipo docker" para trabajar
con contenedores
● API de gestión remota a través de varlink
● Proporciona integración de sistemas y aislamiento
avanzado de namespace

21 Containers Lab
PODMAN
Primeros pasos

Instalar podman y buildah

# dnf -y install podman buildah skopeo

Bajar una imagen del registro e inspeccionarla

# podman pull [Link]/f29/httpd

# podman images

# podman inspect httpd

22 Containers Lab
PODMAN
Primeros pasos

Ejecutando el contenedor

# podman run httpd

Revisamos el proceso

# systemctl status podman

# podman ps

# podman ps -a

How does Docker generate default container names?

23 Containers Lab
PODMAN
Primeros pasos

Ejecutando el contenedor en background

# podman run --name myhttpservice -d httpd

Inspeccionamos el contenedor en busca de ip y puertos expuestos

# podman inspect myhttpservice | grep -i ipaddr

# podman inspect myhttpservice | grep expose-services

# curl [Link]:8080

24 Containers Lab
PODMAN
Inmutabilidad

Ejecutamos el contenedor en background

# podman run -d httpd

Ejecutamos bash dentro del contenedor (sesión interactiva)

# podman exec -ti c94e745f6414 /bin/bash

Creamos un archivo dentro del contenedor

bash-4.4$ echo "MySecretData" > [Link]

25 Containers Lab
PODMAN
Inmutabilidad

Detenemos el contenedor

# podman kill c94e745f6414

Ejecutamos el contenedor nuevamente y entramos en sesión interactiva

# podman run -d httpd

# podman exec -ti 40f5b5fd89bb /bin/bash

bash-4.4$ ls

26 Containers Lab
CONSTRUYENDO CONTENEDORES
¿Porqué usar buildah?

● Crea imágenes compatibles con OCI


● No daemon - sin socket docker
● No requiere un contenedor en ejecución
● Puede utilizar las suscripciones de hosts y otros
secretos
● Control preciso sobre los comandos y el contenido de
la capa (s)
● Una sola capa, desde cero, las imágenes se hacen
fáciles y aseguran un manifiesto limitado
● Si es necesario, puede mantener el flujo de trabajo
basado en Dockerfile

27 Containers Lab
CONSTRUYENDO CONTENEDORES
Probando buildah

Hola Mundo
# echo "hello world" > $(buildah mount $(buildah from
[Link]/fedora-minimal))/etc/[Link]

Revisamos la creación de la imagen base

# buildah containers

Hacemos commit a la imagen local

# buildah commit fedora-minimal-working-container fedora-hello

# buildah images

28 Containers Lab
CONSTRUYENDO CONTENEDORES
Probando buildah

Eliminamos la imagen base

# buildah delete fedora-minimal-working-container

Ejecutamos el contenedor

# podman run -ti localhost/fedora-hello:latest cat /etc/[Link]


hello world

29 Containers Lab
CONSTRUYENDO CONTENEDORES
Dockerfile

Creamos el Dockerfile

# Base on the Fedora


FROM [Link]/fedora
MAINTAINER darkaxl017 email [Link]@[Link] # not a real email

# Install httpd on image


RUN echo "Installing httpd"; dnf -y install httpd

# Expose the default httpd port 80


EXPOSE 80

# Run the httpd


CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

30 Containers Lab
CONSTRUYENDO CONTENEDORES
Dockerfile

Ejecutamos buildah para la construcción de la imagen

# buildah bud -f Dockerfile -t fedora-httpd .

Revisamos la creación de la imagen

# buildah images

Probamos el contenedor

# buildah run $(buildah from fedora-httpd) httpd -v

31 Containers Lab
CONSTRUYENDO CONTENEDORES
Dockerfile

Ejecutamos el contenedor

# podman run -d fedora-httpd

Revisamos el proceso del contenedor

# podman ps

Revisamos los procesos

# ps auxf | tail -6

32 Containers Lab
CONSTRUYENDO CONTENEDORES
Dockerfile

Validamos el servicio

# curl localhost
curl: Failed to connect to localhost port 80: Connection refused

Revisamos los logs del contenedor

# podman logs 517495e24317

Revisamos los puertos

# netstat -tulpn

33 Containers Lab
CONSTRUYENDO CONTENEDORES
Dockerfile

Detenemos el contenedor y ejecutamos el contenedor exponiendo el puerto

# podman run -d -p 80:80 fedora-httpd

Validamos el servicio

# curl localhost

34 Containers Lab
Persistent Storage
Los contenedores son efímeros...
Creamos directorio compartido para el contenedor

# mkdir -p /opt/var/www/html ; cd /opt/var/www/html

Creamos el contenido a compartir


# wget --page-requisites --convert-links [Link]

Ejecutamos el contenedor compartiendo puerto y directorio

# podman run -d --name myhttpservice -p 8080:8080 -v


/opt/var/www/html:/var/www/html:Z [Link]/f29/httpd

35 Containers Lab
Containerized System Services
Los contenedores son portátiles y están listos para usar: ¿por qué no usarlos como servicios del sistema?
/etc/systemd/system/[Link]
[Unit]
Description=Just a http service with Podman Container

[Service]
Type=simple
TimeoutStartSec=30s
ExecStartPre=-/usr/bin/podman rm "myhttpservice"

ExecStart=/usr/bin/podman run --name myhttpservice -p 8080:8080 -v


/opt/var/www/html:/var/www/html:Z [Link]/f29/httpd

ExecReload=-/usr/bin/podman stop "myhttpservice"


ExecReload=-/usr/bin/podman rm "myhttpservice"
ExecStop=-/usr/bin/podman stop "myhttpservice"
Restart=always
RestartSec=30

[Install]
WantedBy=[Link]

36 Containers Lab
Containerized System Services
Los contenedores son portátiles y están listos para usar: ¿por qué no usarlos como servicios del sistema?

Refrescamos systemd

# systemctl daemon-reload

Revisamos status del servicio


# systemctl status [Link]

Iniciamos el servicio

# systemctl start [Link]

# systemctl status [Link]

37 Containers Lab
Podman pods
Lo que necesitas saber

El concepto de Pod fue introducido por Kubernetes. Los podman pods


son similares a esa definición.
● Cada podman pod incluye un contenedor "infra"
○ Mantiene los namespaces asociados con el pod y permite a
podman conectarse a los otros contenedores
○ Se basa en la imagen [Link]/pause
○ Se le asignan los port bindings, cgroup-parent values, y
kernel namespaces del pod
○ Una vez que se crea el pod, estos atributos se asignan al
contenedor "infra" y no se pueden cambiar
● Cada contenedor tiene su propio monitor (conmon)
○ Monitorea el proceso primario del contenedor y guarda el
exit code si se termina o muere el contenedor
○ Permite que podman se ejecute en modo detached
(background)

38 Containers Lab
Podman pods
Primeros pasos
Creamos el podman pod

# podman pod create

Listamos los pod’s

# podman pod list

Agregamos un contenedor al pod y lo revisamos

# podman run -dt --pod container_name [Link]/library/alpine:latest top

# podman ps -a --pod

39 Containers Lab
Podman pods
Ejemplo práctico: MariaDB container
Creando el podman pod

# podman run -dt -e MYSQL_ROOT_PASSWORD=x --pod new:db


[Link]/f28/mariadb:latest

Revisamos el status de los pod’s

# podman pod ps

Agregamos un contenedor al pod y revisamos la base de datos

# podman run -it --rm --privileged --pod db [Link]/library/alpine:latest /bin/sh

/ # apk add mariadb-client / # mysql -u root -P 3306 -h [Link] -p

40 Containers Lab
Podman pods
Siguientes pasos?

41 Containers Lab
Podman pods
Siguientes pasos: ejemplo práctico
Creamos un contenedor demo y lo validamos

# podman run -dt -p 8000:80 --name demo [Link]/libpod/alpine_nginx:latest

# podman ps # curl [Link]

Generamos snapshot para crear el archivo YAML de Kubernetes

# podman generate kube demo > [Link]

Con el archivo yml podemos recrear el contenedor/pod en kubernetes

# kubectl create -f [Link]

42 Containers Lab
Kubernetes
Configuración inicial

● Fedora (Single Node) -


[Link]
● Introduction to Kubernetes with Fedora -
[Link]
● Clustered computing on Fedora with Minikube -
[Link]

43 Containers Lab
Referencias
Links y documentación

● Fedora Classroom: Containers 101 with Podman


● Getting Started with Buildah
● Managing containerized system services with Podman
● Podman: Managing pods and containers in a local container runtime
● Podman can now ease the transition to Kubernetes and CRI-O

● [Link]
● [Link]

● [Link]
● [Link]

● Daniel Walsh - @rhatdan

44 Containers Lab
Gracias!
[Link]/latam

[Link]

[Link]

También podría gustarte