WEBVTT
Vamos a empezar a trabajar con la parte de Docker y vamos a empezar a seguir este How-To,
este cómo, para instalar, cómo instalar la tecnología de Docker.
En este caso va a ser en la distribución Ubuntu y vamos a instalar precisamente esta
parte de Docker.
Para la parte de Windows
vamos a tener, si entramos nosotros al sitio principal de Docker,
vamos a tener aquí dentro de los productos en Docker Desktop, que es una aplicación,
una aplicación que nos va a permitir usar de esta manera con una GUI en el Docker y como tal,
pues es gratuita, pero tiene precisamente algunos temas ya para, de costos cuando ya estás usando
lo permite refrescar precisamente los repositorios de nuestro Linux.
Ahora vamos a instalar estos componentes, algunos de ellos yo creo que ya están instalados,
vamos a ver si nos deja pegar,
se los voy a ir poniendo en el chat para que igual los puedan copiar.
Aquí ya los pegué en el chat.
Ok, algunos de ellos me han dicho que ya están instalados y nosotros los vamos a instalar.
Si les sale mensaje de que hay software para actualizar, vamos a crear este comando.
Y lo que va a hacer es actualizar todos nuestros paquetes teniendo cuidado
de los paquetes que actualizan, en este caso a mi nada más con DNS Mask.
Y nada más cuidemos que esté uno de los servicios.
Voy a ok y listo.
Les puse el comandito que usé para actualizar mi Ubuntu,
si quieren ponerlo ahorita y vamos a ver que actualiza.
Listo, según esto les actualizo.
Ahora bien, lo que vamos a hacer
es continuar con la instalación.
Ahora venimos con este comando,
Ya me funcionó.
Ya pegué los principales, ahorita también los voy declarando.
Si se atora alguno, me levanta la manita.
Y nada más, permítanme un momento, voy a poner mi micrófono en mi otro momento.
Después de que ya lo tengan instalado,
de que lleguemos a la parte de la instalación,
vamos a ejecutar esta parte.
Y con eso debemos tener la capacidad de ejecutarlo si no sale el sudo.
Vamos a tener que ponerle un password al usuario Student,
que es el que deben de tener en su sesión.
Esto lo vamos a hacer con este comando de aquí.
Y Student es el usuario que estamos usando.
Entonces lo ponemos así, sería sudo passwd student,
le ponen el password que ustedes quieran.
Y lo que vamos a hacer es teclear el comando.
Este de aquí, el primero que les puse,
el sudo usermod-ag-docker y user en mayúsculas.
Lo tecleamos, le van a dar enter, no pasa nada,
eso ya nos está agregando al grupo.
Y después vamos a teclear su user.
Tiene que estar en mayúsculas.
Cuando demos este comando, nos va a pedir el password del usuario,
es el que acabamos de ponerle.
Entonces los ponemos y lo vean nuevamente dentro de la sesión.
Tecleamos el comando groups, y aquí ya vamos a ver a Docker,
que ya pertenezco al grupo de Docker.
Con esto ya nos va a permitir que sin usar el sudo,
usemos el comando Docker.
Entonces no sé si tienen duda,
y si no tienen duda, lo pueden ir ejecutando.
Al final lo que vamos a tener es la capacidad de hacer esto.
Sale sin el sudo, hay que ejecutar el comando Docker PS,
y podamos ver el resultado sin ningún problema.
No, es en partes.
Primero es el sudo usermod, ese es un comando,
y el segundo comando es el su user.
Y hasta ahí, ya el 3 y el 4 lo podemos omitir.
Bueno, el 3 nada más es para verificar,
y hasta ahí si quieren se quedan hasta el 3.
Tú se lo vas a otorgar, si no se lo has puesto,
con el último comando que les puse en el chat,
se lo podemos poner.
Sería sudo passwd espacio student,
y ahí ya te pregunta qué password le quieres poner.
Ya llegamos hasta aquí, me levantan la manita,
y ahora ya estamos en esta parte de sale,
que puedan encontrar este comando, el Docker PS,
sin sudo.
Lo pongo aquí en el chat.
A ver, vamos a ver.
Luis, voy a hacer el grande aquí tú.
Aquí es donde dices que no te deja, ¿verdad?
Su user.
A ver, creo que yo puedo tomar tantito tu control.
Puedes separar del guión en la parte del user,
donde empieza el signo de $.
No creo que sea eso, pero bueno, sí, eres.
Ahí está.
Ya.
Sí, sí, luego los detallitos, no te preocupes.
Ahí está.
Entonces hasta aquí pues ya instalamos el engine de Docker,
y ya tenemos la capacidad de usarlo.
Estamos, todo esto se hace generalmente, pues,
en la mayoría, más bien en todos los,
en todas las distribuciones Linux,
tenemos que buscar el auto, dependiendo de nuestra distribución.
En este caso fue para Ubuntu.
Les repito, para el tema de Mac o el tema de Windows,
pues es un poquito distinta la situación, ¿no?
Ahí sí ya nos podemos descargar aplicaciones que ya nos permiten,
ya hacen todo este proceso de instalación,
y ya nos permiten directamente usarlo, ¿sale?
Pero básicamente también esto nos sirve para entender un poquito
la estructura precisamente de este engine
y de lo que vamos a estar trabajando.
Entonces ya que tenemos nuestro engine instalado de Docker,
lo que vamos a hacer, y bueno, que lo podemos usar sin,
¿cómo se llama?
Sin que necesariamente tengamos privilegios de sudo,
pues lo que vamos a hacer es empezar a conocer
algunos de los comandos que podemos usar, ¿vale?
Y sobre todo, pues, vamos a empezar a ver
lo que es el ciclo de vida de un contenedor, ¿vale?
Ahí se ve en mi pantalla, pero se ve como muy raro, ¿verdad?
¿Sí la ven bien o no?
Sí, eso es lo que estoy viendo.
Es que está acá, pero no sé por qué.
Está haciendo cosas raras, permítanme.
Bueno, no queremos estar haciendo así, pero vamos a ver.
¿Sale?
Vamos a hacer un poquito más grande.
Y vamos a empezar.
Pues el ciclo de un contenedor, el ciclo de vida de un contenedor
va a estar dictaminado por los pasos que tenemos aquí,
que básicamente, pues, va a nombrarnos
en el estadío en el que se encuentra en nuestro contenedor.
Y pues básicamente vamos a empezar por el tema de la creación.
¿Qué me dejaste uno?
Aquí está.
El de la creación.
Luego vamos a tener la parte del inicio, la ejecución,
la detención, el detener nuestro contenedor y la eliminación.
En los pasos de creación y de posible,
más bien, en la parte de creación lo vamos a conocer
en nuestro contenedor como imagen.
Lo vamos a referir a él como una imagen.
Y vamos a, en realidad, a tener el mote de contenedor
a partir de que está iniciado y en ejecución.
A partir de aquí nos vamos a referir como contenedores
porque en ese momento es cuando nos vamos a estar refiriendo
a ya tener en funcionamiento nuestra imagen.
Y en ese punto, pues, es nuestro contenedor.
Y no sé si alcanzan a ver aquí la imagen.
Y en este momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Y en ese momento, pues, es nuestra imagen.
Sí, así es.
Contienen de base distintos archivos.
Y listo.
Tenemos el Statue2App.
Y aquí vamos a hacer...
Docker...
Ahí está nuestra línea de la tarita.
Siempre se me olvida.
Docker.
Aquí vamos a poner la imagen que vamos a tomar.
OK. Hasta aquí...
OK. Hasta aquí...
Lo que hice fue generar un directorio que se llama hola mundo.
Una pequeña aplicación.
Está en Python.
Es esta de aquí.
Sabe que nos tiene que contestar solo el hola mundo.
Y...
No sé si...
Dejen que les pegue...
Que les sale más rápido.
Les pego el código en el chat, ¿verdad?
OK. Vale.
Entonces...
Ahí va para allá.
Lo tienen en el chat.
Y tiene que tener esta estructura.
No sé si ya antes habían programado en Python.
O qué lenguaje es en el que a lo mejor han tenido ya experiencia programando.
Vale. Mientras...
Empecemos esto.
Ponemos ese código ahí en Python.
Lo que hicimos fue generar la carpeta.
Poner el código.
Y luego vamos a generar este archivo que se llama Dockerfile.
¿Vale?
En el archivo Dockerfile...
Vamos a poner lo necesario.
Para que se genere nuestra imagen.
Como base vamos a tomar esta...
Esta imagen.
De este repositor que se llama Tiagolo.
Y vamos a por ejemplo a buscar aquí en el...
En el Docker Hub.
Vamos a ver qué opciones tenemos.
Ponemos...
Pegamos...
Miren aquí está.
Esta es una imagen.
De un usuario que se llama Tiagolo.
¿Cuál es la diferencia?
Si se dan cuenta.
Como aquí cada uno de nosotros podemos hacer un repositorio y publicarlo.
Pues luego la gente de seguridad dice no, no, no.
No puedes tomar imágenes de cualquier lugar.
No sabemos que contenga.
Hoy en día se pueden auditar las imágenes.
De entrada.
Pero generalmente cuando...
Pues tenemos...
En la curia de revisar qué es lo que estamos usando.
Pues podemos usar herramientas que nos permitan auditar las imágenes Docker.
Y ver qué es lo que hace, cómo fueron construidas, etc.
Pero si no reparamos en ello.
Recordemos que aquí hay...
Muchos usuarios subiendo sus imágenes.
Y en efecto no sabemos cómo fueron creadas.
Qué componentes tienen.
Si no lo revisamos.
Entonces generalmente...
Lo que se hace es que como en las redes sociales.
Todas las empresas, comunidades de desarrollo importantes.
O que tienen ya cierto tiempo trabajando.
Cierto renombre, digamos así.
Se identifican con este distintivo.
El Docker Official Image.
Recuerden el archivo que tenemos que crear se llama Dockerfile.
En el directorio que generamos.
Y tenemos que poner esto.
Así.
No tiene que verse con el archivo.
Hasta aquí.
Tienen alguna duda, algún comentario.
Así es.
Es correcto.
La OSI Image.
Se me olvidó.
Open Source OSI.
En busco el sitio.
Y digamos que ahí ya es...
Como el estándar.
Para tú generar una imagen.
Pura, así, limpia.
Desde cero, desde una máquina.
Desde una versión...
De tu sistema operativo base.
Y eso pues ya requiere.
Pues obviamente.
Un conocimiento un poco más avanzado.
Tanto del sistema operativo.
Como del mismo runtime.
De Docker.
Sale.
Entonces, nosotros generalmente.
En el uso o en el aprendizaje de Docker.
Lo primero que vamos a ver.
Es como generar a partir de una imagen.
Las nuestras propias.
Y también.
Las nuestras propias.
Y todas las que están disponibles.
Para poderlo hacer.
Sale.
Ahí también hay mi pantalla, ¿verdad?
Esta es, digamos, el sitio.
De la fundación Linux.
Donde se van a marcar.
Digamos.
El cómo debemos construir.
Imágenes.
Para contenedores.
De manera estándar.
Porque Docker no es el único producto.
Actualmente para temas de contenedores.
Han salido forks.
Y por ejemplo.
Red Hat.
Tiene su propia.
Su propio runtime de contenedores.
Que se...
Potman.
Que se llama el runtime.
Y pues es similar.
La verdad es que hacer.
Ser un producto open source.
Y código abierto Docker.
Pues tú lo puedes tomar y lo puedes modificar.
Entonces Red Hat lo ha tomado.
Ha tomado algunas funcionalidades.
Y ha generado su propio producto.
Si quieren verlo así.
Pero entonces para que todo sea de alguna manera.
Compatible entre sí.
Que no nos perdamos en incompatibilidades.
Pues se generó la gente.
Y listo. Ya la generó.
Aquí ya generó.
De todas estas.
De toda la imagen generó.
De acuerdo a lo que fue trabajando.
Estas pequeñas capas.
Ya la generó nuestra imagen.
Y la exportó en automático.
A nuestro registry local.
Entonces si yo le doy lo que...
Ah.
La imagen.
Acá. Que fuese mal.
Que ponemos el de ese.
Y aquí ya la tenemos.
Sale.
Es hola mundo. En la versión 1.0.
Este es el ID.
Y ya la tenemos. Ya generamos.
Nuestra imagen.
Sale. Entonces ahora vamos a ver si corre.
Vamos a ponerle al nombre del contenedor.
El nombre del contenedor es hola contenedores.
Por el puerto 80.
Y vamos a poner.
Esta imagen.
Ahí ya inició.
Si se dan cuenta.
Aquí nos dice que está escuchando por el puerto 80.
Entonces las.
En toda la red.
Todas las direcciones posibles.
Y nosotros le damos aquí.
A ver si nos abre el contenedor.
Copiarlo.
Vamos a esta parte de aquí.
Y ahí está.
Tenemos nuestra primera aplicación.
Corriendo.
Sale.
Hasta aquí vamos todos.
¿Dónde de este lado?
A ver. ¿Dónde? ¿Dónde?
¿Dónde andan? ¿Dónde andan?
Están de este lado.
¿Lo hiciste en tu pantalla? Sí.
Aquí estamos viendo que está corriendo nuestro.
Nuestro contenedor.
Sale.
Y de hecho por ejemplo aquí ya estamos viendo.
Que ejecutó el start.sh.
Entonces es muy probable que tomó.
La aplicación que viene aquí.
Del start.sh.
Y podemos hacer dos.
Les voy a mostrar dos cosas que podemos hacer aquí.
Entonces podemos conectarnos.
A nuestro contenedor.
En ejecución.
Es el que tenemos en la otra pestaña.
Vamos a usar docker.
exec.
Menos it.
En la id de nuestro contenedor.
Que es este de aquí.
Y vamos a decirle que nos ejecute.
El comando bin bash.
Para que tengamos una sesión.
Activa del.
Pronte de shell.
Del shell de bash. Perdón.
Y a partir de aquí. Podemos explorar.
Lo que está sucediendo.
En nuestro contenedor.
Básicamente el exec.
Es para ejecutar comandos.
Podemos ejecutar cualquier comando.
Dentro de nuestro.
Contenedor.
Y en este caso la opción de.
It. Es para que sea interactivo.
Que quiere decir que se va a quedar.
Activo. Mientras se ejecuta.
El comando.
Si yo se lo quitará.
El bin bash. Aunque se ejecute.
En el momento en que se ejecuta. Se vuelve a cerrar.
Y no tiene mayor.
Impacto en el que podamos trabajar.
Dentro de nuestro contenedor.
Si lo vemos de esa forma.
Pero a ver.
Nosotros le diramos bin.
Ls por ejemplo.
Ya se cerró.
Ya se cerró.
Bueno ahora vamos a levantarlo.
Vamos a ponerle.
Aquí.
Está.
Aquí.
Aquí.
Y.
Está.
Y la ID. ¿Cuál es la ID?
¿Qué es este?
¿Cómo le pusimos?
La contenedora.
No.
No.
La contenedora.
Aquí ya estamos viendo.
Otro estadio de nuestro.
Contenedor.
El run.
Es.
Para iniciar la ejecución.
De nuestro contenedor.
Y en ese momento se va a generar una ID.
Y se le va a llamar.
De acuerdo a lo que nosotros le pusimos.
Cuando yo intenté.
Volver a ejecutar.
El mismo comando. Que es el run.
Con base al nombre que le pusimos.
Que es aquí.
Nos dice no.
Y ahora yo puedo ejecutar.
Como si fuera.
Digamos que el run es como ejecutarlo cada vez.
De cero.
Y me dice que yo ya ejecute.
O en algún momento ya se ejecutó.
Un contenedor.
Con ese nombre.
Entonces yo ya hasta aquí lo tengo con este ID.
Entonces para volverlo a iniciar.
Dado que lo detuvimos.
Que es uno de los.
Parte del ciclo de vida.
Que vamos a poner que en este caso va a ser un.
Start al nombre del contenedor.
Que quiere decir que momentáneamente.
Todos nuestro.
Nuestra configuración que en ese momento.
Ejecutó nuestra.
Imagen.
Y que generó unos volúmenes.
Aunque son temporales.
Si quieren verlo así.
En este momento están guardados.
Y que el estatus de nuestra.
Aplicación pues se mantiene.
En esa.
Contenedor.
El ID.
En este caso no cambió el ID.
Perdón.
De nuestro contenedor.
Entonces ahora si vamos a darle un docker exec.
Y aquí ya está nuestra.
Nuestro LS.
Sale.
Así es como podemos darle comandos.
Hacia el interior de nuestro contenedor.
Pero que pasa.
Lo que yo les comentaba.
Queremos una sesión interactiva.
Que quiere decir que vamos a esperarnos.
Que.
Nuestro contenedor.
Ejecute lo que en este caso el comando.
Que le pedimos y que nos muestre.
Todo el momento.
En todo momento esa.
Sesión de ejecución.
Vamos a poner el.
El ID del contenedor.
Y el comando que en este caso.
Se suena a cell.
Y listo.
Estamos conectados.
Aquí ya estamos viendo que en efecto.
La imagen ya traía un.
Un punto pi.
Y lo vamos a ver aquí.
Sale.
Aquí ya tenemos un.
Prestar.
Sale.
No se si vamos igual.
Ya te crearon esos comandos.
No.
Se los paso por el chat.
Ahorita tienen funcionando ya su.
Contenedor verdad.
No la han cerrado.
O ya.
Ok puedes darle el build.
Para generarlo.
Así claro.
Build.
En este caso.
Es el nombre de la imagen que le pusimos.
Que fue hola mundo.
Ya se los puse.
En el chat.
Para empezar.
Se genera.
Un.
Entorno.
Totalmente separado.
De lo que es tu.
Tu sistema base que en este caso.
Se genera.
Totalmente separado.
Y lo que sucede.
Es que estas corriendo aquí.
Una instancia digamos.
De sistema operativo.
En este caso.
Del que descargamos.
Y ya que esta.
Que va a ejecutar directamente.
El.
Que va a ejecutar nuestra aplicación.
Pero tu no lo puedes ver.
Directamente.
Como si fuera parte de algún directorio.
De tu sistema operativo.
Si no tiene una capa.
De.
Arreglos.
De.
De organización de la información.
Que lo que hace es que.
Lo cubre.
Dentro de.
Dentro de lo que es tu sistema operativo.
Y el contenedor.
Sale.
Se generan unas cosas que se llaman.
Volumes.
Que supongo que esta aquí.
En.
Aquí tenemos que ser.
Super suave.
Volumes.
Volumes.
Volumes.
Volumes.
Si.
Toda ejecución.
Nos va a generar.
Unos bloques.
En este caso.
Como si fueran volúmenes.
De disco duro.
O de espacio.
Dentro del engine.
De docker.
Y aquí por ejemplo este es uno.
Que es precisamente.
El.
Contenedor que estamos corriendo.
Ahora tenemos un comando.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Volumes.
Así es.
De hecho.
Lo tengo acá.
Mira la estructura que tiene.
Es la siguiente que de hecho quizás.
Me faltó.
Hacer.
El cambio.
Aquí tiene un main.
Y aquí tiene el prestar.
Sale.
Aquí lo que va a ejecutar.
Luego cuando arranque.
En.
El contenedor.
Es este script que dice prestar.
Sale.
Y aquí tiene las instrucciones.
Para ejecutar.
En este caso.
La aplicación.
Sale.
Entonces aquí.
Main.
Ok.
Aquí ya tiene.
Lo que es la aplicación.
Y de hecho por eso nos está mostrando.
El mensaje.
Lo que tendríamos que hacer.
Es.
Salvo.
Vamos a ajustar.
Un poquito.
Y lo que voy a hacer es.
Cambiarla.
Que se llame.
Main.
Apope.
.pelle.
Vamos a sobre escribir.
La que ya trae ahí.
Podría funcionar.
Aquí.
Aquí en el Docker.
Bien.
Y aquí podemos hacer dos cosas.
Vamos a ver.
Mesh.
LS.
Tenemos aquí.
El hola mundo.
Con el 1.0.
Aquí tenemos.
Lo que es.
Y está corriendo nuestro.
Contenedor.
Lo vamos a detener.
Lo eliminamos.
Lo que estamos generando es.
Otra.
Pequeña versión.
Tenemos.
Mesh.
Tenemos la versión.
1.0.
Y la versión 1.1.
Y aquí lo que sucede.
Que estamos generando la imagen.
Con los directorios.
Como lo mostrás un momento.
Por dentro del.
Contenedor.
Ya generamos.
Que nos generamos.
Cuando entramos al contenedor.
En ejecución.
Lo que nos mostraba era.
Precisamente.
Que ya tenía un directorio.
Que se llamaba app.
Y que ahí tenía una.
Main.pelle.
Y ese era el que estaba ejecutando.
De manera que nosotros accedíamos.
O nos respondía la aplicación.
Lo que venían en esos archivos.
Ya están dentro.
El decir que generas una imagen.
Precisamente como un.
Como un compreso.
Como un archivito de los de.
Virtual box.
Lo generaste.
Y ya adentro lleva todo lo necesario.
Para la aplicación. No necesitas metérselo.
En tiempo de ejecución.
La diferencia entre la virtualización.
Pura y los contenedores.
Es que tú vas a preparar.
Previo.
A la ejecución de tu aplicación.
El ambiente.
Y luego todo empezar a instalar a mano.
Todo esto.
Lo automatiza.
De manera que lo que queda.
Es esta imagen.
Es un archivo.
Que se generó.
A partir de la imagen.
Es como si hubieras agarrado una carpeta.
Y ahí hubieras metido todo.
Pero estamos hablando.
De que no solamente son archivos.
Así pegados.
Digámoslo.
Ahora vamos a ver.
Copio lo que le pedimos que copiara.
Y nos muestra.
Luego que le pedimos que nos muestre.
No contesto.
Si si está en port.
Lo que no parece ser.
Es que si está ejecutando la aplicación.
Así está bien.
Porque lo vamos a conectar.
Al contenedor.
Que sería este de aquí.
Ya está nuestra aplicación.
Pero.
Hábamoslo de gusto.
Que no inició.
Con que no está.
Bueno.
Digo que es lo que tenemos que hacer aquí.
Que lo componemos.
Pero.
Vamos continuando con.
La presentación.
De aquí de los comandos que.
Estuvimos viendo.
Pues básicamente ya.
Vimos como ejecutar una imagen.
Como construir una imagen.
Como eliminar una imagen.
Descargarla.
Detener un contenedor.
Eliminar un contenedor.
Ah bueno.
Los logs del contenedor.
Y los que estamos buscando.
Entonces ahorita hemos visto.
Los comandos.
Que comúnmente vamos a estar usando.
Para construir.
Y para ejecutar nuestros.
Contenedores.
Ahora bien.
Antes de que pasemos a la parte de redes.
Esto de.
La ejecución de imágenes.
Docker.
Nos ayuda.
A que.
Podemos.
Compartir.
Podemos trabajar.
Todo este tema de.
De los contenedores.
A que me refiero.
Por ejemplo esta imagen.
Que está aquí.
De tipo Linux.
AMD 64.
Que son las máquinas.
De tipo Intel.
Como las llamadas.
IBM Z.
IBM Power.
Power PC.
X86.
Que son las máquinas más.
Algunas viejitas.
Pero siguen siendo Intel.
ARM.
Este tipo de arquitecturas.
Son dependiendo del tipo de procesador que usamos.
Y entonces podemos tener la lista.
De todas las imágenes que podemos usar.
En estos ambientes.
Perdón.
Y nosotros a la hora de construir.
También podemos indicarle.
Para que.
Arquitectura vamos a construir la imagen.
Vale.
Entonces depende.
Si por ejemplo.
Nos vamos a basar.
En alguna imagen.
Que si tenga.
Una arquitectura.
O esté preparada para.
El tipo de procesador.
Que vamos a utilizar.
Podemos indicarle.
En el build.
Que vamos a utilizar una arquitectura.
En particular.
Aquí por ejemplo.
Build.
Vamos a ponerlo.
Vamos a poner por ejemplo.
Quizás nos de un error.
Porque no estoy seguro que la imagen.
Esté preparada.
Para la arquitectura ARM.
Por ejemplo.
Vamos a ponerle Docker.
Docker.
Build.
Build X.
Y vamos a ponerle classical.
Vamos a ponerla a mundo.
1.2
A ver si nos funciona.
Y lo vamos a construir.
Ahora.
De hecho creo que si lo hizo.
Aquí me generó.
Una imagen.
1.2
Pero cual es la diferencia.
Que lo que me construyo.
Es.
Directamente para la plataforma.
ARM.
Entonces nosotros podemos.
Crear nuestras imágenes.
Aunque estemos trabajando en una máquina X86.
Para alguna plataforma.
Como el ARM.
O para las que vimos de IBM.
O desde una máquina IBM.
Por ejemplo.
O una Mac. Por ejemplo.
Que actualmente ya tienen los chips ARM64.
Podemos.
Crear una imagen que corra en un servidor.
De 64 bits.
De tipo Intel.
Entonces.
Docker nos da la capacidad.
De generar imágenes.
Para otros entornos.
Y que nosotros.
Podemos construir.
Y luego.
Compartirlos.
Por medio de un.
De un.
Docker registry.
O como les mostré.
De manera manual.
Entonces.
Con esto.
Es otra funcionalidad.
Que nos brinda ventaja.
A la hora de generar.
Para los ambientes de tipo Docker.
Que no solamente.
Podemos generarlos para un solo tipo de procesador.
Sino desde la máquina.
Donde estemos trabajando. Podemos generarlo.
Para el tipo de procesador.
Que estemos usando.
Es correcto.
No nos va a correr. Nos va a mandar un error.
Porque dice que necesita un.
Un.
Procesador de tipo ARM.
Para correr. Vale.
Entonces. Ahí.
Lo que quería.
De alguna manera.
Mostrar.
Que de alguna manera.
Nos deja crear imágenes.
Para otros entornos.
Para otros tipos de procesadores.
Desde donde estemos trabajando.
Que no necesitamos.
Tener una máquina virtual.
O una máquina física.
Con ese tipo de procesador.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Que no es tan fácil.
Las redes.
Bueno.
Hace un momento levantamos un
Contenedor.
Y nos comunicamos con él.
Porque era una aplicación de tipo web.
Y nos comunicamos a puerto 80.
Y nos contestó.
En Docker. Pues obviamente.
Vamos a utilizar las redes.
Como una de las maneras.
Para poder acceder a los servicios.
Y a las aplicaciones que nosotros.
Empaquetamos. Que nosotros construimos.
Perdón.
Y para esto. Gracias. Gracias.
Para esto Docker nos proporciona.
Tres tipos de redes.
Que son.
Los tipos de red.
Bridge.
Los tipos de red puente.
La de host.
Y la de superposición.
Vale.
La de bridge. O la de puente.
Es una red predeterminada.
Porque lo que genera.
Es que cada contenedor.
Se conecta a esta red puente.
Que tiene su propia interfaz de red.
Sus frutas estáticas.
Etcétera. Etcétera.
Y que de esta manera.
Quede precisamente.
Una comunicación entre.
Puede ser puente con nuestra.
Red.
Del host.
O una red.
Que digamos. Nateada.
Para comunicar.
Exclusivamente.
El.
Contenedor.
Con nuestra máquina.
Y que podamos acceder a los servicios.
A través de esta red.
En el tema de la red host.
Lo que va a pasar es que no vamos a generar.
Ninguna red.
Sino que lo que vamos a hacer es.
Le vamos a casi casi decir.
Que la interfaz de red que tiene asignada.
Y que es la red.
Física.
Y al final.
Todos los host.
Que perdón.
Todos los puertos que vamos a abrir.
Se van a compartir.
Con nuestra máquina base.
No le podemos asignar.
Una IP.
De nuestra red.
Física.
Que está conectada a nuestra máquina base.
No es que vamos.
Física.
Y que se la vayamos a poder pasar directamente.
Al contenedor.
Simplemente va a tomar como base.
Que la IP propia.
De nuestra máquina.
Y a partir de ahí todos los puertos que abramos.
Van a contestar.
Las peticiones.
Cuando lleguen a la IP de nuestra máquina.
Sale.
Entonces de esta manera.
Fue la que hicimos hace un momento.
Lo que agarramos fue abrir un puerto.
Y el puerto 80.
Y en automático sabe que.
Si no le indicamos explícitamente.
Que tipo de red va a usar.
Estamos hablando de una red de tipo host.
Y que le queme.
Lo que vamos a hacer es abrir el puerto 80.
Vamos a compartir el puerto 80.
De nuestro contenedor.
Con nuestra máquina base.
Y una vez que tecleamos la IP de nuestra máquina base.
En el puerto en el que.
Hemos compartido con él.
Con el contenedor.
Y vamos a contestar.
A esto generalmente nosotros le conocemos como.
Forwarding.
En este caso es un forwarding.
De nuestra máquina hacia el contenedor.
Sale.
Y el tercer tipo de red.
Pues básicamente es donde.
Vamos a crear.
Una.
Igual una VLAN.
Pues que puede ahí ya.
Empezamos a generar.
Espacios específicos.
Para nuestras aplicaciones.
Y que también podemos ir separando.
De acuerdo a nuestras necesidades.
Con respecto a la organización.
De como queremos que corran.
Nuestros contenedores.
Ahí ya podemos ir creando.
Precisamente.
El tema de.
Una VLAN propia.
Que.
Nos va a permitir.
Comunicarlos.
Entre sí.
Y otras aplicaciones.
Que tenemos distribuidas.
Y.
Pues aquí por ejemplo.
Tenemos algunas opciones.
De lo que va a ser.
El tema de asignar.
Estas redes a los contenedores.
Vamos a tener aquí como ven.
El comando Docker.
En este caso el create.
Es para crear el tipo de red.
Que vamos a poner el driver.
El driver.
Y vamos a tener los que comentamos.
Hace un rato.
El overlay.
O el tipo.
Bridge.
Y vamos a tener opciones.
Como marcar la subnet.
Vamos a poder especificar el rango de direcciones.
Yps.
El gateway por ejemplo.
Que queremos que se use.
El modo de asignación de las ips.
Por ejemplo puede ser default.
Que puede ser el DHCP.
La IP del host.
Que tenga la misma.
La misma interfaz de red que el host.
Y usar la IP.
Del mismo rango.
Ninguna.
O podemos personalizar alguna.
Podemos ponerle ahí la IP estática.
Que nosotros queramos.
A nuestro contenedor.
Y a partir de aquí.
Pues básicamente con esto hacemos.
La gestión.
De las redes que podemos tener.
Dentro de nuestros contenedores.
En ejecución.
Y que se van a usar como una red.
Una red.
Física como las conocemos.
Hoy en día.
Entonces les comentaba.
Ahorita acabamos de.
Así como levantamos nuestra.
Nuestra aplicación.
Fue una red de tipo host.
Porque llamamos a nuestra máquina.
En un.
En este caso pusimos el.
127.0.0.
Y nuestra.
Nuestra aplicación contestó correctamente.
Aquí vamos a regresar.
Y creo que mi error fue ese.
Vamos a ver.
Vamos a ver.
Vamos a darle aquí.
Aquí dice que estamos.
Compartiendo a todo el mundo.
Nuestro puerto 80.
Y aquí.
Vamos a ver.
Por si usas.
Esta.
La aplicación.
Aquí dice que contesta.
Y le damos.
Aquí tenemos.
Aquí tenemos.
La.
Dice que contesta.
Entonces en nuestro navegador interno.
Aquí.
127.0.0.
Aquí ya está.
Nuestra aplicación hace un momento.
Recuerdan que yo lo puse afuera.
En mi navegador.
Y era aquí dentro.
La máquina virtual.
Aquí llevamos la respuesta que nosotros le pusimos.
Nuestra aplicación.
Aquí ya vimos llegar.
Este.
La respuesta.
Y también puede ser.
Con la ICOE que sacamos.
Aquí estamos utilizando.
Una red.
De tipo host.
Porque estamos accediendo.
A nuestro contenedor.
A través de la red.
De nuestra máquina base.
Por el puerto.
Así es.
Si es correcto.
Sí.
Sale.
Entonces.
Generalmente.
Vamos a utilizar.
En producción.
Las de tipo.
O las de tipo.
Las host.
No está.
La verdad es que es muy poco recomendado.
Más adelante.
Vamos a ver.
Que para toda esta parte.
Cuando lo vas a hacer productivo.
Existen herramientas.
Como lo son.
O son algunas otras.
Que nos ayudan.
A este.
Y otras otras herramientas.
Que nos permiten.
Llevar ya a producción.
De manera mucho más robusta.
Nuestras aplicaciones.
Es decir.
Un docker así.
Pelón.
La verdad.
Es que no se usa.
Ya cuando estás.
En aplicaciones.
Dentro de docker.
Hay una.
Hay una.
Funcionalidad.
Que se llama docker compose.
Que es la.
Digamos la más sencilla que tú vas a poder.
Usar para.
Empezar a montar servicios.
De manera productiva.
Y de esta manera.
Pues.
Es un simil sencillo.
De lo que es Kubernetes.
Pero aquí ya vas a poder.
Especificar ciertas.
Situaciones dentro.
Que quieres que hagan los contenedores.
Que este.
Que se ejecuten con ciertos.
Volumes.
Que se crean para guardar por ejemplo.
El directorio de datos.
De una base de datos.
O sea ya puedes ir especificando.
Cosas más avanzadas.
Hasta para el tema de la red.
Sale entonces.
La cosa.
Digamos la.
Lo mismo.
El ejemplo de la red.
Ahora.
Vamos a ver.
Las redes.
Vamos a empezar a ver.
Vamos a crear.
Una red.
Y aquí vamos a poner.
Lo que.
Lo que.
Lo que.
Ah bueno antes de eso.
Aquí por ejemplo.
Este.
Comando de Dockerlock.
Nos hace.
Ver lo que está sucediendo.
Dentro de la salida.
El STDout.
De nuestro contenedor. Que básicamente es como estar viendo los locks.
Entonces.
Docker.
Dockerlock.
Vamos a pegar aquí.
Entonces.
Dockerlocks.
Aquí nos muestra.
Lo mismo que estábamos viendo cuando hicimos el run.
Pero en tiempo de ejecución.
Ya lo vemos de manera estática.
O le podemos poner la opción.
Menos menos follow.
Y se queda escuchando.
Entonces por ejemplo si vuelvo a recargar.
Otra llamada.
Debería mostrarnos aquí.
Otra llamada.
Ya hicimos tres.
Y con eso nos ayuda a depurar.
Un poquito en las situaciones que están sucediendo.
De nuestra aplicación.
Dentro del contenedor.
Ahorita vamos a armar una red.
Docker network.
Y vamos a ponerle.
Vamos a ver.
Que sea de tipo bridge.
Y vamos a poner create.
Vamos a ponerle.
Curso.
Curso 01.
Creamos aquí la red.
Aquí tenemos.
Las redes que tenemos.
Creadas.
De inicio ya tenemos aquí.
Por ejemplo una red creada.
De tipo bridge.
Automático.
Acabamos de crear otra que se llama.
Curso 01.
Ya tenemos nuestra red host.
En la que está operando.
Nuestro contenedor.
Y aquí pues una que no tiene.
No tiene definición.
Estas son las que se generan.
Cuando instalamos Docker.
Y vamos a ver.
Vamos a ejecutar nuestra misma aplicación.
De hecho vamos a ejecutar la.
Que tenemos inicialmente.
Docker run.
Vamos a ponerle.
Hola.
Mundo 2.
Network.
Se llama curso 1.
Y nuestro contenedor.
Digo nuestra imagen.
Que baja aquí.
En el.
Que empieza a correr.
Y ya está corriendo.
Nuestro contenedor.
Vemos aquí.
Y ya tenemos.
Aquí nuestro hola mundo 2.
Si dan cuenta.
Que ya no nos dice que está.
Que está.
En nuestro propio puerto 80.
No lo estamos compartiendo.
Si no ya directamente sobre el contenedor.
Está corriendo en el puerto 80.
No hubo problemas en iniciarse.
Porque no.
Están usando los mismos recursos de red.
Y por eso la nuestra sigue corriendo.
Sale.
La que modificamos.
Ahora lo que yo voy a hacer.
Es porque.
Si es así.
Así es.
Aquí por ejemplo lo que vamos a hacer.
Es inspect.
Network.
Inspect.
Y en teoría.
Ah, ahí donde teníamos.
Lo que tenemos.
En ese.
Inspect.
Y se vuelve yo.
Es el nombre.
De la red.
Aj.
Inspect.
También no tengo mal.
Inspect.
Aquí ya nos dice.
La configuración de la red.
Si te das cuenta aquí.
Curso 01.
La creamos.
Cuando la creamos es de tipo local.
Driver is bridge.
No tiene activo IPv6.
Y la configuración.
Pues aleatoria.
Si quieres verlo así.
Donde el define.
Que va a ser la subnet 172.18.00.
Y que tiene.
Tamaño 16.
El getaway va a ser la 172.18.00.
1.
Y déjame ver en una calculadora.
De subnets.
Ahora.
Que si ustedes se la saben.
No me acuerdo cuantos equipos son.
No me acuerdo.
Si según yo si.
Eso ya es.
Si se puede configurar.
Pero no dentro de la red.
Digámoslo.
Y aquí vamos a.
Está medio feo ver como son las IPs.
Cuando esa pelito aquí.
El docker.
Vamos a ver si nos.
Hice rápido aquí.
Ah. Se le loco.
La 172.18.00.
0.2
Entonces.
Aquí le damos el pin.
Y hay comunicación.
Sale.
Ahorita con el comando del docker.
Le pase el ID del.
Contenedor.
Busqué.
El inicio de nuestra network.
Que es la 172.
Y aquí me aparece que tiene esta IP.
Nuestro contenedor sale.
Entonces siguiente punto.
Esta red está creada.
Y tiene comunicación entre el interior.
Digamos de esa red.
Y nuestra máquina.
Aquí por ejemplo.
Ya dejó de contestar.
Porque resulta que le di control C.
Sale entonces ahora.
Tengo que dar.
Docker.
Docker start.
Y era.
Curso 0.1.
Ah no era.
La mundo. Perdón.
La mundo.
2.
Ahí está.
A través.
Docker PSO.
Aquí ya está corriendo.
Nuestro hola mundo.
Aquí ya contestó.
Estaba apagado.
Aquí ya está encendido.
No cambio el IP.
Y.
Pues como no le especificamos.
El tipo de asignación.
Debe ser de HCP.
Y el cuanto dure la asignación.
La verdad no me acuerdo.
La verdad es que.
Generalmente hasta que eliminas el.
Contenedor.
Liberas el IP.
Por ahorita.
Como no lo hemos eliminado.
Sigue contestando.
Vamos a ver.
Si nos contesta en el puerto 80.
Venimos.
Venimos acá.
Le vamos a dar.
Aquí.
Puerto.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
No.
on 2024-02-26
language: JA
WEBVTT
on 2024-02-26
language: ES
WEBVTT
De hecho ya está instalado, dice.
Ok.
Dice que no.
No es necesaria otra...
otra acción.
Ahorita lo que vamos a hacer es...
Vamos con la siguiente fase.
Ok, ya que tenemos instalado el MinEQ,
pues lo que vamos a hacer es ponerlo a funcionar.
¿No?
Y nos va a generar todo lo necesario para
este... emular un clóset de Kubernetes.
Entonces, lo que vamos a hacer es...
kubectl...
star.
Y vamos a empezar a ver que va a realizar algunas acciones.
Si pueden ir...
poniendo ese comando.
Y va a empezar a cargar lo necesario.
¿Vale?
Ahí de hecho está bajando los paquetes de Kubernetes.
Como tal, cuando...
Ya cuando hablamos de Kubernetes, lo que va a instalar entre algunas cosas
que son necesarias por, no sé, paquetes o este...
en nuestro sistema operativo, cuando ya estamos montando el clóset,
al final también lo que va a descargar son unas imágenes base de este...
de contenedores.
Si se dan cuenta ahorita dice,
me descargando Kubernetes versión 1.28.3.
Y luego aquí dice, voy a crear unos contenedores
con 12 PUs y con esta memoria, me parece que son 2 GB.
2200 Mb.
Y vamos a tener corriendo contenedores en nuestro nodo master
que son parte de Kubernetes.
Entonces ya desde ahí por eso necesitamos algún engine de contenedores
y ya está preparando nuestro...
nuestro clústercito.
¿Vale? Y listo.
Ya tenemos a nuestro clúster de Kubernetes corriendo
en nuestra máquina.
Ya vamos hasta aquí.
Les digo, con esta herramienta es bien sencillo trabajar y pues...
se trata de tenerlo más cercano a un ambiente productivo
sin tener toda la infraestructura montada.
Digo, bueno, si tienes una máquina más o menos potente
y puedes generarte más de una máquina virtual, pues bueno,
también eso es válido.
Pero, pues, les digo, nos ayudan a simplificarnos un poquito
con este tipo de herramientas.
Ya están listos.
Entonces, pues aquí vamos a poner el primer comando,
Minikube status, para saber en qué estado se encuentra nuestro clústercito.
Y miren, ahí nos dice el host está funcionando,
el kubelead está funcionando, el app server está funcionando
y el kubeconfig está configurado.
Básicamente.
Entonces, si recuerdan la arquitectura,
pues ya tenemos nuestro app server,
nuestro kubelead
y en este caso, pues, en la parte del kubeconfig,
pues va a ser como si fuera el controller
y el etcd, pues, básicamente va a ser esta parte del host.
Ya tenemos nuestros elementos iniciales funcionando
y pues vamos a empezar a trabajar con él.
En este vamos a poner este comando.
Ctn.
Ah, no se si se cuenta aquí.
Vamos a ahorrar aquí.
Vamos a generar este alias.
Se encuentra aquí.
Ahora, ahora, ahora.
Vamos a ver aquí con este comando, pues, que nos está dando ya
la información de nuestro clúster de Kubernetes.
Recordemos que como tenemos el
el minikube instalado tenemos que hacer este alias
para que nos reconozca los comandos que vamos a hacer
con que son estos de aquí con el kubectl.
¿Qué pasa? Bueno, esto es necesario cuando lo instalamos con
con, ¿cómo se llama?
El binario, como lo estamos
viendo ahorita, también es válido, por ejemplo, agarrar y
con el apt, buscarlo, su nuevo apt-sear.
Ok, ah, bueno.
Tendríamos que agregar algunos repositorios en algunos casos,
como este de Ubuntu, pero depende de tu distribución.
En algunos casos ya estás parte de los paquetes que puedes instalar
y generalmente ya cuando se instala desde desde los repositorios,
pues ya vienen todos los archivos de configuración necesarios.
Entonces a veces hasta ni es necesario hacer el alias, no?
Pero en este caso que lo hicimos desde los paquetes de
sitio de minikube, pues es necesario generar este alias.
Y pues bueno, si ustedes teclean este comando, el kubectl clúster
info, pues nos va a dar esta información, nos va a decir que
tenemos, está ejecutándose en esta
subred que nos ha generado precisamente para funcionar.
Tenemos.
Nuestro DNS interno de Kubernetes
funcionando en esta en este en este puerto.
Es la pista funcionando en este puerto del DNS.
Y pues que si necesitamos de buyear algún problema,
pues que podemos usar el mismo comando, pero con el dump.
Vamos a apedarlo para que la salida.
Como nos da, pues nos da todos los archivos de configuración.
Vamos a si.
Para ver más detenidamente el detalle.
Y pues básicamente son.
Esta es la configuración de nuestro clúster.
Ojo, todas las herramientas y todos los hotus de cómo
instalar Kubernetes no llegamos al nivel de tener que editar
cada uno de a lo mejor archivos o generar Jason.
La verdad es que como les comentaba, ya es bien sencillo
la instalación y la puesta en marcha de un clúster.
Obviamente a partir de esas recetas que generalmente seguimos,
pues sí hay que hay que tener en cuenta algunos otros detalles,
pero pues todo esto se genera en configuraciones de manera
automática por los elementos que tiene el Kubernetes,
no la arquitectura que tiene Kubernetes.
Qué nos sirve el revisar todo esto?
Bueno, ya cuando necesitamos hacer un ajuste específico,
pues ya sabemos dónde podemos revisar esta información y
pues ir ajustándola de acuerdo a lo que necesitemos.
Pero una instalación estándar como vieron nos genera toda esta
información.
Hasta aquí vamos todos.
Perfecto.
Pues básicamente ya tenemos nuestro.
Clúster de Kubernetes funcionando.
Ahora vamos a ver QSTL.
Nodes.
Y aquí vamos a tener el nombre de nuestro nodo.
Se llama Minikube y.
En este caso vamos a ponerle esta opción menos o white que nos
va a dar más información sobre el sobre el comando que vamos
a estar ejecutando.
Por ejemplo, aquí si le ponemos el QSTL get nodes o white,
pues no solamente me va a decir el name, el status,
el rol, el tiempo que lleva activado y la versión,
sino ya me va a dar más información como la IP interna,
la IP externa, la versión del sistema operativo en la versión
del kernel, en runtime de los contenedores que en este caso
es Docker.
Nos da más información, entonces siempre aprendan se esta
esta opción cuando queremos ver más datos.
Tenemos que ponerle a los comandos menos o white y ya nos
arroja de manera digamos lo más detallada de información sobre
lo que estemos buscando, porque esto es aplicable a los cuando
le damos que buscamos pod que buscamos servicios, etcétera.
Entonces es un es un buen este.
Una buena opción para tener más detalles es un comodín bastante
bueno.
Sí, a partir de aquí todos los comandos que me veas poner son
funcionales en un clúster de Kubernetes productivo,
o sea la onda de tener el minikube es que no tengas que
tener la infraestructura, pero tengas el software funcionando.
Entonces todas las opciones que veas que se pueden ejecutar
con el minikube las vas a poder utilizar en el Kubernetes
productivo si lo quieres ver así.
Repito, la onda es que no tengas todas las máquinas,
que te ahorres la infraestructura de alguna manera.
Entonces para eso es el minikube.
Ahora ahí sí vas a decir bueno, es que fíjate que yo agarré
e instalé un clóster de Kubernetes y 2, 3 comandos que
pusiste o no me daban exactamente la misma información o
ahí salía algún error.
Bueno, ahí lo único que tenemos que cuidar para que sea válido
el comentario que te acabo de decir es la versión de Kubernetes.
Se acuerdan que cuando le dimos el minikube start por ahí nos
dijo que estaba descargando Kubernetes en la versión 1.0 y algo.
Bueno, eso es lo único que tendríamos más o menos que cuidar
en cuando estemos trabajando entre los distintos ambientes que
tengan instalado Kubernetes.
Ahí sí lo que puede pasar es que sí, a lo mejor el minikube instaló
no sé, la versión 1.2.4 en un clóster que en contraste te heredaron
tenía la versión 1.0, por eso no son exactamente iguales la
información que te da.
Ahí sí es donde podría haber diferencias, pero en general el
mismo comando debe de funcionar.
Solo quizás puede ser que te vean un poquito más o menos de
información dependiendo la versión que estén trabajando.
Y bueno, con esto ya tenemos listo y operando nuestro clóster
de Kubernetes.
Y vamos a empezar a continuar viendo un poquito de teoría para
ir teniendo un poquito más de contexto de cómo vamos a estar
trabajando.
Y pues bueno, ahorita ya vimos la arquitectura, no sé si tengan
alguna duda de esa parte de la arquitectura,
alguna duda de los elementos.
Es a través del API.
Sí, aquí bajo la arquitectura tú vas a tener un nodo maestro y
vas a realizar todas las acciones administrativas a través de este
nodo maestro.
Vale, o sea, la idea es que no tengas que estar entrando a cada
uno de ellos.
Va a haber situaciones muy puntuales que van a requerir que
hagas algún ajuste puntual, sobre todo al inicio de la puesta en
marcha sale o por ejemplo lo que no lo que ayer hablábamos.
Este.
Por ejemplo, si no quieres descargar o no tienes un docker
registri ya sea este local o remoto, a lo mejor lo que quieres
es este pues exportar o importar la imagen del contenedor como
ayer lo hicimos.
Recuerdas que generamos un archivito tar que te copiaste de tu
máquina y lo quieres llevar hacia tu cluster de Kubernetes y no
lo quieres hacer a través de un docker registri.
Bueno, ahí sí, obviamente necesitas conectarte a cada uno de
los nodos porque necesitas que la imagen esté disponible para que
desde el más ser no ejecutes el generar el pot y que encuentren
la imagen que tú le dices.
Entonces, pues sí, ahí entras a cada uno de los nodos, importas la
imagen en el registri local de docker y pues ya la tienes
disponible para que desde el nodo cuando ejecutes la generación
del pod, pues vaya a los nodos que es donde lo vas a levantar o
si lo vas a levantar en sus nodos.
Básicamente, lo encuentre y ejecute o inicia el contenedor.
Entonces, este de son como los casos en los que a lo mejor
necesitas instar entrar perdón, perdóname en el nodo.
Básicamente todo tiene que ser a través de tu nodo maestro.
Toda la administración, toda la información va a fluir hacia
este nodo maestro.
Y pues básicamente no tendrías por qué entrar a cada uno de los
worker nodes en ningún momento.
Pero hablamos de un caso muy especial, por ejemplo, pero sí, o
sea, no una vez configurado tu tu cluster todo es a través de
aquí.
Es básicamente.
Modelo de red de contenedores en Kubernetes.
Vamos a ver cómo como trabaja.
Qué es lo que nos va a ofrecer adicional?
Pues esta herramienta.
Ayer vimos los tipos de red que podemos tener en la parte de
contenedores. No sé, Luis o bueno, va, no.
Recuérdame que qué tipos de red podemos trabajar con los
contenedores.
Perfecto.
Y Luis, ayer que veíamos la configuración de la red de tipo
overlay, a qué responde en sí la red overlay?
Ya nos decía no es que es para el tema de los de ya cuando
tenemos este nodo, estamos hablando de comunicar con otros
nodos.
Pero en sí de que vaya a que obedece esa esa en esa parte del
en el de que producto estamos hablando de que de que
orquestador correcto.
Así es, es correcto.
Así es, ya es como una esa parte de la red overlay es existe
dentro del engine de Docker, pero está destinada a que
trabajemos con el orquestador de su arm.
Entonces aquí no vamos a ver de entrada el tipo de red overlay
dentro de Kubernetes como tal, pues no se va a llamar así.
No lo vamos a hacer, no lo vamos a ver como directamente
algún tipo de red de las que disponibles, pero pues vamos a
tener ya una red establecida entre este el corazón del
engine de Kubernetes con cada uno de los nodos.
Ahí nada más recalcar el tipo de red overlay es específica del
producto del orquestador de Docker suave.
Y bueno, aquí no sé si alcanzan a apreciar en la presentación
pues que vamos a tener ya en la parte de la red, pues vamos a
tener servicios específicos que nos van a ayudar a exponer o a
comunicar.
Nuestros contenedores con el mundo exterior y entre ellos de
entrada.
De entrada.
Aquí en el diagrama que les puse, pues vamos a estar
hablando de un tráfico de estilo proxy con la IP de nuestro
nodo.
Vamos a tener servicios de balanceo de carga y vamos a
tener exposición de puertos a través de nuestro
forwarding que vamos a hacer.
Si se dan cuenta, en este caso, los tres tipos de red que aquí
en el diagrama, pues nos va a mostrar, por ejemplo, de alguna
manera es como un ingres, esta parte de aquí, este proxy nos va
a permitir entrar al servicio y a los pods que estamos corriendo.
Y el load balancer va a funcir cuando llega una petición aquí,
pues lo va a repartir en cada uno de nuestros pods y el service
en este caso el puerto que va a ser a través de nuestros
forwarding para llegar al service y nuestros pods.
Básicamente aquí vamos a entender un poquito de cómo está
montada la parte de la red y vamos a empezar por la red de
contenedores.
Va a existir una red ya predefinida de entrada para
nuestros contenedores que se van a comunicar.
Hablábamos de los namespace hace un ratito, por ahí si lo tienen
abiertos en la presentación, no sé quién de los dos quisiera
recordarme a qué nos referimos con la parte de namespace en la
parte de Kubernetes.
Así es.
Es para agrupar recursos, para agrupar ciertos recursos y
aislarlos, ¿sale?
Entonces la idea sigue siendo la misma.
Se ocupa la misma idea dentro de la parte de Kubernetes y en
este caso lo que vamos a aislar son grupos de pods,
grupos de servicios y digamos vamos a generar un namespace,
va a ser esto de aquí, ¿sale?
Y le vamos a poner aquí, por ejemplo, lo que les decía,
ambiente de producción, ambiente de desarrollo,
ambiente de QA.
Ese es el ejemplo más burdo y rápido que se me ocurre.
¿Por qué?
Porque el namespace me va a permitir agrupar todos estos
recursos y que aparte estos recursos en específico tengan
Así es, ¿vendía?
Bien, entonces, bien, entonces, bien.
A ver, vamos a ver.
Vamos a ver.
A ver, permítanme tantito.
Voy, voy, voy.
Un momentito.
Bueno, vamos a continuar con el tema de la
red.
Perdón que, que me tarde tantito aquí.
Bueno, pues básicamente el tema de que vamos a continuar viendo
pues nos va a ayudar a entender un poquito el cómo están ya
gestionadas las red dentro de la orquestrador de Kubernetes y
dentro de la misma implementación del clóster, ¿sale?
Pues básicamente vamos a tener como elementos la red de
contenedor de servicios, perdón, la red de contenedor a
contenedor que vamos a tener, que es esta parte de aquí,
lo que nos va a permitir comunicarnos entre los bots,
la VLAN que va a pedir, donde van a vivir cada uno de nuestros
bots y pues esta comunicación se va a gestionar a través de los
servicios de KubeLED y KubeProxy.
En este caso, y ellos son los que se van a encargar de montar y
de llevar toda la administración de esta red, ¿sale?
Vamos a tener una red de contenedor a servicio y en este
sentido va a ser la red que comunique los servicios
precisamente que no son otra cosa más que los, por ejemplo,
las formas en las que se van a comunicar al exterior nuestra
red interna de pod a pod.
En este caso, un servicio puede ser un node balancer,
puede ser un reverse proxy.
Van a tener en este caso una dirección IP virtual y un
nombre DNS, ¿sale?
Aquí ya vamos a empezar a hablar de temas de DNS que son
importantes mencionar dentro del funcionamiento de nuestro
Cluster de Kubernetes.
Pero, ¿qué pasa aquí?
No va a ser un DNS que vamos a necesitar nosotros que editar a
cada momento o tener en cuenta algunos nombres.
Solo si necesitamos alguna configuración muy particular,
pero generalmente Kubernetes se va a encargar precisamente de
administrar todo este tema de los DNS desde nuestro archivo de
configuración.
De entrada, los pods van a tener un nombre muy específico de
acuerdo al nombre que le pongamos en nuestra
configuración y de ahí va a tomar parte para generar
precisamente los nombres o los FQDN que va a llevar en los
DNS y con esto nos va a permitir comunicar los servicios
a los pods, los pods hacia los servicios con los nombres de la
configuración que nosotros vamos a ir anotando.
Y de manera automática, pues Kubernetes se lo va a tomar.
Se va a encargar de enrutar el tráfico de los servicios y de
los pods.
Él va a generar las rutas, él va a generar la conexión entre
las dos VLAN y nos va a permitir también tener acceso
hacia la red externa y que podamos que nuestros servicios
sean expuestos a través de esta red de servicios.
La red de servicio a servicio, pues esto va a ser que en un
mismo space, pues tengamos más de un servicio montado.
A lo mejor tenemos un load balancer para ciertos pods y
tenemos un reverse proxy para otros pods,
pero compartiendo el mismo service name.
Entonces, lo que va a pasar es que se va a generar en esa
VLAN la comunicación necesaria de servicio a servicio.
Y vamos a tener la red externa al cluster, pues que va a
permitir exponer precisamente nuestros pods hacia el
exterior y pues prácticamente ahí sí ya va a ser la red que
conecta a nuestro nodo de ejecución.
Regresando a las láminas anteriores de nuestra
arquitectura, pues ya vamos a estar hablando de la red que
compone o que tiene físicamente nuestro nodo de ejecución.
Ahí es en donde vamos a poder tener esta interacción de
la red externa al cluster.
Y pues aquí ya vamos a tener una forma de exposición,
ya sea por un balanceo, un port for warding,
que se le llama nodo port.
Y con esto, pues vamos a poder tener la parte de la red
externa de nuestros servicios o nuestros pods.
Y pues vamos a empezar a hablar un poquito de la detección de
servicios, el escalado y el equilibrio de carga.
Aquí, pues básicamente en Kubernetes vamos a tener la
posibilidad de que de manera automática tengamos la
detección de servicios, el escalado y el equilibrio de
carga.
Estos tres conceptos van a ser siempre muy importantes para que
vamos a ver.
La 1.2 creo que la teníamos.
Vamos a instalar en Visual Studio Code.
Es muy popular ya que tengamos esta parte de los editores de
texto con temas de Kubernetes.
Y vamos a ver, a ver si lo tiene en los repositorios.
No lo tiene en los repositorios.
Vamos a ver rápidamente cómo lo instalamos.
De nuevo un minutito.
Perfecto.
Vamos instalando.
Les pongo acá la URL.
Y van a instalar la LDAP.
Aquí le dan en deviano-vultu y descargan el paquetito.
Lo vamos a abrir.
Y bueno, aquí ustedes pueden usar cualquier editor de texto
como ayer utilizábamos en la consola.
Pero, pues aquí, en modo comercial,
dentro de este editor de texto.
Entonces, también igual es multiplataforma.
Podemos, les digo, pues usarlo o no.
La verdad es que al final de cuentas estas herramientas,
desde lo que se trata es de que simplifiquemos y seamos más
ágiles en el tema del uso de la tecnología.
Mira, aquí por ejemplo tiene esta parte de los contenedores.
Nos permite ver algunos datos de las configuraciones,
el Docker Compose, cosas de ese tipo, pues validarlas.
Si instalamos en este caso.
De Kubernetes, pues nos va a ayudar un poco al tema de
desarrollar los archivos de configuración y de que tengamos
acceso precisamente a validaciones dentro de nuestras
configuraciones.
Pues, más básicas.
¿Por qué?
Porque luego nos afectan los espacios de trabajar con los
archivos de configuración del Cluster de Kubernetes.
Nos ayuda a simplificar un poquito el trabajo con esta
parte.
Vamos a que las estoy instalando.
No sé si hasta aquí van ustedes también.
¿Le lo tienen por ahí?
Entonces, pues vamos a instalar la entrada, las que nos
recomiendan, la de Docker, la de containers, Kubernetes.
Aquí en la parte de extensiones, abres tú o tienes tu Visual
Studio Code y te vienes aquí en donde dice extensions y ya los
empieces a buscar.
De los que te salen luego, mira, aquí de los recomendados o
populares, debes de tener estos de aquí, el de container,
el Docker y el Kubernetes.
Mira, y en automático se instala este que nos ayuda a
validar los archivos YAMP.
Ese es de alguna manera el principal uso que le vamos a
dar.
Vamos a ir abriendo este link, por favor.
Ahorita lo pongo aquí en el chat.
Y vamos a empezar aquí a trabajar un archivo para generar
un pod de una de las imágenes que ya trabajábamos.
Entonces.
Permítame un tantito.
Luego, luego, pasar otra vez el link porque no se copia
correctamente.
A ver, este sí ya debería verse completo.
Va de nuevo.
Y ya deberíamos verlo aquí.
Ahí está.
Ahorita lo vamos adecuando.
OK, aquí lo que vamos a hacer es vamos a.
Permítame tantito.
OK, listo.
Ya.
Sí, de hecho, me alertó el sonido y dije, caray,
¿qué pasó?
Sí, vamos a poderles una nueva.
Hay una pilosa guardada en Recumens.
Ya todos vamos hasta aquí.
Ya tienen el archivito.
Y les vamos a ir explicando.
Sí, sí, si gustas hacer una carpeta o documentos.
Donde gustes ahora sí que donde gustes checarlo.
Puedes ir.
Ah, bueno, trae una terminal esta cosita.
Entonces, cuando le dices, ¿no?
Terminal.
Abre una terminal ahí justo en donde estás trabajando.
En este caso, pues.
Document.
Aquí solo que nos faltó.
Ahora que abrimos una terminal, si no lo ponemos en la
configuración general, vamos a tener que.
Tenemos que poner el alias.
Entonces, por ejemplo, en la terminal que abría ahorita de.
Aquí se col.
Entonces, yo estoy aquí en Documents.
Y aquí está mi archivito.
Le puse Python App.
Y les vamos a empezar a.
Ahora.
Vamos a empezar a revisar la estructura más o menos de este
archivito que nos va a servir para deployar nuestro servicio
dentro del clúster de Kubernetes.
Y vamos a empezar declarando la versión del API que te
conforma, que vamos a usar.
Actualmente, en la versión que instalamos de Kubernetes,
tenemos esta versión, la APPS versión 1.
Y a partir de aquí, esta es la que nos va a ayudar a que se
interprete toda la estructura de nuestro archivo de
configuración para Kubernetes.
Hay distintas versiones del API.
De hecho, podemos descargar y se configura automáticamente
alguna versión específica que necesitemos.
Pero es muy normal que trabajemos con esta versión.
Como de manera estándar para el tema de nuestro archivos de
configuración de hecho, aquí por ejemplo vamos a ver en el
clúster que tenemos del minico.
Versiones, me faltó la S.
Hasta me corrige cuando me equivoco.
Mira.
Y miren, aquí tenemos disponibles estas versiones del
API.
Cada una, dependiendo para el archivo de configuración o
actividad que necesitemos hacer, pues son las que están
disponibles.
Si se dan cuenta, aquí está la que vamos a usar ahorita.
Se llama APPS versión 1.
Entonces, como vamos a utilizar esa versión,
toda nuestra archivo de configuración puede ser
procesado por nuestro Kubernetes.
Y vamos a hacer lo que les mencionábamos hace un momento en
la presentación.
Vamos a generar un tipo de deployment que es,
sin mal no recuerdo, vamos a retornar aquí a la
Aquí están.
Es un tipo de controlador.
Vamos a tener aquí, o le vamos a decir que vamos a utilizar un
controlador del tipo deployment y que básicamente lo que vamos
a hacer es generar una serie de instrucciones para que pueda
desplegarse en nuestra aplicación, en este caso.
Y en este caso, como vamos a usar el tipo deployment,
puede ser que utilicemos un replica set,
un stator full set, dependiendo de la necesidad.
De nuestra aplicación.
En este caso, como vamos a estar usando este controlador,
pues nos va a montar todos los recursos necesarios para que se
genere un pod y nos va a estar actualizando el estado de
nuestro pod.
Nos va a ayudar a hacer el escalado automático en caso
dado.
Nos da la capacidad de hacer rollbacks si es necesario.
Algunas de las configuraciones.
Y pues básicamente va a administrar nuestro pod.
Dos controladores básicamente son para administrar el
comportamiento de nuestro pod y el comportamiento de nuestros
contenedores.
Y siempre va a estar verificando el estado y nos va a estar,
cuando nosotros preguntemos por el estado de alguno de nuestros
pods, él es el que se va a encargar de reportar el estado
de nuestro pod.
Entonces, ahorita vamos a utilizar el tipo deployment.
Y pues vamos a continuar configurando.
Y pues aquí vamos a generar dentro de los specs.
Vamos a poner cuántas réplicas quiero que se hagan de mi pod o
de mi contenedor.
En este caso estoy especificando que una.
El label que va a tomar mi aplicación.
En este caso yo la estoy nombrando como Python app.
Y este va a ser el nombre que tome internamente el FQDN para
comunicar los distintos servicios mediante el DNS.
Entonces, es muy importante que estos nombres que nosotros
estamos definiendo aquí dentro de nuestro archivo de
configuración sean consistentes para que los FQDN que se
generan en los DNS sean correctos.
Y los servicios responden correctamente como deben
responder o deben comunicarse de acuerdo al DNS interno que va
a trabajar esta parte en Kubernetes.
¿Sale?
En este caso vamos a poner esta etiqueta que va a corresponder
a el nombre de nuestra aplicación.
Si dan cuenta también nos ayuda un poquito con la
documentación el editor.
El nombre algunos como el cluster name, las anotaciones,
el timestamp.
Son algunas de las que podemos poner dentro de los metadatos.
En este caso con el nombre de nuestro namespace puede ser que
se va a generar para nuestra app.
Aquí ya van las especificaciones.
En este caso van en las réplicas el número de pods que
queremos que se generen.
Si se dan cuenta nos está diciendo la documentación.
Nos ayuda a tener esa referencia rápida de lo que necesitamos
setear y de lo que vamos a estar configurando.
¿Sale?
Aquí, por ejemplo, en el selector nos dice que vamos a
generar una etiqueta que nos permita etiquetar,
vaya la redundancia, a nuestros pods.
Y si existe algún replica set o si hay algo específico que
realizar o lo que vayamos a realizar específicamente sea
para la aplicación que tenga este label,
que tenga este selector y se va a aplicar a este console.
Exactamente al pod que corresponda con esta label.
Y, por ejemplo, ya una vez que tenemos definidos el selector,
el template que vamos a utilizar,
que es personalizado en este caso,
sí correspondiendo a las configuraciones de lo que nos
pusimos como Python app.
Luego viene aquí en la siguiente especificación interna,
digamos, del template que vamos a manejar, el nodo selector.
Ahorita este ejemplo lo estoy sacando de un nodo productivo
que yo tengo donde tengo más de un nodo.
Y aquí le estoy especificando en donde quiero que se ejecute.
Aquí le estoy diciendo en el nodo 1.
Pero previo a esto generamos algunas etiquetas para poder
diferenciar el nodo 1, del nodo 2 o del nodo 3.
Entonces, ahorita las vamos a comentar.
¿Por qué?
Porque lo que queremos es que se ejecute directamente en el
nodo que tenemos.
Entonces, las vamos a comentar poniéndolas con las
almohadillas.
Aquí ya viene la parte de los contenedores donde vamos a
definir la imagen que vamos a ocupar.
Algunas políticas que vamos a declarar.
Por ejemplo, esta política quiere decir que se haga un,
si no se encuentra la imagen, intente descargarla.
Recordemos que dentro de nuestro registro local van a
estar las imágenes que nosotros vamos a utilizar en Kubernetes.
Y desde aquí podemos decirle, oye, ¿sabes qué?
Si no se encuentra la imagen, trata de descargarla.
Si no tenemos configurado un registro interno,
lo primero que va a intentar es tener acceso a internet,
al registro general, al de Docker Hub.
Y va a intentar buscar ahí la imagen y descargarla.
Entonces, pues en este caso es válido,
porque ahorita voy a poner, bueno,
en este caso es una imagen de Redis,
pero ahorita vamos a poner la imagen que bajamos ayer y
modificamos de la app de Python.
Y pues vamos a dejar a lo mejor la política para ver que
intente descargar la imagen base.
Y si no, pues ya que la tiene ahí en el registro local,
pues vamos a ver cómo se levanta.
Ahorita la modificamos.
Aquí vienen igual, nos dice que definamos hacia dónde,
hacia quién está referida esta parte de la configuración de
los containers.
Entonces, pues lo vamos a referir al FQDN que tenemos
como Python app.
Y bueno, a partir de aquí viene la configuración de temas de
red.
En este caso vamos a configurar que este pod o este contenedor
responde en un puerto en específico,
en un protocolo en específico.
En este caso es de un Redis, está el 6389.
Lo vamos a cambiar por puerto 80.
Si se acuerdan, el día de ayer por ese punto estábamos
trabajando con la aplicación Python.
Y aquí vamos a definir temas de red específicos.
Por ejemplo, yo estoy poniendo que va a contestar por el
protocolo TCP por el puerto 80.
Puede ser que sea un servicio que necesite UDP.
Y pues vamos a especificar por qué tipo de protocolo vamos
a traer el TCP.
Entonces, lo podemos especificar en ese caso que es el TCP o lo
podemos dejar solo y solito va a poner esta configuración.
Aquí algunos recursos.
Si queremos limitar algún recurso,
lo vamos a poner de momento que no.
Y pues un log, ¿no?
En donde nos va a mandar alguna información que va a ser en
depth termination log.
Nos vamos a poner algunas definiciones de DNS.
Aquí, por ejemplo, vamos a poner dentro del pod podemos
definir qué DNS sucede.
Aquí, por ejemplo, es un DNS interno adicional que yo uso
para que se contacte con algunos otros servicios que son
necesarios para que funcione el pod.
Puede ser que hasta nuestro pod tenga salida,
por ejemplo, a internet y podamos usar el DNS de Google.
Ahorita vamos a poner este ejemplo y vamos a ver cómo nos
funciona.
Y pues obviamente la zona de búsqueda de nuestro DNS lo
vamos a poner en este caso como ejemplo, ap.net.
Son algunos de los datos que tenemos que configurar.
Si es cuadrado.
Y ahorita venimos aquí a la terminal y vamos a ver nuestra
imagen.
¿Qué imagen?
¿Por qué?
¿Por qué?
¿Por qué?
Y vamos a utilizar esta de aquí.
Y vamos a poner hola mundo en la versión 1.2.
La guardamos.
Y ahorita vamos a poner.
Y vamos a empezar aquí.
Ya todos vamos hasta aquí, ¿verdad?
Ya todos tenemos nuestro archivito de configuración.
¿Sí, verdad?
Ya.
OK.
Entonces, para que nos tome en cuenta y intente hacer ya la
actividad que nosotros definimos en este archivo de configuración
para levantar nuestro primer pod,
vamos a poner el siguiente comando qstl,
api-f, el nombre de nuestro archivo.
En este caso es Python.
Pero no estoy en él mismo.
Va de nuevo qstl api-f Python.
Y listo.
Nos acaba de mandar el mensaje.
Dice, tomé desde el controller de deployment,
generé un pod y lo levanté.
Ahora, ¿qué quiere decir?
Pues que nuestro pod ahorita se compone de un solo contenedor
y que debió ya ponerlo en marcha.
Ahorita lo que vamos a hacer, el siguiente comando es revisar
si ya está corriendo o qué estado tiene.
Qstl, get pods.
Entonces, ahorita ya tenemos nuestro pod.
Aquí tenemos un estatus que nos dice que es incorrecto porque no
encontró la imagen.
Pero ya con esto ya empezamos a ver cómo deberíamos ver
nuestros pods.
Por ejemplo, lo que les decía, quiero ver un poco más de
información en la parte de lo que nos está reportando ahorita
este comando del get pod.
Y si se dan cuenta, aquí ya nos dice el nombre,
si está activo o no está activo.
El estatus, que en este caso es el image pullback of.
Cuántos reinicios se ha dado, desde qué horas empezamos a,
cuánto tiempo de vida tiene.
Pero, pues ahorita básicamente no está funcionando porque no
encontró la imagen.
¿Qué es lo que pasa?
Pues que entonces resulta que sí,
mi imagen está en Docker, sí está ahí.
Pero resulta que en este tema del nombre de las imágenes,
a pesar de que aquí nos está dando un nombre cortito con el
nombre de, por ejemplo, el repositorio y la aplicación que
nosotros tenemos, previo a eso, lo que nos está poniendo como
base del nombre de las imágenes cuando es totalmente el engine
de Docker, es que nos pone previamente un Docker IO,
algo así.
El Docker IO y luego viene VNAMI, SonarQ.
Entonces, lo que él esperaría es que nuestra imagen de hola
mundo tenga esa como sintaxis.
Y como la hicimos manualmente y sin tomar en cuenta esta parte
del toquerío, pues es lo que encuentra solamente en este
caso, es una imagen que se llama así hola mundo a secas.
Entonces dice, ah, caray.
Siempre Docker, perdón, siempre Kubernetes va a estar buscando
como base una imagen que tenga la entrada en Docker IO o hola
mundo. ¿Por qué?
Porque es la manera segura de amarrar la entrada en la imagen
que tú estás tratando de usar.
Es siempre muy recomendado que se use o que se,
que permitamos que Kubernetes amarre de esta forma nuestras
imágenes. ¿Por qué?
Porque aquí estamos indicando a qué registro nos estamos
refiriendo y que realmente es la imagen que nosotros queremos.
De hecho, es muy común que en el engine de Docker a veces esto
sea, no sea requerido o forzoso, si lo quieres ver así.
Pero, por ejemplo, en el producto Podman de Red Hat,
en ese engine sí es de alguna manera forzoso que siempre se
mantengan estos nombres porque lo que nos dicen es con esto
brindas mayor seguridad a que las imágenes que estén usando,
se estén usando, sean las que buscas,
que vengan del registro que tú estés definiendo y que
nadie te haga como un ataque de man in the middle,
que te cambien la imagen o solo por poner hola mundo,
se jale la primer imagen o la mundo que encuentre por ahí el
engine de los contenedores y a lo mejor no es la imagen que tú
quieres, es una imagen intervenida y bueno,
bueno, ya vienen algunos temas de seguridad adicional.
Entonces, como necesitamos generar el nombre para que lo
reconozca, lo reconozca esta Kubernetes a través de la
búsqueda del registry, vamos a tener que generar una tag,
una label para nuestra imagen de hola mundo a través de Docker
y que va a ser como un alias entre las imágenes y nos va
a permitir hacer esa traducción dentro de lo que busca
Kubernetes y lo que busca lo que está buscando Kubernetes
dentro de las imágenes de Docker.
¿Sale?
Entonces, permítame un tantito, vamos a ver.
Yo buscar el comando.
Vamos a poner Docker tag, la imagen que queremos taggear o
generar esa label, que sería esta.
Vamos a ponerla aquí.
Y luego la tag, pero aquí viene.
3.1, hola mundo, 1.2.
Así.
2.5.
A ver si queda.
Entonces, aquí vamos a dar Docker MASH LS.
Y ahora ya vamos a tener una imagen más.
Nosotras es nuestro Kubernetes, VCTL.
Dice que está abajo, vamos a eliminarlo, VCTL.
No tengo ninguno.
Y es la imagen.
Un minutito, un minutito, un minutito.
A ver si aquí está bien, vamos a ponerla en library.
Entonces, vamos a repetir esto.
Docker IO.
Y vamos a poner.
Entonces, ¿cómo que vamos a poner?
Vamos a tener uno que dice curso hola mundo.
Entonces, aquí vamos a poner curso hola mundo.
En su versión 1.2.
Vamos a poner que está aquí.
Así con su imagen polos.
No me gusta.
Vamos a ponerle que.
Ahora en la imagen pool.
A ver.
Vamos a comentar tanto.
Ay, no lo está jalando.
Sí.
A ver, vamos a hacer rápido.
En lo que veo ahorita, el nombre de la imagen.
Voy a poner el ejemplo rápido que traemos en Redis.
Entrará.
Redis.
Y el puerto, lo vamos a regresar a 63, 79.
OK.
Redis.
Vamos a cambiar los nombres.
OK.
Vamos a ver.
Atención F.
Redis.
Vamos a ver.
El get pods.
Ya está corriendo.
Vale.
Ahorita voy a checar bien lo de los nombres para ajustarlo como
debería para nuestra aplicación Python.
Pero para continuar y no este consumo.
Y tenernos un poquito más.
Ahorita vamos a hacer uso de la imagen de Redis.
Y pues básicamente lo que ya generó ahorita fue un
contenedor, un pod con el contenedor de la imagen de
Redis que prácticamente ya se creó dentro de nuestro clúster
de Kubernetes y que cuando nosotros le damos que nos dé
mayor información, pues nos dice que ya se generó nuestro
pod con el nombre que nosotros le dimos de Redis App y le
asignó la IP interno en el segmento 10.244.0.10.
Ese es su IP.
Y si nosotros queremos acceder a los logs.
De lo que está haciendo nuestro pod va a ser prácticamente
similar a lo que hacíamos con los comandos de Docker.
Tenemos nuestro logs, QBZTL logs.
En este caso vamos a pegar el nombre de nuestro pod para
poder acceder al QBZTL.
Y aquí nos dice que ya está iniciado nuestro Redis que está
esperando las conexiones.
Por ejemplo, si le quito el follow nos va a decir no solamente
lo último, sino todo lo que aparezca en el log.
Básicamente es esta parte.
Ahora en cuanto a la red, pues solo va a ser visible para
nuestra máquina base o para nuestro, en este caso.
Tendríamos que estar desde nuestro nodo ejecutor para que
nos contestara nuestro pod.
Aquí sí hay una diferencia entre lo que teníamos ayer de
nuestro nodo de Docker, donde se generaba en local la VLAN y
nos empezaba a responder nuestro contenedor.
Ahora, ¿qué pasa aquí?
Resulta que en la arquitectura que nosotros tenemos,
nosotros tenemos esta arquitectura.
Entonces, nuestro nodo maestro realmente no está ejecutando el
contenedor, sale, sino lo está ejecutando un nodo de trabajo.
Entonces, si nosotros quisiéramos hacer un ping al
nodo, obviamente en el nodo maestro no nos va a contestar.
Nos va a contestar posicionados en el nodo de trabajo, sale.
Entonces, ahorita es como si nosotros en nuestra máquina
virtual, bueno, en esta máquina, pues estamos posicionados en
nuestro nodo maestro.
Nuestro nodo maestro no tiene acceso a la red que tienen los
pod.
Y para que él se comunique, pues como es un NETexterno,
necesitamos exponerlo, sale.
La única manera es posicionándonos dentro del,
¿cómo se llama?
Del nodo ejecutor.
Perdónenme hasta aquí.
¿Tienen alguna duda?
¿Tienen algún comentario?
Sí, sí, claro.
Ahí te estoy perdiendo, ahí un poquito.
Es que como que, sí te escucho, bueno, yo sí te escucho,
pero como que te empiezas a entrecortar.
A ver, sigue hablando.
OK.
El hilo.
Sí, sí, sí, sí.
Hay una disculpa, una disculpa.
Y ahorita nos vemos.
OK, OK.
Va, va, va de nuevo.
Va de nuevo para que vaya quedando un poquito más claro.
Sale.
Ahorita lo que vamos a hacer, recordemos que nosotros ya
instalamos nuestro Minikube.
Y el Minikube lo que nos va a ayudar es hacer esta
arquitectura.
O sea, ya deployamos esta arquitectura.
Ya tenemos un nodo maestro y ya tenemos un nodo de trabajo.
Sale.
Ahorita ya cuando instalamos el Minikube y lo pusimos a
funcionar en automático, ya tenemos esa estructura.
Hasta ahí ya estamos de acuerdo, ¿no?
O vamos poniendo de acuerdo.
Aquí ya si nosotros le pedimos a Kubernetes que nos diga
cuántos nodos tiene, nos dice que ya tiene, que tiene uno.
Y este es el que está funcionando.
Sale.
Lo que quiere decir es que cuando nosotros activamos el
Minikube, nos generó un nodo de trabajo que precisamente aquí
es correcto.
Ahorita lo que les comentaba, como tal, el Minikube nos ayuda
a que no necesites en este momento otra máquina más
física.
Sale.
Ahorita el Minikube lo que nos ayuda es que en una sola
máquina vamos a representar esta arquitectura.
¿Y qué es lo que está pasando?
Bueno, es que internamente levantó un contenedor que va
a fungir como nodo de trabajo.
Sale.
Entonces, esto es un contenedor que está internamente levantado
de manera automática.
Nosotros ya no nos peleamos por configurar ese nodo en este
momento.
Ya el Minikube nos lo configuró y nos lo puso a disposición
para comenzar a trabajar.
Sale.
Hasta ahí ahorita es lo único que hemos levantado.
Y de alguna manera es una forma de simplificar el que tengamos
fierros o utilicemos fierros para este consumo.
Los nodos.
Después de aquí, ¿qué es lo que vamos a hacer?
Pues resulta que lo que estamos haciendo es levantar una
aplicación, generar un pod dentro de nuestro cluster.
Sale.
Entonces, nosotros ya tenemos un cluster y lo siguiente que
vamos a hacer es levantar un pod.
Y este pod va a ser el servicio que vamos a deployar dentro de
nuestro cluster.
Sale.
En este ejemplo, rápidamente lo que vamos a deployar es un
Redis.
¿Qué es un Redis?
No sé si alguna vez han utilizado este componente,
es una base de datos en memoria.
Lo que vamos a deployar es esta cosa de aquí.
Básicamente lo que nos sirve es para guardar datos,
algo así como un mongro de B.
Es una base de datos que en particular en vez de guardarlo
en disco, lo guarda en memoria.
Generalmente es utilizada cuando desarrollan aplicaciones que
necesitan contestar rápidamente o dar respuestas rápidas.
Como mantiene estos datos en vez de en disco,
los pone en la memoria RAM.
Accede a ellos de manera mucho más rápida.
Entonces, ahorita como ejemplo, lo que vamos a poner a funcionar
es en mi cluster de Kubernetes voy a levantar una aplicación.
¿Qué aplicación es?
Es un Redis.
Ese Redis va a estar en una imagen de contenedor.
¿Sale?
En una imagen de contenedor.
Pues básicamente cuando yo mando a llamar la imagen desde aquí,
pues mi nodo de trabajo va a descargar la imagen y la va a
poner a funcionar.
Va a levantar o va a ejecutar el contenedor.
Sale dentro.
Así es.
La imagen que estamos descargando está aquí.
Es correcto.
Así es.
Sí es posible.
Solo que ahorita la complicación que encontramos o que se tiene
que resolver es el nombre en el cómo las encuentra.
¿Por qué?
Ahorita vamos a hacer algo distinto.
Lo que sucedió es que les decía el nombre.
Él los va a buscar con el Docker.io,
diagonal, la librería y el nombre de la imagen.
¿Sale?
Así es como él llegó a esta imagen, la descargó y la levantó.
El problema que tiene Kubernetes, digámoslo así,
es que es mucho más estricto en los nombres.
Entonces, tenemos que cuidar, por ejemplo,
que en esta imagen que generamos localmente,
como no tiene un registry general,
tenemos que buscar en qué librería es donde se encuentra
la imagen para especificarle el nombre.
Porque si no, el problema que nos daba es que no encontraba la
imagen y no podía levantar el contenedor.
Aquí en esta imagen que pusimos, pues en automático,
si tuvo correspondencia el nombre que buscó en el Docker Hub,
luego, luego la encontró, la descargó y nos
puso a funcionar el contenedor.
Hasta ahí es lo único que hemos hecho, es deployar una imagen.
El problema que encontramos fue en los nombres de las imágenes.
Y aquí les vamos a mostrar cómo podemos hacer una cuenta
gratuita en el Docker Hub.
Y podemos subir nuestra imagen que tenemos ahí y luego ponerla
en el archivo de configuración y en automático nos la va
a bajar.
Pero volvemos al tema.
Si por alguna razón no tenemos acceso a internet,
pues no vamos a descargar las imágenes.
Entonces tenemos que hacer, se pueden hacer referencias también
locales para que jale la imagen de manera local.
Pero ahorita eso lo checo muy bien para ver cuál es la
librería y lo jale.
Pero también les voy a mostrar el cómo subir una imagen al
a través de este archivo, deployar la imagen del Redis.
Y ahorita deployamos la imagen del Python,
subiéndola al Registry General.
Sale.
Entonces.
Así es.
Así es.
Así es como va a suceder.
Punto número uno.
Aquí les mencionaba la parte de los recursos va en esta zona.
Si ahorita si quieren los defino.
No están definidos.
Cuando no los definimos, Kubernetes por sí solo les da
ahí me escuchan.
Ay, quién se es.
Ah, OK.
Perdón.
Ahí me escuchan bien.
Sí.
OK.
Les decía, esta parte de los recursos va en esta zona del
archivo.
Sale.
Cuando no la declaras, Kubernetes le da, digamos,
lo rienda a suelta al acceso a los recursos de tu pod.
Lo que quiere decir que no tiene límites ni todos los recursos
que tengas disponibles los va a usar el pod.
No los usa ni los reserva en el momento en el que lo prende,
sino conforme los va usando.
Sale.
Y si tú quieres definir esta parte de aquí de los recursos,
pues básicamente vamos a poner aquí, por ejemplo,
los recursos.
Vamos a tener la primer parte que van a ser los request.
Esto de los request es como el mínimo, la memoria mínima,
el CPU mínimo que vamos a utilizar.
En este caso, por ejemplo, de memoria.
Vamos a poner 1024.
Vamos a ponerle CPU.
Aquí vamos a poner.
Aquí ya vamos a poner, esto que nos pone, por ejemplo,
particiones pequeñitas de ya sea de memoria o de CPU.
¿A qué me refiero?
Son partes mínimas de la memoria general.
Por ejemplo, ponemos, poner aquí son megabytes.
Vamos a ponerle.
O en el tema del CPU, aquí nos va a dar la capacidad
de poner milésimas.
¿Por qué?
Porque va a partir los CPU disponibles.
Y los vas a poder fraccionar dependiendo el tiempo de
ejecución de tu aplicación.
Puedes definir que use mínimamente un CPU hasta,
no sé, un cuarto de CPU.
¿Y qué significa eso?
Que en tiempo de procesamiento, el tiempo que le va a dedicar
al POD lo va a definir en esa parte o tiempo que le va a
dedicar para darle el procesamiento a lo que esté
sucediendo dentro del POD.
Entonces, aquí nos va a dar la capacidad de partirlo en esas
pedacitos del tiempo de ejecución dentro del CPU.
Por eso ya vamos a empezar a hablar de mili-CPUs.
Y te digo, ya de aquí, pues dependiendo cuántos CPUs
tengas, ya van a empezar a hacerse las particiones o
cuentas, dependiendo de lo que vayas a ocupar dentro de tu
aplicación.
Por ejemplo, te decía, puede ser como con milis o puedes poner
la cantidad directa de un solo CPU.
Entonces, por ejemplo, aquí podemos poner en 2024 o podemos
vamos a usar, este es el mínimo, recordemos que este es el
mínimo, ¿sale?
Entonces, podemos dejar aquí esa cantidad y luego viene la
parte de los límites.
Aquí en el límite va a ser el máximo, ¿sale?
Entonces, por ejemplo, aquí vamos a poner que memoria.
Vamos a usar 2000, 92, por ejemplo.
Aquí vamos a poner CPUs.
Vamos a poner que vamos a usar una unidad completa de CPU.
Lo mínimo es 24 milésimas de un CPU, digamos,
como lo mínimo que necesitamos de procesamiento,
hasta una unidad completa, ¿no?
Un CPU completito.
Aquí lo vamos a ir definiendo en la parte de recursos, ¿sale?
Y con esto hacemos precisamente la definición de recursos que
queremos que tome nuestro container y a su vez,
pues el container dentro del pod va a tener esos recursos
definidos.
Entonces, por ejemplo, si quiero abierto el otro,
para acá, vamos a ver.
Aquí vamos a parar precisamente nuestros pods que tenemos.
Tenemos 2.
¿Qué estamos haciendo aquí?
Pues estamos haciendo que se destruyan,
que no se detengan, sino vamos a destruir nuestros pods.
¿Por qué?
Porque necesitamos que refresquen y tomen las nuevas
características, ¿sale?
Entonces, ahí.
Vamos, por eso, a destruirlos.
OK.
Lo volamos.
Ya se fue el de Redis.
Y lo vamos a volver a aplicar.
OK.
Nos está diciendo que no está.
OK.
OK.
OK.
Estamos usando AppSpec1.
Vamos a ver si como está aquí.
OK.
OK.
OK.
Y vamos a ponerle aquí.
Ahí.
Esto aquí.
Esto aquí.
Y lo de custom.
Aquí.
Este es el valor que vamos a poner aquí.
Vamos a ponerle 150 m.
Miris.
Ponlo aquí.
209 está bien.
Vamos a ver.
Por lo tanto, vamos a explorar.
Está en el aspecto de aspecto de las.
Vamos a bajar el mínimo.
104 request.
150 m.
Y aquí vamos a poner 128.
Vamos a mirar.
Y el CPU lo dejamos en 1.
Lo volvemos a ponerle todos.
OK.
Vamos a darle.
Request resources.
Resources.
Memory.
CPU.
Creates.
CPU.
Cargatino.
AppSpec1.
Está bien.
Es un deployment.
Sí, está bien.
Permítanme un tantito porque hay algo en mí.
El archivito que no está bien.
OK.
Aquí estamos.
Name, image.
Por mi si.
Ajá.
Image, name, resources.
Request.
Ah, ya.
Ya, ya.
Resources y request.
STS.
Ahí está.
Perdonen de nuevo.
OK.
Aquí, como les comentaba, ya definimos los recursos que
vamos a estar usando.
El problema que tenía o el problema que este.
Que me sucedió ahorita fue que me faltaba correctamente
escribir requests.
Básicamente, este es el límite inferior.
Del mínimo necesario para.
De recursos necesarios para levantar nuestro pod.
Y este es el límite o los recursos máximos que va a
estar usando nuestro pod.
Entonces, los vamos a definir aquí en nuestro archivo.
Y como les comentaba, va desde el uso de 64, por ejemplo,
megas.
Que nosotros quisiéramos destinar a nuestro pod,
a nuestro contenedor.
Y pues podemos poner como margen superior la parte de llegar
hasta 128.
En el caso de los CPUs, pues pueden ser,
como decíamos, pedacitos de procesamiento que vamos a
asignar.
O hasta uno completamente.
Ahorita, por ejemplo, vamos a mover un poco la configuración.
Vamos a poner aquí.
Delete.
Para cambiarla.
Y ponemos los cambios.
Vamos a ver.
Vamos a poner aquí.
Que teníamos un CPU.
Y vamos a deployarlo de nuevo.
Ahí ya está deployado.
Y aquí ya está corriendo.
Sale.
Aquí ya ahorita definimos precisamente esa parte de los
recursos para nuestro contenedor.
Perdón, nuevamente, que perdí un poco su atención y que los
aburrí tantito en lo que veía cuál era el problema.
Bueno, finalmente el problema fue el nombre del recurso que
intentamos setear.
Aquí hasta aquí algún comentario o duda.
Disculpenme por los errores ahorita sucedidos.
Vamos para allá.
Vamos para allá.
Perdón que me han quitado un poquito el tiempo los errores
que han sucedido, pero vamos para allá.
Ahorita lo que estamos ejemplificando como tal es el
cómo levantar un POD en general.
Ahorita ya lo que vamos a lo que les voy a mostrar es
precisamente la imagen que estábamos usando ayer.
Ahorita ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
es que ya lo que vamos a hacer es que ya lo que vamos a hacer
Ah no, esa es la de... bueno, también ahorita al final vamos a levantar la de...
la del SonarQube y vamos a salir un bastantito de aquí
y vamos para la de Hola Mundo
Aquí tenemos el Dockerfile
y es esta de aquí
¿sabe? aquí vamos a ver
tenemos aquí
y vamos a decir que vamos a utilizar esta de aquí
bueno, entonces aquí es el puerto 80
si no lo recuerdo
y la vamos a levantar aquí con los 150
ponemos un CPU
una zona
y vamos a poner
PythonMap
vamos a tratar de levantar nuestra
Cdl
Appli
PythonMap
ahí se está creando
vamos a esperar un momento
ahí está, ya corre
el que está pasando por los estados que habíamos mencionado ayer
¿se acuerdan que tiene el contenedor un ciclo?
¿un... este, cómo se llama?
un...
un... este... ciclo que debe cumplir
que en la presentación está hasta cargado
está pasando por el ciclo de vida
del contenedor
entonces cuando te dice que está creándolo
está generando la configuración
este, no lo está construyendo
no lo está compilando
lo que está haciendo es hacer un pull de la imagen
descargándola y preparando los recursos para levantar
¿sale?
eso es lo que está haciendo en ese momento
y pues obviamente se va reflejando en los estados que reporta
el Kubernetes
¿sale?
por ejemplo aquí, en este de aquí
que teníamos ya que nos había dado error
pues aparece como terminando
¿no?
y acá arriba ya dice
ejecutando o running
y durante el tiempo que estuvimos ejecutando
el mismo comando
pues nos decía, oye pues lo estoy creando
lo estoy configurando
y ahora ya lo tengo listo
¿sale?
entonces ahorita ya está
ahorita listo el contenedor de la app
pero resulta que como decíamos
no puedo acceder a él
¿por qué no puedo acceder a él?
porque está en mi nodo de ejecución
y yo estoy posicionado
en el nodo maestro
y cualquiera en el exterior
pues no puede acceder a él
¿sale?
entonces generalmente lo que vamos ahorita a definir
es un modo de acceso
recordemos que de lo que veíamos ahorita de la red
traíamos este
pues un
un lot balance, un proxy
algún tipo de servicio
que nos va a permitir exponer nuestro servicio
hacia la red externa
¿sale?
ahorita no lo tenemos definido
por tanto pues no podemos acceder
a ninguno de estos dos servicios
tenemos que definirlo
¿qué va a pasar?
ah ok, pues vamos también a generar
un archivo
que le llamamos
del servicio
vaya la redundancia
que nos va a permitir
definir
algunos configuraciones
de precisamente
esto de los
del acceso a nuestros pods
de manera, que están de manera interna en este momento
ahorita les voy a pasar esa parte
y se viene para acá
me va a pasar el código
ok
un se copia todo este
así, acá
este pastelino
ok, aquí se los pongo en el chat
y luego venimos aquí al pastelino
y volvemos con
fk
rs
l
y tenemos el sistema de rechazo
y venimos aquí
y le damos un archivo de texto
y vamos a pegarlo
aquí lo vamos a poner
lo vamos a llamar
como
perfecto
service
vale, se acuerdan que el día de ayer
definimos dentro del archivo
de
docker
en la parte de cuando expusimos
la aplicación del sonar cube
pues definimos
algunos temas
como el tipo de puerto, la red que íbamos a usar
bueno, aquí
vamos a generar este archivo
que nos va a permitir generar el tipo
de acceso que va a tener
nuestra aplicación
desde el
nodo de ejecución
aquí por ejemplo
lo que vamos a hacer
ahorita es
generar un
acceso
de tipo
de puerto
para nuestra aplicación python
ahorita vamos a definir aquí
la forma de acceso, la forma en la que vamos a exponer
el pod
mediante la definición de un servicio
de un
de que tipo de servicio va a hacer
ahorita
estamos poniendo como tal
es directamente
un
reverse proxy, digamoslo así
vamos a forwardear el puerto solamente
y
vamos a
ir acotando
la configuración que tenemos aquí
en este archivo
es siempre recomendable
que tengamos en nuestros proyectos
separados estos servicios
para que podamos ajustarlos
sin ningún problema y que no
tengamos este
reparo en hacer las modificaciones
necesarias
es una buena práctica trabajar
un archivo de servicio
y un archivo de deployment
que sería en este caso
este es el de deployment
y este es el que va acotado
directamente al servicio
entonces ahorita
lo que vamos a hacer es
definir
este
este
archivo, vamos a poner
aquí a quien lo vamos a aplicar
todo esto de
los nombres y FQDN
que definimos anteriormente
para nuestra aplicación
se tienen que retomar
porque de esta manera es como
Kubernetes va a
identificar a quien debe de
aplicar esta configuración
entonces por ejemplo aquí vamos
a ajustar los nombres, vamos a poner
que es para la parte de
nuestra aplicación que ya está corriendo
que se llama Python App
vamos a ir ajustando
y que vamos a definir aquí
pues de entrada el tipo
de servicio que va a ser un servicio
por un forwarding de puertos
a quien aplica
la entrada como lo vamos a
llamar a este
a este nuevo servicio
lo vamos a llamar igual que nuestra aplicación
Python App porque va a aplicarse
hacia ese
pod, a ese
este
grupo de elementos que estén dentro
de nuestro pod y
aquí pues si nos pide la referencia
nos dice a que app tú vas a aplicar
esta configuración, ah bueno, es igual
a la que llamamos nosotros Python App
el internamente en los DNS va a
buscar el FQDN y dice
ah si ya encontré esta aplicación
este grupo de pods
perdón este grupo de contenedores
y voy a publicar
lo que se tenga
en este
en este pod lo voy a publicar
mediante un forwarding de
puertos, dale
y aquí
aquí vamos a publicar
el puerto 80
por TCP
aquí no le está gustando esto
porque
que se que la tenemos repetida
y aquí vamos a hacer una diferenciación
aquí este puerto
es el interno
de nuestro contenedor
de nuestro pod
y este es el puerto
externo al que queremos
que se haga el forwarding entonces
aquí este es
el digamos el
el puerto de nuestra
máquina
física del nodo
donde se está ejecutando
el cursor sería
un puerto
de esta máquina
el target port
y el puerto como tal
este sería el de nuestro pod
sale
esto es lo que vamos a exponer con este
con este servicio
sale es lo que vamos
a generar
hasta aquí tienen alguna duda
ok
aquí si ya digamos
no los confundí con el hecho
de generar estos dos archivos
separados
si queda claro para que es cada uno
este de aquí para que sería
Luis
así es
ese es el objetivo de esta parte de aquí
ahora vamos a ver
quizás sea
una validación que tiene
la nueva
pero
entonces vamos
a ver vamos a
deployar nuestro service
que se llama
Python Services
y aquí ya nos dice que fue
creado sale entonces
aquí vamos
a poner también nosotros podemos
buscar que servicios
o que
se han creado
dentro de nuestro cluster de
Kubernetes y por ejemplo
vamos a ver
vamos a decirle que nos traigan los
servicios mediante este comando
dale aquí ahorita podemos por ejemplo
ver que ya generamos nuestro
service
en Python app
y se generó
directamente sobre esta
IP
interna
y ya nos está formuleando el
puerto 80 ahorita vamos a ver
que
tengamos acceso a ella
este de aquí arriba
es el de la el del API
de Kubernetes lo que les decía nosotros
estamos interactando todo el
tiempo con el API de Kubernetes
a través de los comandos
ahora esta es la IP interna
y vamos a ver si
acepta
por el puerto 80
y ponemos
en nuestro navegador
hay tengo corriendo todavía
ayer, puede que estén causando problemas
a ver
voy a eliminar las ejecuciones
de los docker no sé si pueden
checar si todavía también están corriendo
en el suyo porque los dejamos activos
ayer
si lo podemos detener por favor
hasta ahí
porque debemos de mantener que se ejecute
el minikube
hasta ahí
tienen que estar detenidos
hasta ahí ya
vamos igual
ya pudimos
detener los servicios que ya tenemos ayer
con el docker y
tenemos el archivo de configuración
de deployador, cierto?
ok
bien entonces
ok, vamos a ver
QSTN
get
service
aquí
aquí está
minikube
service
terminal
xmini
ok, entonces
el service de
terminal
no lo recuerdo
vamos a ponerlo aquí
aquí tenemos el puerto
vamos a ver si nos responde
vamos a cambiar
lo con
vamos a ver si nos responde
si nos responde
vamos a estar contestando a esta IP
porque
vamos a ver si lo podemos asociar
creando webs
en esta parte de aquí
external
external
ahá
ahá
ah ya
no, no, no
estamos en este punto
estamos confundiendo
este
digamos el funcionamiento
y las herramientas
mira, lo que estás haciendo
tú ahorita es esto
docker ps
y sólo ves el minikube
esto, el engine
de esta parte es la que nos está
ahorita corriendo el minikube
pero no quiere decir
que está tomando
dime, dime
es con
el kubectl
ese sí es específico
y aparte, tú puedes
llamar o revisar a los
services ahorita por ejemplo el que cree
para este console
para el forwarding
ahá
lo llamas con el services
sale
sí, y te muestra
todos, está lista, todos los que están generados
ahá
exactamente
y con esos
ahá
decíamos el nodos es para los nodos
físicos
el pods es para nuestros contenedores
y el services es para la parte
de los servicios que exponemos
de red
ahí es donde
lo que nos va a mostrar cada uno
sale, ahorita
pues vamos a, estoy tratando de
acceder a nuestro servicio que ya está corriendo
y pues resulta que
con las ipes que
tenemos, que nos está dando el minikube
parece que no está contestando, entonces lo que voy a tratar
es de forzar a que
se case con alguna de las ipes que tiene
nuestra máquina base
para que vea si con eso
hace ya el match y nos empieza
a contestar
este nuestro servicio que ya tenemos deployado
aquí en la configuración
que teníamos, pues no lo habíamos
hecho antes, no habíamos definido esta parte
pero nosotros podemos
tener aquí a que ipes
podemos responder
estas ipes
generalmente son las físicas, la de nuestros nodos
y de
esta manera hacemos un match exacto
entre la ip física
y la
el servicio para que podamos
acceder a nuestro pod
entonces ahorita lo voy a casar con esta
resulta que el minikube
tiene su propia
digamos ip y ahorita
vamos a tratar de
ver si
podemos casarlo con esta parte
de la máquina virtual
vale
el docker
es este de aquí
vamos a ver
vamos para allá
zipctl
delete-f
y
python service
tenemos que eliminarlo para
cargar la nueva configuración
y ver si nos muestra ya
lo que buscamos
ok, otra vez es el nombre
de la palabra
general
ok
es con
mayúscula ipes
esta ya está creado
tenemos aquí con
y net service
y aquí ya tiene
ya nos aparece esta información
si lo ven en pantalla
aquí lo que le estamos diciendo
estamos forzando
que se relacione
con esta red
externa y que nos
conteste por estos medios
aquí estamos
haciendo esta
esta
mención
dentro de la configuración
para que directamente se asocie
la red externa
con la interna y sea nuestra puerta de entrada
en teoría ya con
esto deberíamos
ver si
nos contesta
para buscar
cuál es la red del minicube
que nos debería contestar
vamos a ver
vamos a ver
parece que tenemos contesto
vamos a venir aquí
ahí está ya
aquí está
la primera es la del minicube
y esta es la física
y para sacar la ip
del minicube
le vamos a dar
ip
aquí está
este comando
y ya nos retorna la ip que tiene
el minicube
como
digamos que esa es la máquina
como si fuera nuestro nodo
nuestro nodo ejecutor
esa es la ip de nuestro nodo ejecutor
entonces ya
con eso aquí yo defino que
la ip de mi nodo ejecutor es esta
y quiero que se relacione el puerto
con esta ip
y adicional con mi máquina
maestra
eso fue lo que hice en mi máquina física
pero ojo, esto lo puedo hacer
porque estoy en la misma máquina
estás de acuerdo? está corriendo el minicube
y todo el rollo está en la misma máquina
si ya
en un clóset de Kubernetes
la ip
del nodo maestro
no funcionaría porque no tiene comunicación
directa sino nada más sería la del
nodo ejecutor
aquí porque estamos en la misma máquina
y de hecho vamos a probar
si lo hizo bien
si no, pues básicamente
es lo que les digo como es
como si fuera el nodo maestro
el nodo maestro no tiene acceso a esos
recursos de red
sale
ponemos puerto 80
es correcto
no me contesto
no llegamos
no hay rutas definidas hasta esta
red física
ahorita que está fungiendo
como nodo maestro
entonces ahorita la única que nos contesto
es esta que es el
nodo ejecutor
hasta aquí
alguna duda? algún comentario?
nuevamente disculpenme porque
hoy si
no nos salió todo
todo como ayer más
más fluido
así es, si, es correcto
no, este es del
del minikube, mira cuando
le di aquí minikube ip
me dio esta ip
se generó cuando instalamos el minikube
una propia subnet aquí
abajito, de hecho
debe haber generado una tarjeta
de red
que debe ser 192
es esta de aquí
no, aquí
vamos a ver
como te lo ejemplifico
esta
es la
vlan
de minikube
que permite
comunicar la máquina
el contenedor
que ves corriendo aquí
cuando le das el ps, el docker ps
es la que nos, es la vlan que se generó
para que el minikube tenga
contacto con nosotros dentro
de nuestra máquina
minikube máquina base
y luego internamente
cuando nosotros le damos aquí
en los services
internamente
generó otra vlan
que siempre genera
¿cómo se llama?
que siempre genera
10.96
10.96
96.0
0.1
esta
ahorita la voy a quitar aquí del archivo
pero quiero que vean
esta es una vlan interna
de Kubernetes
que siempre se define
de manera default
sale
esta es la vlan interna
de pods a pods
esto es
en dibujitos
sería esta de aquí
la que comunica
esto, sale
esto de aquí
y luego
hay otra
que comunica service
cuando nosotros generamos el service
si te das cuenta
se generó
ah, bueno
vamos a poner aquí, para que veas los pods
en el navegador
en el
en la configuración del service
hasta aquí ya
vamos mejorando
mejor enganchados
a la configuración
voy a ir con esto
si, si claro
ahora que me paso
voy a ir con esto
un minuto que se me da
ah, y ya la ves
y de hecho, déjame quitar aquí
tienes que poner
nada más esta IP
nada más vas a poner esta IP
vale, vale
más dudas, Luis
todo bien
ahá
es correcto
si, ahorita ya
vamos para allá
si
no, no, si tienes que eliminarla
te pongo aquí
el cubeZtl
delete y menos F
tu archivo de computer
el apli
el apli menos F y el nombre de tu archivo de computer
tu navegador ya deberías
llegar por el puerto 80
ya deberías
ver aquí el mensaje este
ahora
ok, ahora vamos a hacer
una modificación
precisamente para ver el tema de
otro tipo de servicios dentro
de la exposición de nuestros
este pods
en este caso, vamos a hacer
vamos a cambiar el número
de replicas, vamos a decir que
vamos a poner 2
en nuestro
cubeZtl
delete
en este caso es
menos F, python
cubeZtl
delete pods
aquí ya no están corriendo
más nuestra aplicación python
si intentamos llegar a ella
nos va a decir que ya
no está corriendo
ok
ahora lo que vamos a hacer es
precisamente
ejecutar nuevamente la configuración
y nos tiene que generar
todos pods
con la misma configuración
y ya instantáneamente
ahí tenemos ya
nuestras dos
instancias
de nuestra aplicación python
las dos
si queremos ver los logs
es cubeZtl
logs y ponemos
el nombre de nuestro pod
ahí están, ya están funcionando
ese es uno
y este es la otra
yo no puse
python
y ahí está ya la otra
ahí ya están corriendo las dos
aplicaciones
ahora venimos acá
vamos a ver qué pasa
ya no nos conecta
¿por qué creen que ya no nos conecta?
ahí está ya
si, es que de entrada
era el HTTPS
estaba llenado por el 443
pero ahorita
lo que está sucediendo es que
solo una de nuestras
de nuestros pods es la que está recibiendo
el mensaje
vamos a ver cual fue la que
el pod que tiene
que finaliza
su nombre con 4s
en este caso aquí
en el mus que tengo
que es este de aquí
no recibió la petición
en teoría
quien recibió la petición fue este pod de acá
vamos a ver
que dicen los logs
está constantemente
está escribiendo por eso
se me hace que no alcanzamos el
vamos a ver el
200
¿sale?
pero ya se casó
con alguno de los dos pods
y solo está contestando uno
¿sale?
aquí lo que necesitamos es que
pues ya levantamos dos
instancias
que las dos tengan la capacidad
de responder
¿sale?
entonces lo que vamos a hacer
es cambiar el tipo de service
voy a quitar esto de aquí
que es la explicación
y vamos a quitar
este tajer port
vamos a dejarlo así
port
de hecho hasta
vamos a quitar
el tajer
excelente
los puertos
este caso sería
external tips
y vamos a agregar
que tipo de servicio
vamos a cambiar ahora que en este caso
va a ser un
load app
para lancer
entonces vamos a eliminar
qstl
minus f
app
python
y lo eliminamos
ya no existe
y ahora vamos a
deployar la nueva
configuración
ya lo han generado
simplemente ya está casada
en el puerto
ahora vamos a probar
que nos conteste
ya nos contesta
vamos a regresar
ya nos está contestando
y ahora si vamos a tratar
de ver
los logs como están
generalmente es el
road robin
el que va
o el que usa por defecto
vamos a ver si podemos
si debemos poder especificarle
la carga
y vamos a ver si podemos
ver un pod más
sobre todo
cuando estamos ahorita que estamos moviendo
configuraciones
porque si tú lo que
quieres
es nada más
detener
esta parte del pod
ya corriendo
sin cambiar ninguna configuración
si está el start stop
pero ahorita que hemos estado modificando
configuraciones por ejemplo que
en vez de una replica ahora sean dos
o modifique
el tipo de servicio que en vez de
un pod for warding sea un load balancer
ahí si tenemos
que eliminar el
tenemos que eliminar
el elemento
y volverlo a cargar
para que refresque las configuraciones
no sé si hay otra
otra duda pregunta
y vamos a
vamos a ver
si aplica
no balancer
llevate a hecho
vamos a poner
un random
a ver si lo reconoce
tengo que
eliminar
ok ya no existe
vamos a
levantarlo de nuevo
vamos a ver si
si es
que es
8
1
servicio