Aprovisionamiento de Kubernetes Cluster con Kubespray y Ansible

En este post se explica el paso a paso de la instalacioónn de un master de kubernetes sin cluster que se usa para desarrollo, usa kubespray que ya tiene las herramientas necesarias para el aprovisionamento de un cluster. La idea fue tener en un vps que tengo mi propio kubernetes para poder hacer pruebas personales y aprender mas, ya que trabajo con kubernetes sobre Aws con eks y en GCP, estos cloud providers me abstraen de los servicios del cluster. De esta manera adquiero mas conocimiento sobre esa capa del servicios de cluster que los cloud providers manejan. Y tengo mi cluster para jugar jeje ;).

Requerimientos:

Instalación de ansible:
https://docs.ansible.com/ansible/2.3/intro_installation.html

Python 3
https://realpython.com/installing-python/

Jinja

pip3 install ansible netaddr jinja2

Si tenemos un vps sin ssh key debemos generar una, ya que la usaremos para aprovisionar el cluster de K8s  y que los disitintos nodos del cluster se puedan comunicar entre si.

https://www.ait.com/tech-corner/11483-how-to-setup-ssh-keys-on-a-vpsnbsp

Pasamos a clonar el repositorio de kubespray

git clone https://github.com/kubernetes-incubator/kubespray.git

Una vez que clonamos el repositorio emepezamos a configurar nuestro cluster, primero copia la carpeta de ejemplo a una nueva para nuestro cluster. Destaco que aca no hay un cluster ya que disponemos de una instacia asi que nuestro master es el unico nodo.

cp -R inventory/sample inventory/cluster

Editamos el archivo inventory.ini dentro de la carpeta inventory/cluster de siguiente manera:

 vi inventory/cluster/inventory.ini

Como yo lo aprovisiono con una key ssh deben agregar la linea «ansible_ssh_private_key_file=~/ssh/su-ssh-key»

# ## Configure 'ip' variable to bind kubernetes services on a
# ## different ip than the default iface
# ## We should set etcd_member_name for etcd cluster. The node that is not a etcd member do not need to set the value, or can set the empty string value.
[all]
master-k8s.nuestrodominio.com ansible_host=51.79.55.*** ansible_ssh_private_key_file=~/ssh/cpk8s

# ## configure a bastion host if your nodes are not directly reachable
# bastion ansible_host=x.x.x.x ansible_user=some_user

[kube-master]
master-k8s.nuestrodominio.com

[etcd]
master-k8s.nuestrodominio.com

[kube-node]
master-k8s.nuestrodominio.com

[k8s-cluster:children]
kube-master

Ahora solo tenemos que aprovisionar nuestro «cluster», en realidad es un master/node. No situamos dentro de la carpeta de kubespray y lanzamos el siguiente comando

 ansible-playbook -u root -i inventory/cluster/inventory.ini cluster.yml

Nos conectamos por ssh al cluster y verificamos que todo esta correcamente instalado

Vemos los servicios del cluster

kubectl get svc

Vemos todos los pods en todos los namespaces,

kubectl get pod --all-namespace

Deja un comentario