Instalar un cluster kubernetes mediante la herramienta kubeadm es relativamente sencillo y está perfectamente documentado en la guía oficial. El problema es que la guía oficial es muy extensa y llena de matices que a la hora de la verdad pueden hacernos tirar atrás nuestras aspiraciones de acabar teniendo un cluster propio con el que evolucionar nuestra infraestructura.

A lo largo de una serie de 4 posts, vamos a ver cómo tener listo un cluster kubernetes formado por 3 nodos con persistencia para nuestros despliegues, con nuestro propio segmento de red y autenticación.

kubernetes network internal

Curso Administración de Kubernetes: De 0 a 100

Este post es parte de uno de los ejercicios del módulo 2 de nuestro curso de Administración de Kubernetes. Conviértete en un experto y aprende a gestionar cargas de trabajo en kubernetes, configurar tu propio clúster kubernetes con buenas prácticas, contruir aplicaciones extensibles, ¡y mucho más!

Voy a echar un vistazo

Preparación

Al finalizar esta serie de posts, tendrás un cluster funcional con las siguientes especificaciones:

NOTA: Por facilidad de despliegue, vamos a desplegar este cluster sobre una máquina virtual Hyper-V desplegada en Azure, pero téngase en cuenta que esta guía es perfectamente válida para entornos full OnPrem.

Configuración del HOST

Como hemos mencionado anteriormente, vamos a desplegar nuestro cluster kubernetes sobre un entorno virtual, que en este caso hemos elegido que sea Windows Server 2019 desplegado sobre entorno Azure.

En nuestro caso hemos optado por montar una Máquina de tipo “Standard D8s v4” (8vCpus, 32GiB), para que dentro de ella montemos nuestro cluster virtualizado y la hemos configurado de la siguiente manera:

  1. Dentro de esta máquina, vamos a instalar 4 máquinas virtuales que harán las funciones de master, node1, node2 y nfs tal como queremos montar, sobre las que instalaremos Ubuntu 20.04
  2. Crearemos un virtual switch al que llamaremos VmNAT de tipo internal.
kubernetes virtual switch manager

3. Asignaremos una nueva red a las máquinas, tomando esta nueva tarjeta.

4. Asignaremos al host, la IP 192.168.100.1/24.

Cómo Instalar Cluster Kubernetes con kubeadm

De esta forma una vez levantadas las máquinas virtuales e instalados los Ubuntu veremos esto:

kubernetes virtual machines

Prerequisitos

Prerequisitos HOST

En este punto vamos a ver los pre-requisitos que necesitaremos cumplir en nuestra máquina de HOST Windows Server 2019 para la instalación.

Chocolatey

Vamos a instalar algún que otro software para ayudarnos en la instalación y para poder automatizar mejor las tareas vamos a optar por Chocolatey.

Aplicaciones de apoyo para el despliegue

Puesto que hemos optado por utilizar un host Windows Server para desplegar y kubernetes es un entorno Linux, para facilidad de manejo podemos optar por:

  1. Instalamos WSL y sobre él una distribución
  2. Instalamos las apps que utilizaremos únicamente

El método A es el más efectivo, pero algo más laborioso puesto que no está bien integrado todavía con Windows Server por lo que utilizaremos el método B

NOTA: Durante el curso, vamos a ver ambos métodos

Una vez instalado chocolatey, vamos a instalar las siguientes herramientas de apoyo

choco install awk

choco install grep

choco install sed

Prerequisitos máquinas del cluster kubernetes

Aquí vamos a ver los pre-requisitos que tendremos que instalar en nuestras máquinas del cluster kubernetes.

SSH

Vamos a hacer uso intensivo de ssh por lo que es buena idea instalar ssh en todos nuestros nodos kubernetes.

sudo apt-get install openssh-server

NOTA: haremos uso de Visual Studio code, es buen momento para que leas sobre “remote development using SSH

IP y Fichero de host

Nuestro cluster kubernetes va a tener IP fija y lo vamos a montar sobre la subred 192.68.100.x/24, de forma que todos nuestros nodos deban tener su propia IP fija y una vez asignadas sus IP, tengan el siguiente contenido en el fichero /etc/hosts

Contenido que debemos tener en /etc/hosts en todos nuestros nodos

