Iniciar el cluster
===========================

Documento para iniciar un cluster kubernetes con tres nodos, un master y dos workers.

Pasos a seguir una vez instalado y actualizado el sistema operativo.

1. **Inicializar el cluster**

Se descargan las imágenes necesarias para el cluster y se inicializa el nodo master.
Las direcciones IP y el nombre del nodo master deben ser cambiadas según la configuración de cada cluster.

.. code-block:: bash

    kubeadm config images pull
    kubeadm init --control-plane-endpoint=master --apiserver-advertise-address=172.16.5.11  --pod-network-cidr=172.16.5.0/27

Es aconsejable guardar el token que se genera al final de la ejecución del comando anterior, ya que será necesario para unir los nodos worker al cluster.
La salida del comando anterior también muestra un comando para unir los nodos worker al cluster, que debe ser ejecutado en cada nodo worker.

Ejemplo de salida del comando anterior:

.. code-block:: bash

    Your Kubernetes control-plane has initialized successfully!

    To start using your cluster, you need to run the following as a regular user:

      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config

    Alternatively, if you are the root user, you can run:

      export KUBECONFIG=/etc/kubernetes/admin.conf

    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/

    You can now join any number of control-plane nodes by copying certificate authorities
    and service account keys on each node and then running the following as root:

      kubeadm join master.iglu.net:6443 --token 1p5izb.4irexouwmnl9nrkv \
            --discovery-token-ca-cert-hash sha256:4ae3a28612046cdd15706e9e9f818311db4cfc14ef3daf3ba76a3a4df66b0712 \
            --control-plane

    Then you can join any number of worker nodes by running the following on each as root:

    kubeadm join master.iglu.net:6443 --token 1p5izb.4irexouwmnl9nrkv \
            --discovery-token-ca-cert-hash sha256:4ae3a28612046cdd15706e9e9f818311db4cfc14ef3daf3ba76a3a4df66b0712


2. **Configurar la red de pods**

Se configura la red de pods para que los nodos puedan comunicarse entre sí. Se recomienda usar Calico como plugin de red.

..code-block:: bash

    kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.32.2/manifests/calico.yaml

3. **Credenciales de acceso al cluster**

Se copian las credenciales de acceso al cluster para poder usar kubectl desde el nodo master.

.. code-block:: bash

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

4. **Reinicio del cluster**

En caso de querer reiniciar el cluster, se deben eliminar los archivos de configuración y reiniciar los servicios de kubelet y containerd.

.. code-block:: bash

    kubeadm reset --force
    systemctl stop kubelet
    rm -fr /etc/kubernetes/
    rm -fr ~/.kube/
    rm -fr /var/lib/etcd
    rm -rf /var/lib/cni/
