Instalación del nodo master
===========================

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

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

1. **Repositorios**

Instalar el repo de docker en su última versión

.. code-block:: bash

    dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Instalar el repo de kubernetes en su versión 1.36

.. code-block:: bash

    vi /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.37/rpm/repodata/repomd.xml.key
    exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni

2. **Paquetería**

Para instalar los paquetes necesarios para el funcionamiento de Kubernetes, ejecutar el siguiente comando:

.. code-block:: bash

    dnf update -y
    dnf install epel-release wget vim-enhanced socat bind \
    containerd.io kubelet kubeadm kubectl \
    docker-ce --disableexcludes=kubernetes -y

3. **Deshabilitar swap**

Es necesario deshabilitar el swap para que kubelet funcione correctamente.

.. code-block:: bash

    swapoff -a
    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

4. **Deshabilitar SELinux y firewall**

Es necesario deshabilitar SELinux y el firewall para que Kubernetes funcione correctamente.

.. code-block:: bash

    sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
    systemctl stop firewalld
    systemctl disable firewalld

5. **Customizar containerd**

Para que containerd funcione correctamente con Kubernetes, es necesario habilitar el uso de cgroups con systemd y cargar los módulos overlay y br_netfilter.

.. code-block:: bash

    vi /etc/modules-load.d/containerd.conf
        overlay
        br_netfilter

Para generar el archivo de configuración de containerd, ejecutar el siguiente comando:

.. code-block:: bash

    containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
    sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

6. **Configurar sysctl**

Para que Kubernetes funcione correctamente, es necesario habilitar el reenvío de paquetes.

.. code-block:: bash

    vi /etc/sysctl.d/k8s.conf
        net.bridge.bridge-nf-call-iptables  = 1  ??
        net.ipv4.ip_forward                 = 1

7. **Recargar configuración**

Para que los cambios realizados en la configuración del sistema tengan efecto, es necesario recargar la configuración del sistema.

.. code-block:: bash

    modprobe overlay
    modprobe br_netfilter
    sysctl --system

8. **Habilitar e iniciar servicios**

.. code-block:: bash

    systemctl enable --now containerd
    systemctl enable --now kubelet
    systemctl enable --now docker

