martes, 14 de enero de 2025

Kubernetes como si le explicarás a tu mascota (o a un niño de cinco años)

Kubernetes explicado en términos sencillos:

"Supongamos que tienes muchos juguetes, como carritos, muñecas y bloques. Si los dejas todos tirados, sería un desastre, ¿verdad? Kubernetes es como un amigo mágico que ayuda a ordenar todos tus juguetes".

  1. Organiza: Te ayuda a poner todos los juguetes en grupos. Por ejemplo, todos los carritos juntos, todas las muñecas en otro lugar. 
  2. Mantiene el orden: Si un juguete se rompe o se pierde, Kubernetes puede sacar otro del mismo tipo para que sigas jugando sin problemas. 
  3. Comparte: Si tienes amigos jugando contigo, Kubernetes asegura que todos tengan los juguetes que necesitan, sin que nadie se quede sin nada.

Así que, Kubernetes es como un super organizador que hace que jugar con muchos juguetes sea divertido y sin enredos

"Piensa en Kubernetes como un gerente muy eficiente de una gran empresa, pero en lugar de empleados, maneja aplicaciones y servicios en computadoras".

Imagina que tienes una tienda con muchas sucursales. Cada sucursal necesita tener ciertos productos (aplicaciones) en stock y funcionando bien:

  1. Organización: Kubernetes se asegura de que cada sucursal tenga los productos correctos. Si una sucursal necesita más de un producto específico, Kubernetes lo distribuye automáticamente.
  2. Mantenimiento: Si algún producto no funciona bien en una sucursal, Kubernetes lo reemplaza o repara sin que tú tengas que intervenir directamente. Así, tus clientes siempre tienen lo que necesitan sin interrupciones. 
  3. Escalabilidad: Si de repente hay mucha demanda en una sucursal, Kubernetes puede aumentar rápidamente el número de productos disponibles sin que tengas que preocuparte por la logística.

En resumen, Kubernetes es un sistema que automatiza la gestión, distribución y mantenimiento de aplicaciones en múltiples computadoras, asegurándose de que todo funcione sin problemas, incluso cuando la demanda cambia.

Relación con Docker

Piensa en Docker y Kubernetes como dos partes de un equipo que trabajan juntas para hacer más fácil la gestión de aplicaciones.

"Docker es como una caja mágica para empacar tus cosas. Imagina que cada aplicación es un juguete y Docker te permite meter cada juguete en su propia caja especial (un contenedor). Esta caja asegura que el juguete funcione de la misma manera, sin importar en qué lugar lo saques. Así, puedes mover tus aplicaciones de una computadora a otra sin problemas".

"Kubernetes, por otro lado, es el gerente que organiza todas esas cajas (contenedores de Docker). Si tienes muchas cajas, Kubernetes se encarga de:

  • Colocarlas en los estantes correctos (las computadoras adecuadas). 
  • Mantenerlas en orden, asegurándose de que siempre haya cajas disponibles si una se rompe o si necesitas más. 
  • Distribuir las cajas según la necesidad, si una área necesita más de cierto tipo de juguete, Kubernetes lo maneja.

En resumen, Docker es para empaquetar y asegurar que tus aplicaciones funcionen de manera consistente, mientras que Kubernetes es para gestionar y escalar esos paquetes de manera eficiente en múltiples computadoras.

Ambos trabajan juntos para que la tecnología detrás de las aplicaciones sea más manejable y menos complicada para ti.

Enlaces:

https://kubernetes.io/es/docs/concepts/overview/what-is-kubernetes/

domingo, 12 de enero de 2025

Docker en palabras sencillas

En pasados post ya hemos hablado algo sobre Docker:

¿Qué es Docker?

Es como una caja que guarda tu aplicación con todo lo necesario para ejecutarse en cualquier otra máquina.

Es decir, es una caja donde se empaquetan las configuraciones, librerías, etc. de tu aplicación (Java, Go, Python, Node JS, etc.). Esta caja podrá ser "abierta" en otra máquina y podrá ejecutar tu aplicación sin tener que instalar y/o configurar absolutamente nada.

Similar a lo que hacíamos anteriormente en una Máquina Virtual. De hecho, Docker las ha venido reemplazando.

Mientras que una Máquina Virtual necesita su propio sistema operativo, tarda minutos en arrancar, consume muchos recursos de memoria RAM y espacio en el disco, Docker es más ligero, consume pocos recursos, arranca en segundos y usa el núcleo del sistema host.

Podríamos decir que: Docker es una especie de Máquina Virtual mejorada.

Preguntando a Grok, nos dice:

"Imagina que Docker es como una caja mágica. Dentro de esa caja, puedes poner todo lo que necesita un programa para funcionar, como sus juguetes y herramientas favoritas".

"Cuando cierras la caja, puedes llevarla a cualquier lugar, y al abrirla, el programa funcionará exactamente igual que en casa, sin importar dónde estés. Así que, con Docker, puedes mover programas de un lugar a otro sin que se rompan o se porten mal".

¿Qué es un contenedor?

Un contenedor en Docker es como una pequeña casa portátil para un programa.

"Imagina que tienes un juguete que necesita una casa especial para vivir. Esta casa tiene todo lo que necesita el juguete: su cama, su comida, y sus juegos".

"Cuando metes el juguete en su casa portátil, puedes llevarlo a cualquier parte, y siempre estará feliz porque tiene todo lo que necesita dentro de su casa. Así es un contenedor; es una casa pequeña y especial donde tu programa vive y puede funcionar en cualquier lugar al que lo lleves".

