Rancher Desktop como alternativa

1 de marzo de 2022

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:

  1. Nos dirigiremos al siguiente enlace: Rancher Desktop
  2. Y nos descargaremos la versión que corresponda con nuestro sistema operativo:
  3. 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:

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.

Sobre el autor: Christian Andrés
Comments
Únete a nosotros