Ahora cada vez es más fácil configurar un clúster para instalar Kubernetes desde cero. Existen varias herramientas que con una pequeña preconfiguración instalan todos los componentes necesarios.

Pero hay que tener en cuenta que Kubernetes históricamente fue entregado a la CNCF (Cloud Native Computing Foundation) como tecnología semilla, y puesto que Kubernetes viene sin algunos controladores en los binarios, no estaríamos equivocados si dijéramos que con algún Cloud Provider tendríamos un clúster con mejores prestaciones.

Como regla a seguir, se puede decir que para empezar uno debería utilizar Kubernetes con algún Cloud Provider y a medida que vaya sintiéndose cómodo, puede instalar Kubernetes en máquinas virtuales u on-prem y así tener el control total del clúster.

Pasos para instalar Kubernetes en 5 minutos (1 master – 2 workers)

Paso 0: Material para instalar Kubernetes

Necesitamos tres máquinas (VMs), con Ubuntu o CentOS. Utilizaremos Ubuntu 16.04 para esta guía.

Paso 1: Instalación de paquetes

Instalamos en todas las máquinas los paquetes necesarios para desplegar el plano de control que son:

  • kubeadm
  • kubectl
  • kubelet
  • docker

Nota: La última versión para instalar Kubernetes es la 1.17.2, así que instalaremos esa versión.

$ sudo -i
$ echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' > /etc/apt/sources.list.d/kubernetes.list
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ apt-get install -y kubeadm=1.17.2-00 kubectl=1.17.2-00 kubelet=1.17.2-00
$ curl -L get.docker.com | sh

Paso 2: Instalación

Ahora deberíamos tener las tres máquinas listas para instalar Kubernetes.

En el master, ejecutamos:

$ kubeadm init --pod-network-cidr 192.168.0.0/16

Éste nos devolverá el comando a ejecutar en los worker para que se unan al clúster que en este caso es:

$ kubeadm join 10.132.0.54:6443 --token fst6wr.9u5ge36gpdc3skdw 
    --discovery-token-ca-cert-hash sha256:5355aee5c476e878cc63403635c0175b0d4caa39e7f3d5f027e46caa8141c9c2

Ejecutamos el comando anterior en los dos nodos y ya tendríamos el clúster para instalar Kubernetes. Pero aún hay que hacer un par de cosas más para que sea completamente funcional.

Paso 3: Configuración kubelet

kubelet necesita el archivo de configuración del clúster para poder hacer las llamadas al endpoint correcto; espera que ese archivo esté en el directorio ~/.kube/, y se llame config:

$ mkdir ~/.kube
$ cp /etc/kubernetes/admin.conf ~/.kube/config

Paso 4: Instalación red interna

Y por último instalamos la red interna de Kubernetes para los pods. Hay varias opciones. Utilizaremos `Calico` (https://docs.projectcalico.org)

$ kubectl create -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml

Y… voilà! Ya tenemos un clúster de Kubernetes completamente funcional:

# kubectl get no
NAME              STATUS   ROLES    AGE    VERSION
v-1-17-master     Ready    master   19m    v1.17.2
v-1-17-worker-1   Ready    worker   17m    v1.17.2
v-1-17-worker-2   Ready    worker   17m    v1.17.2

¿Puedo migrar mi plataforma a Kubernetes?

Uno de los mayores obstáculos para que una aplicación corra en Kubernetes es la migración. La mayoría de los usuarios cree que su aplicación no es apta para correr en Kubernetes porque no es una arquitectura de microservicios. Y mientras una aplicación monolítica no se puede convertir en microservicios sin modificar el código sí es posible migrarla a Kubernetes.

Al final, Kubernetes es un orquestador de containers no de microservicios. Sí es cierto que los containers nos permiten gestionar una arquitectura de microservicios de una forma bastante más fácil, pero para muchas empresas, que tienen un monolito, pasar a microservicios no es algo que lo tengan planeado para el próximo Q. Puede que ni siquiera esté en el horizonte de su roadmap.

Ahora, esa lógica de negocio no debería impedir que la empresa integre Kubernetes como plataforma para su aplicación, porque aunque no goce de las ventajas que proporciona una arquitectura de microservicios, sí puede aprovechar de lo que ofrece Kubernetes (health check y auto-healing, service discovery, autoescalado, desacoplamiento de archivos de configuración y secretos para información sensible, seguridad, control total de los despliegues de los containers, etc.).

Como conclusión, toda aplicación puede correr en Kubernetes. De hecho, no existe ningún caso de uso que no encajaría en la filosofía de Kubernetes. Otra cosa es que no compense, por ejemplo, por la simplicidad de la aplicación; con poco tráfico, que no necesita muchas de las prestaciones de Kubernetes.