Kubernetes es un sistema open source usado para automatizar la instalación, escalado y manejo de aplicaciones contenidas. Dicho sistema esta preparado para soportar una carga bastante alta (enterprise-ready) y puede ser instalada en varias plataformas.
Normalmente instalar kubernetes puede ser bastante complicado pero en este articulo trato de sintetizar el proceso para que sea rápido, fácil y sin ensuciar nada. Vamos a ello!
Instalar Dependencias
Primero instalamos algunas dependencias:
sudo apt-get update && apt-get install -y apt-transport-https
luego instalamos docker
sudo apt install docker.io
Y luego iniciamos docker:
sudo systemctl start docker sudo systemctl enable docker
Instalando Kubernetes
Primero debemos agregar e instalar la llave del repositorio de paquetes que contiene los componentes necesarios para kubernetes:
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
Luego hay que agregar la url repositorio a nuestro archivo de fuentes (sources.list.d)
deb http://apt.kubernetes.io/ kubernetes-xenial main
Y luego como si nada, instalamos kubernetes y los componentes necesarios:
apt-get update apt-get install -y kubelet kubeadm kubectl kubernetes-cni
Estos pasos deben repetirse en todas las maquinas que se unirán a nuestro cluster de kubernetes.
Antes de continuar hay que definir algunos conceptos básicos acerca de kubernetes, los nodos y los pods
Nodos
Un nodo es una máquina que corre tareas en Kubernetes, anteriormente conocida como un minion. Un nodo puede ser una máquina virtual o una máquina física, según el clúster. Cada nodo contiene los servicios necesarios para ejecutar pods y es administrado por los componentes maestros. Los servicios en un nodo incluyen el tiempo de ejecución del contenedor, kubelet y kube-proxy.
Pods
Un pod es un grupo de uno o más contenedores (como los contenedores Docker), con almacenamiento y redes compartidas, y una especificación sobre cómo ejecutar los contenedores. Los contenidos de un pod siempre se colocan y se programan conjuntamente, y se ejecutan en un contexto compartido. Un pod modela un host lógico específico de la aplicación (contiene uno o más contenedores de aplicaciones que están relativamente estrechamente acoplados) en un mundo anterior a los contenedores, ejecutarse en la misma máquina virtual o física significaría ejecutarse en el mismo host lógico.
Inicializar
Con todo lo instalado, vamos a la máquina que servirá como master de Kubernetes y ejecutamos el comando:
sudo kubeadm init
Cuando esto se complete, se presentará el comando exacto que necesita para unir los nodos al nodo master.
kubeadmin join --token <un_token> <ip_master>:6443
Antes de unirse a un nodo, debemos usar los siguientes comandos (como usuario habitual):
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Despliegue de una red pods
Antes de que algo realmente funcione correctamente se debe implementar una red de pods. Esto se logra instalando la red de pods Flannel (de coreOS) Esto se puede hacer con dos comandos (desde master):
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
Para ver que la red de pods ha sido implementada ejecutamos el siguiente comando:
sudo kubectl get pods —all-namespaces
Unirse a un nodo
Con todo en su lugar, estamos listos para unirnos al nodo maestro. Para hacer esto, vamos a la terminal del nodo y ejecutamos el comando:
sudo kubeadm join --token <token> <ip_master>:6443
para verificar que nos hemos unido exitosamente al cluster, vamos de vuelta al nodo master y ejecutamos:
sudo kubectl get nodes
Y nos mostrara un listado de todos los nodos conectados.
Desplegando un servicio
En este punto, está listo para implementar un servicio en su clúster Kubernetes. Para implementar un servicio nginx por ejemplo (y exponer el servicio en el puerto 80), ejecutamos los siguientes comandos (desde master):
sudo kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster" sudo kubectl expose deployment nginx-app --port=80 --name=nginx-http
Si vamos al nodo y ejecutamos el comando sudo docker ps -a, debería ver el servicio listado.
Y con esto hemos instalado y configurado un cluster de kubernetes de forma correcta.