Configurar un clúster de Kubernetes en una instancia de AWS EC2 con Ubuntu usando kubeadm

En este artículo, veremos cómo configurar un clúster Kubernetes con 2 nodos trabajadores y 1 nodo maestro en servidores Ubuntu 18.04 LTS. Utilizaremos la herramienta«kubeadm» para configurar el clúster. Kubeadm es una herramienta que proporciona «kubeadm init» y «kubeadmjoin» para crearclústeres Kubernetes. Antes de proceder a la creación del clúster, vamos a entender brevemente algunos términos.

    1. Docker:
      Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones. Docker te permite separar tus aplicaciones de tu infraestructura para que puedas entregar el software rápidamente. Con Docker, puedes gestionar tu infraestructura de la misma manera que gestionas tus aplicaciones.
    2. Imagen:
      Una imagen es una plantilla de sólo lectura con instrucciones para crear un contenedor Docker. A menudo, una imagen se basa en otra imagen, con alguna personalización adicional
    3. Contenedor:
      Un contenedor es una instancia ejecutable de una imagen. Puedes crear, iniciar, detener, mover o eliminar un contenedor mediante la API o la CLI de Docker. Puedes conectar un contenedor a una o varias redes, adjuntarle almacenamiento o incluso crear una nueva imagen basada en su estado actual.
    4. Kubernetes:
      Kubernetes es un sistema de orquestación de contenedores de código abierto para automatizar el despliegue, el escalado y la gestión de aplicaciones.
    5. Nodos:
      Un nodo representa una sola máquina en el clúster.
    6. Pods:
      Un es un grupo de contenedores que se despliegan juntos en el mismo host. Es la unidad básica de ejecución de una aplicación Kubernetes.
    7. Despliegues:
      Un Despliegue ejecuta múltiples réplicas de tu aplicación y reemplaza automáticamente cualquier instancia que falle o deje de responder. Proporciona actualizaciones declarativas para Pods y ReplicaSets.
    8. Conjunto de réplicas:
      Garantiza cuántas réplicas de un pod deben ejecutarse. Puede considerarse como un sustituto del controlador de replicación.
  • Controlador de Replicación:
    Es un supervisor para los pods de larga duración. Lanzará un número determinado de pods llamados réplicas y se asegurará de que sigan funcionando todo el tiempo.
  1. Servicio:
    Es una abstracción que define un conjunto lógico de Pods y una política para acceder a ellos.

El Servidor API, el etcd, el Gestor de Controladores y el Programador, son los componentes del Maestro y Docker, el Servicio Kubelet y el Servicio Proxy Kubernetes son los componentes del Nodo Trabajador. No hablaremos de estos componentes en este documento. Si quieres conocer estos componentes, puedes visitar la página oficial de Kubernetes aquí.

Requisitos previos

  1. 3 Servidores Ubuntu 18.04 con un mínimo de 2 GBs de RAM y 2 CPUs.
  2. Un usuario del sistema con acceso «sudo» en cada servidor.

Qué vamos a hacer

  1. Configurar un clúster de Kubernetes con kubeadm

Configurar un clúster de Kubernetes con kubeadm

Aquí,

Tenemos 3 servidores Ubuntu 18.04 LTS.

Servidor 1= nodo1
Servidor 2= nodo2
Servidor 3= maestro

Antes de proceder a la instalación propiamente dicha, vamos a cambiar el nombre de host de los servidores.

Puedes utilizar los siguientes comandos para establecer un nombre de host en cada servidor. Después de ejecutar los siguientes comandos en cada servidor, vuelve a iniciar sesión en los servidores para que éstos obtengan un nuevo nombre de host.

sudo hostnamectl set-hostname "master"
sudo hostnamectl set-hostname "node1"
sudo hostnamectl set-hostname "node2"

Sigue los pasos que se mencionan a continuación para poner en marcha el clúster Kubernets.

Obtén la clave gpg de Docker (Ejecuta el siguiente comando en todos los nodos):

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Añade el repositorio Docker (ejecutael siguiente comando en todos los nodos):

sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
  stable"

Obtén la clave gpg de Kubernetes (ejecutael siguiente comando en todos los nodos):

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Añade el repositorio de Kubernetes(Ejecutael siguiente comando en Todos los Nodos):

cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

Actualiza tus paquetes(Ejecutael siguiente comando en todos los nodos):

sudo apt-get update

Instala Docker, kubelet, kubeadm y kubectl(Ejecutael siguiente comando en Todos los Nodos):

sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu kubelet=1.15.7-00 kubeadm=1.15.7-00 kubectl=1.15.7-00

Mantenlos en la versión actual(Ejecutael siguiente comando en Todos los Nodos):

sudo apt-mark hold docker-ce kubelet kubeadm kubectl

Añade la regla iptables a sysctl.conf (Ejecutael siguiente comando en Todos los Nodos):

echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf

Habilita iptables inmediatamente(Ejecutael siguiente comando en Todos los Nodos:

sudo sysctl -p

En el Maestro:

Inicializa el clúster (Ejecuta el siguiente comando sólo en el nodo Maestro):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Configurar kubeconfig local(Ejecuta el siguiente comando sólo en el nodo Maestro):

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

Aplica la superposición de red CNI de Flannel(Ejecuta el siguiente comando sólo en el nodo Maestro):

sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

En el Nodo1 y en el Nodo 2:

Une los nodos trabajadores al clúster (Ejecutael siguiente comando sólo en el Nodo1 y el Nodo2):

sudo kubeadm join 172.31.4.161:6443 --token 0y52t6.ffsj8jkjfcl1sq8h \
   --discovery-token-ca-cert-hash sha256:7aa1825042d19d3e567f7e4b447634e942fe9ed7f18f78464a9c05f451551ed5

Verifica que los nodos trabajadores se han unido al clúster con éxitoEjecuta el siguiente comando en el Nodo Maestro):

kubectl get nodes

Conclusión:

En este artículo hemos aprendido a configurar un clúster de Kubernetes con la herramienta kubeadm. Hemos visto la facilidad con la que se puede crear un clúster si no se pierden los pasos y se realiza una instalación adecuada.

También te podría gustar...