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.

Categorized in:

Tagged in:

, ,