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