¿Dónde se guardan los contenedores?

Se almacenan repositorios, ya sean públicos y/o privados.

Un ejemplo es Docker Hub.

Los contenedores y las imágenes se almacenan dentro del sistema de archivos de la máquina virtual que Docker Desktop utiliza.

Se gestionan y organizan gracias al demonio (un programa que se ejecuta en segundo plano) de Docker.

Preguntando a Grok, nos dice:

"Los contenedores se guardan en un lugar especial en tu computadora, que podemos imaginar como un gran parque de juegos".

"Piensa en tu computadora como un parque enorme. En este parque, hay un área especial donde están todas las casitas de juguetes (los contenedores)". "Cuando no estás jugando con una casita, la dejas en este parque, donde está segura y lista para que la uses cuando quieras".

"Así que, los contenedores se guardan en una parte de tu computadora reservada solo para ellos, donde pueden esperar hasta que decidas usarlos de nuevo".

Un contenedor en Docker puede tener:

  • Imagen.
  • Volúmenes.
  •  Redes.

¿Qué es una Imagen?

Una imagen en Docker es como un libro de instrucciones para construir una casa de juguetes.

"Imagina que quieres construir una casa para tu juguete. Antes de empezar, necesitas un libro que te diga exactamente cómo hacer la casa, con todos los detalles: qué materiales usar, cómo poner las paredes, el techo, y hasta dónde irán las ventanas".

Una imagen en Docker es exactamente eso, pero para programas. Es un libro de instrucciones que tiene todo lo necesario para crear una casa portátil (un contenedor) para tu programa. Cada vez que quieras hacer una nueva casa igual, solo sigues las instrucciones del libro, y ¡listo! Tienes una nueva casa para tu programa.

Una imagen, por lo tanto, tendrá el sistema operativo base, las dependencias y todo lo que tu aplicación necesita para trabajar.

Instalando Erlang con Docker

Instalamos una imagen de Erlang con Docker:

$ docker pull erlang

Listamos la imagen descargada:

$ docker images -a

Ejecutamos el REPL de Erlang:

$ docker run -it --rm erlang

Creamos un programa en Erlang.

holamundo.erl

% Hola mundo en Erlang
-module(holamundo).
-export([main/1]).

main(_Args) ->
    io:format("Hola, mundo!!~n").

Para ejecutar un script de Erlang:

$ docker run -it --rm --name erlang-inst1 -v "$PWD":/usr/src/myapp -w /usr/src/myapp erlang escript holamundo.erl

Hemos visto lo que es Docker y un ejemplo de como descargar una imagen (de Erlang).

En próximas entregas continuaremos con el tema.

Enlaces:

https://codemonkeyjunior.wordpress.com/2020/09/06/docker-instalando-imagen-de-php/
https://alquimistadecodigo.blogspot.com/2021/06/docker-aclarando-cosas.html
https://hub.docker.com/_/php
https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine

sábado, 4 de enero de 2025

Las leyes (no escritas) de la programación (2da parte)

Cuando empezamos en este mundo de la programación vamos sin rumbo definido, a ciegas muchas veces. No sabemos qué lenguaje de programación escoger, y por qué.

Nos dirán que Java es el mejor lenguaje. Otros dirán que mejor C#, Python o Javascript. Los más vetustos gritarán a los mil vientos que no hay mejor opción que C.

"En ese aprendes los tipos, las constantes, el control de flujo de un programa y las estructuras de datos. Anda, leé el libro de C".

Lenguajes como Fortran,Oberon, Modula, Lisp, Pascal, Smalltalk, Perl, etc. muy raras veces serán nombrados.

"Si quieres trabajar como programador, aprende COBOL".

"Si quieres trabajar como programador, aprende Java".

"Si quieres trabajar como programador, aprende PHP".

"Si quieres trabajar como programador, aprende Javascript".

El programador que ya trabaja como programador (sic) recordará esos consejos esbozando una sonrisa. Horas y horas practicando la programación en lenguajes que quizás ahora ya no usa. Es más, ya ni se acuerda de como hacer un "Hola, mundo". Consultando foros que ahora ya no existen o que están en desuso. Posteando preguntas en Stackoverflow, y quizás respondiendo algunas para probarse así mismo.

Encontrando tutoriales y libros PDF en sitios donde nadie más ha entrado. Libros de hace más de 5 o 10 años. Tutoriales que pueden o no estar completos.

Consultando Youtube para encontrar información valiosa que vale más que el oro. Frustrándose al tratar de replicar los programas que Hindues hacen en segundos. Tratándo de hallar el código del vídeo tutorial de Java de hace más de 5 o 6 años.

Al final, siempre volverá al principio de todo: a las bases de la programación.

"Si eres capaz de crear un buen algoritmo, entonces su conversión a cualquier lenguaje de programación será más sencillo".

Las bases, siempre fueron las bases. No aprender los 109181818 frameworks que abundan en el mundo de la programación.

"Si conoces las estructuras de control, siempre serás capaz de crear un orden lógico a tu programa".

"Si entiendes las estructuras de datos, te ahorrarás un montón de horas para ordenar tu información".

En conclusión, nunca olvidarse de las bases:

  1. El algoritmo antes que el programa.
  2. Estructuras de control. 
  3. Estructuras de datos.

Enlaces:

https://codemonkeyjunior.blogspot.com/2013/04/las-leyes-no-escritas-de-la-programacion.html