Rancher Desktop como alternativa
Lo primero que se nos viene a la mente cuando hablamos de contenedores puede ser Docker, ya que por excelencia ha sido la plataforma de contenerización de código abierto mas empleada en los ultimos tiempos, pero no significa que sea la única que nos permita la ejecución de contenedores en un entorno de escritorio y desde la comodidad de nuestro hogar.
Docker no es solo un software de código abierto sino que también es una empresa y como tal, ajustándose a la demanda del mercado, muy audazmente ha ido introduciendo pequeños cambios en los terminos de uso y servicio para el software que desarrollan. Estos cambios han ido haciendo que empresas de diversa índole hayan ido buscando alternativas al uso de Docker Desktop o incluso Docker Hub (registro de contenedores de Docker).
Docker Desktop ha cambiado su modelo de negocio para empresas obligándolas a contratar una suscripción por cada usuario que haga uso de sus servicios, es por ello que muchos negocios han tenido que buscar alternativas tales como Podman, Buildah, Containerd, Vagrant, Rancher, LXC y un largo etcétera de soluciones de contenerización.
En este artículo se introduce Rancher Desktop como alternativa a Docker Desktop que, a diferencia de Docker, se puede emplear bajo la licencia Open-Source.
Actualmente Rancher Desktop es una de las mejores aplicaciones de escritorio para el uso y gestion de nuestros contenedores. Con Mac y Linux podemos emplear Lima o QEMU para arrancar el sistema y con Windows se integra casi por completo con WSL2.
Como descargar e instalar Rancher Desktop
Podemos descargar Rancher Desktop directamente desde la web oficial:
- Nos dirigiremos al siguiente enlace: Rancher Desktop
- Y nos descargaremos la versión que corresponda con nuestro sistema operativo:
- Finalmente la instalaremos y arrancaremos la aplicación:
Como empezar con Rancher Desktop
Una vez instalado e iniciado Rancher Destop nos preguntará que container runtime queremos emplear en nuestro sistema, el cual nos da la posibilidad de emplear Containerd o Moby (Dockerd). Una vez elijamos nuestra preferencia, Rancher empezará a descargar las imágenes de Kubernetes necesarias para el clúster local. Este apartado dependerá de la velocidad de red y el rendimiento del que disponga nuestro equipo, aunque las imágenes no suelen exceder 1GB de tamaño entre todas.
En el momento Rancher se encuentre completamente en funcionamiento, podemos empezar a personalizarlo e integrarlo con nuestro sistema. Personalmente estoy empleando Windows, por lo que en este caso lo vamos a integrar con WSL2 y la instancia de Ubuntu disponible en el equipo desde el mismo panel de preferencias:
Con esto dispondremos de una instancia completamente funcional de Kubernetes ejecutándose en nuestro equipo. La primera vez que intentemos ejecutar el comando de kubectl, Rancher nos descargará el binario correspondiente a la versión de Kubernetes que se esté ejecutando en nuestro equipo:
~$ kubectl get pods -A
I0223 13:01:05.683043 118 versioner.go:84] Right kubectl missing, downloading version 1.22.6+k3s1
Downloading https://storage.googleapis.com/kubernetes-release/release/v1.22.6/bin/linux/amd64/kubectl
kubectl1.22.6+k3s1 100% |████████████████████████████████████████| (47/47 MB, 18.436 MB/s) [2s:0s] done.
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system local-path-provisioner-84bb864455-j7cdg 1/1 Running 0 103s
kube-system metrics-server-ff9dbcb6c-qcx8t 1/1 Running 0 103s
kube-system coredns-96cc4f57d-95sn5 1/1 Running 0 103s
kube-system helm-install-traefik-crd--1-2gfvg 0/1 Completed 0 103s
kube-system helm-install-traefik--1-tn8mh 0/1 Completed 2 103s
kube-system svclb-traefik-h94lz 2/2 Running 0 62s
kube-system traefik-55fdc6d984-txxh8 1/1 Running 0 62s
Con esto podemos empezar a desplegar cargas al clúster. Para este momento podemos emplear el deployment de MySQL de ejemplo facilitado en la documentación de Kubernetes. De esta forma podremos comprobar lo siguiente:
- El clúster es capaz de ejecutar contenedores
- El clúster es capaz de crear y exponer servicios
- El clúster es capaz de reclamar espacio de disco para las cargas
- El clúster es capaz de exponer puertos a nuestro equipo
Toda la información se puede encontrar en la documentación oficial: Kubernetes Documentation.
Primero vamos a crear un PVC y un PV:
~$ kubectl apply -f https://k8s.io/examples/application/mysql/mysql-pv.yaml
persistentvolume/mysql-pv-volume created
persistentvolumeclaim/mysql-pv-claim created
Ahora podemos comprobar que están creados y el espacio reclamado:
~$ kubectl get pvc -A
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
default mysql-pv-claim Bound mysql-pv-volume 20Gi RWO manual 75s
~$ kubectl get pv -A
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv-volume 20Gi RWO Retain Bound default/mysql-pv-claim manual 79s
Con esto podemos desplegar ahora el deployment para la instancia de MySQL:
~$ kubectl apply -f https://k8s.io/examples/application/mysql/mysql-deployment.yaml
service/mysql created
deployment.apps/mysql created
Esto nos creará un deployment y un servicio asociado para que podamos acceder a los servicios recién creados:
~$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 112s
~$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 41m
mysql ClusterIP None <none> 3306/TCP 2m14s
Ahora solo queda comprobar que nuestra instancia es completamente funcional:
~$ kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
If you don't see a command prompt, try pressing enter.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql>
¿Pero que hay acerca de conectar a la instancia directamente desde nuestra máquina?
Rancher Desktop nos permite hacer port forwarding de los servicios creados en el clúster directamente desde el panel de preferencias:
Como podremos observar también tenemos la opción de exponer la API de Kubernetes para, por ejemplo, conectarnos a la misma desde Lens u otra herramienta similar. Para la finalidad de este test, se ha conectado al servicio de MySQL con la herramienta MySQL Workbench:
Conclusiones
Con el clúster de Kubernetes funcionando en nuestra máquina, nos ofrece la posibilidad de testear lo que necesitemos o incluso usar diferentes soluciones en nuestra máquina que requieran de ser desplegadas en Kubernetes. Cabe destacar que Rancher Desktop nos viene incluido con Helm, por lo que también es un factor a tener en cuenta si trabajamos con Helm charts y necesitamos hacer alguna prueba.
Entonces, ¿Cuán diferente es de Docker y porque deberíamos de usarlo?
Bien, referente a las diferencias con Docker, nos deja claro que tener un clúster de Kubernetes es un añadido muy importante, porque algo que también nos permite Rancher es emplear el comando docker en caso de que elijamos usar Moby (Dockerd) como CR (Container Runtime); pero también es una desventaja, ya que no hay forma de desactivar el clúster de Kubernetes y son recursos que se están empleando de forma constante en nuestro equipo.
Así que el uso de Rancher Desktop queda completamente a nuestro interés, facilidades y necesidades. En Mac y Linux, por ejemplo, podemos emplear Colima para hacer uso de Docker sin necesidad de aceptar las cláusulas de Docker Desktop, en Windows podemos instalar Docker directamente en nuestra instancia de WSL2, ya que el backend permite hacer port forwarding empleando la misma red de WSL2. Sin embargo, usar Rancher Desktop nos deja opciones como no emplear Moby como CR, elegir qué servicios queremos tener expuestos, disponer de Docker, Kubernetes y Helm en un mismo lugar o incluso poder hacer uso de versiones concretas de Kubernetes para hacer pruebas de usabilidad, actualización, tests de compatibilidad y mucho más.