# nodes in k8s

192.168.100.1 host

192.168.100.2 master

192.168.100.3 node1

192.168.100.4 node2

192.168.100.5 nfs

NOTA: Cómo asignar ip fija a nuestros nodos Ubuntu

CIDR de nuestros pods

Quiero hacer notar en este momento, que la red donde nuestros servicios y pods van a escuchar y trabajar será totalmente diferente a esta red. Hago mención a esto ahora para que se tenga en cuenta que llegado el momento configuraremos nuestro cluster para trabajar sobre otro segmento de red diferente

Instalación

Una vez cumplidos los prerrequisitos, ya podemos continuar con la instalación de nuestros componentes.

Master Node

Desabilitar swap

Para que funcione correctamente kubernetes, sigue siendo necesario deshabilitar swap:

sudo swapoff -a

sudo nano /etc/fstab

IMPORTANTE: Asegurate que en /etc/fstab está comentada la línea relativa a swapping para que al reiniciar no tengas problemas. Deberías ver algo parecido a esto (comentado)

#/dev/mapper/ubuntu–vg-swap_1 none swap sw 0 0

Instalación de paquetes kubernetes

Ahora es el turno de instalación de los componentes principales:

  • Docker
    • Este se puede obviar ya, puesto que containerd es ya suficiente
  • Kubelet
  • Kubeadm
  • Kubectl

#Add Google’s apt repository gpg key

sudo apt-get install curl

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

#Add the Kubernetes apt repository

sudo bash -c ‘cat </etc/apt/sources.list.d/kubernetes.list

deb https://apt.kubernetes.io/ kubernetes-xenial main

EOF’

# Let ip tables see bridged traffic

# load module

sudo modprobe br_netfilter

# check is on

lsmod | grep br_netfilter

# As a requirement for your Linux Node’s iptables to correctly see bridged traffic, you should ensure net.bridge.bridge-nf-call-iptables is set to 1 in your sysctl config, e.g.

cat <

br_netfilter

EOF

cat <

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sudo sysctl –system

#Update the package list and use apt-cache to inspect versions available in the repository

sudo apt-get update

apt-cache policy kubelet | head -n 20

apt-cache policy docker.io | head -n 20

#Install the required packages, if needed we can request a specific version

sudo apt-get install -y docker.io kubelet kubeadm kubectl

# Mark the following packages not automatically upgradable. This must be done by kubernetes itelf as a protection

sudo apt-mark hold docker.io kubelet kubeadm kubectl

En este punto deberías ver algo así:

kubernetes crash

NOTA: Es normal el crash porque kubernetes todavía no tiene nada en este momento funcionando y el proceso main saldrá con estado 255

Pero, por otro lado, Docker debería estar funcionando

Cómo Instalar Cluster Kubernetes con kubeadm

Configuración de auto-arranque para kubernetes y Docker

El último paso ya es simplemente indicar a los servicios kubelet y Docker que se arranquen siempre con nuestro sistema operativo:

#Ensure both are set to start when the system starts up.

sudo systemctl enable kubelet.service

sudo systemctl enable docker.service

# Setup Docker daemon.

sudo bash -c ‘cat > /etc/docker/daemon.json <<EOF

{

  “exec-opts”: [“native.cgroupdriver=cgroupfs”],

  “log-driver”: “json-file”,

  “log-opts”: {

    “max-size”: “100m”

  },

  “storage-driver”: “overlay2”

}

EOF’

#Restart reload the systemd config and docker

sudo systemctl daemon-reload

sudo systemctl restart docker

Conclusión

En este post hemos comenzado las bases para el despliegue de nuestro propio cluster kubernetes. En un siguiente post vamos a estar hablando de cómo hacer el boostrap al nodo master.

Si quieres avanzar en esta serie de post, clica aquí para ir a la siguiente parte.

¡Has llegado al final... pero no acaba aquí! Tenemos un webinar sobre Kubernetes para ti.

Si quieres seguir formándote en Kubernetes, te invitamos a nuestro webinar "Qué es Kubernetes y Azure Arc", donde comentaremos por qué se ha convertido en tan poco tiempo en el ecosistema de aplicaciones a gran escala.

Quiero asistir al webinar
0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like