Este Sitio Web utiliza cookies para mejorar el servicio y proporcionar funcionalidades personalizadas. Al utilizar este sitio, usted acepta este uso. Ver Políticas de Cookies.

Lunes, 08 Junio 2020 08:18

Desplegando Nuestro Cluster Kubernetes Destacado

Escrito por
Valora este artículo
(1 Voto)

Si estamos inmersos en el mundo de los contenedores, comprobaremos que necesitaremos una herramienta capaz de gestionar la multitud de objetos, es el caso del siguiente artículo, explicaré un despliegue base de un cluster kubernetes ON-Premise, una muy buena opción si queremos tener una administración correcta, optimizando las cargas de todos nuestros contenedores.

 Primero empezaré explicando un escenario base de un cluster kubernetes, sobre el tipo de escenario, en nuestro caso seguiremos una implementación On-Premise sobre nuestra infraestructura virtual ya existente, pero cabe decir que podemos realizar una instalación sobre nodos físicos basados en Raspberry PI muy económica.

En nuestro caso, como comentaba anteriormente crearemos 3 Mvs sobre el sistema operativo Linux Centos7, en principio el motivo por el cual son 3 MVs, es por ser una instalación mínima para crear el cluster, pero dependiendo de las cargas de trabajo podemos ir uniendo nodos según los vayamos necesitando.

Un cluster de Kubernetes se compone de 2 roles diferenciados, el denominado Controller ó Master, que es aquella máquina la cual alberga todo el metadato (base de datos) que se va generando, además de la inteligencia del cluster, digamos que esta sería la máquina crítica, es decir para que un cluster de kubernetes esté formado, necesitaremos como mínimo un nodo que haga de Controlador/Master, en este nodo, están en funcionamiento una serie de servicios que son los encargados de "hacer la magia" en nuestro cluster, como es el caso del servicio etcd.

Los nodos encargados de almacenar y ejecutar los contenedores, son los denominados WORKERSNODE, decir, que este tipo de nodos, los podemos crear y destruir "al vuelo", es decir, podría eliminarlos completamente y volverlos a crear sin pérdida de información, ya que como comentaba anteriormente, el nodo encargado de almacenar toda la información (metadato), sería el nodo Controlador/Master.

Os dejo una imagen explicativa:

 

 NUESTRO ESCENARIO

 

 

- CONTROLADOR/MASTER (k8)

CPU: 2 vCPU

RAM: 4 GB 

IP: 192.168.100.80

- WORKERNODES ( wk01 y wk02)

CPU: 2 vCPU

RAM: 4 GB

wk01: 192.68.100.81

wk02: 192.68.100.82

 Sobre recursos de CPU y RAM de los nodos, he utilizado recursos mínimos para este entorno, dependiendo de las cargas de trabajo iremos incrementado estos valores.

 

PREPARACIÓN DE LOS NODOS

Las siguientes tareas se realizarán en los 3 nodos (k8, wk01 y wk02):

  1. Agregar nomenclatura (resolución de nombres) de todos los nodos, se realizará sobre el fichero hosts (/etc/hosts).
vi /etc/hosts

 

      2. Deshabilitaremos SELinux y SWAP.

- Deshabilitando SELinux

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

 - Deshabilitando SWAP

swapoff -a

 Modificaremos (comentamos) el fichero fstab para que al reiniciar los nodos se desactive la partición SWAP de nuestro sistema operativo, para ello editamos el fichero fstab (/etc/fstab) de cada nodo.

vi /etc/fstab

 

     3.- Activamos módulo br_netfilter.

Para el correcto funcionamiento de kubernetes es necesario activar el módulo br_netfilter sobre el kernel de nuestro sistema operativo.Es necesario habilitar este módulo de nuestro kernel para que los pods de kubernetes puedan ser procesados por iptables y puedan comunicarse.

 echo br_netfilter > /etc/modules-load.d/br_netfilter.conf
modprobe br_netfilter

 -Le decimos a Iptables que se comporte en modo bridge.

echo "$(sysctl -w net.bridge.bridge-nf-call-iptables=1)" >> /etc/k8s.conf
sysctl --system

 

      4.-Crearemos los repositorios para docker-ce y kubernetes y así poder realizar la instalación vía YUM.

- Instalando dependencias para docker-ce

yum install -y yum-utils device-mapper-persistent-data lvm2

 - Agregamos el repositorio para docker-ce, lo denominaremos docker-ce.repo

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

- Procedemos a su instalación vía YUM.

yum install -y docker-ce

- Creamos el repositorio para kubernetes, lo denominaremos kubernetes.repo.

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

- Procedemos a su instalación, introducimos el siguiente comando.

yum makecache -y fast
yum install -y kubelet kubeadm kubectl

Después de realizar la instalación procedemos a reiniciar todos los nodos.

Una vez reiniciados los nodos iniciamos los servicios docker y kubelet.

systemctl start docker & systemctl start kubelet

systemctl enable docker & systemctl enable kubelet

        5.-Agregar cgroup-driver.

Debemos asegurarnos que docker-ce y kubernetes usen el mismo cgroup de control, de forma predeterminada docker-ce debería de pertenecer al grupo cgroupfs, para comprobarlo utilizamos el siguiente comando:

docker info | grep -i cgroup

Una vez comprobado, modificamos el cgroup-driver para kubernetes.

sed -i 's/--cgroup-driver=systemd/--cgroup-driver=cgroupfs/g' /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

Reiniciamos el servicio de kubernetes para que agregue los cambios

systemctl daemon-reload & systemctl restart kubelet

¿QUE HEMOS REALIZADO HASTA AHORA?

  1. Hemos configurado los nodos para que se resuelvan por nombre, para que no tengamos problemas de comunicación entre ellos.
  2. Hemos desactivado SELinux y Swap.
  3. Hemos activado el módulo br_netfilter del kernel de nuestro Centos7, para que la comunicación a través de Iptables sea correcta.
  4. Hemos instalado los paquetes correspondientes a docker-ce y kubernestes vía YUM.
  5. Hemos modificado el cgroup-driver para kubernetes.

COMPROBACIONES

Podemos comprobar en todos los nodos que los dos servicios principales estén corriendo sin errores.

systemctl status kubelet & systemctl status docker


 

INICIAMOS EL CLUSTER

 

Una vez comprobado que tengo los 3 nodos funcionando correctamente procedemos a la configuración del nodo controlador/master.

Las siguientes configuración UNICAMENTE las realizaremos sobre el nodo Controlador/master (k8-192.268.100.80).

 

kubeadm init --apiserver-advertise-address=192.168.100.80 --pod-network-cidr=10.244.0.0/16

Básicamente estamos iniciando el APISERVER y estamos creando una red virtual para la comunicación entre los diferentes pods.

Este direccionamiento lo podemos modificar, ya que será un direccionamiento privado para nuestros pods.

Dejamos que se vaya iniciando el cluster y pasados unos segundos, seguimos los pasos que se nos muestran en pantalla

Básicamente nos quedarían realizar 3 pasos:

  1. Crear fichero de configuración para usuario.
  2. Desplegar contenedor flannel network.
  3. Copiar comando para unir nodos al cluster .
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

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

You can now join any number of machines by running the following on each node
as root:

kubeadm join <control-plane-host>:<control-plane-port>--token <token> --discovery-token-ca-cert-hash sha256:<hash>

 Creamos fichero con la configuración del cluster, sobre un usuario distinto de root.

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

 Desplegar contenedor flanned network, básicamente este contenedor será el encargado de las comunicaciones entre el cluster y los diferentes pods.

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

Para comprobar si el despliegue ha sido correcto ejecutamos el siguiente comando

kubectl get pods --all-namespaces

Obtendremos como resultado la siguiente información:

 Una vez comprobado que el contenedor flanned está corriendo (estado running), procedemos a unir el resto de nodos al cluster, para ello nos conectamos a cada nodo (workerNode) y ejecutamos el siguiente comando que nos aparece en la instalación del kubemaster.

kubeadm join <control-plane-host>:<control-plane-port>--token <token> --discovery-token-ca-cert-hash sha256:<hash>

Deberíamos obtener la siguiente imagen con el estado de los 3 nodos de nuestro cluster:

 

CONCLUSIONES

Pues hasta aquí el manual de como crear nuestro propio cluster kubernetes ON-Premise, muy buena opción si queremos iniciarnos en el mundo de los contenedores e incluso disponer de nuestro propio entorno de desarrollo a bajo coste, ya que el consumo de recursos será mínimo en nuestra infraestructura.

 

 


Referencias: https://kubernetes.io/docs

 

Visto 1370 veces Modificado por última vez en Miércoles, 17 Junio 2020 13:00
OZ Jurado

Consultor/Analista en Tecnologías de la Información, entusiasta del mundo de la virtualización. Ayudo a las empresas a mantener sus sistemas de una forma más eficiente.

Artículos relacionados (por etiqueta)

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.

Búsqueda en este Blog

Últimos Posts

  • Desplegando Nuestro Cluster Kubernetes
    Si estamos inmersos en el mundo de los contenedores, comprobaremos que necesitaremos una herramienta capaz de gestionar la multitud de objetos, es el caso del siguiente artículo, explicaré un despliegue base de un cluster kubernetes ON-Premise, una muy buena opción si queremos tener una administración correcta, optimizando las cargas de…
    Escrito el Lunes, 08 Junio 2020 08:18 Visto 1371 veces Leer más...
  • La moda del BigData
    Todos hemos hablado de esta nueva tecnología denominada Big Data, una herramienta imprescindible hoy en día para el análisis de la inmensidad de datos que generamos diariamente, pero es una tecnología que utilizamos correctamente o únicamente la vemos como una moda que sí o sí la tenemos que tener, en…
    Escrito el Miércoles, 24 Julio 2019 09:31 Visto 1531 veces Leer más...
  • Tipos de Implementación en Vmware Vsan
    En el anterior post, nos centramos en una explicación a alto nivel de una infraestructura hiperconvergente como vmware Vsan, donde explicaba las principales características de esta tecnología, en este post, nos centraremos en la parte de tipos de "deployments" o implementaciones en una infraestructura Hiperconvergente como es Vmware Vsan.
    Escrito el Viernes, 19 Julio 2019 10:24 Visto 1543 veces Leer más...
  • Solución HCI con Vmware Vsan
    Vmware Vsan es la solución hiperconvergente impulsada por los señores de vmware, es una evolución hacía el centro de datos definido por software, en este artículo intentaremos explicar las virtudes de esta solución y porqué es un componente fundamental para una solución de infraestructura Hiperconvergente (HCI).
    Escrito el Viernes, 19 Julio 2019 10:23 Visto 1573 veces Leer más...
  • HPE Simplivity solución HCI All-Flash
    Mostramos la solución hiperconvergente presentada por HPE, en este artículo describiremos las virtudes de esta tecnología, donde sus principales puntos fuertes son la GESTIÓN / AUTOMATIZACIÓN Ágiles y un potente SISTEMA DE BACKUP integrado en el sistema, todo ello soportado por la potencia de su tarjeta aceleradora OMNISTACK.
    Escrito el Viernes, 19 Julio 2019 10:22 Visto 1490 veces Leer más...

Sobre este Blog

Este blog intenta ser un punto de encuentro de las diferentes tecnologías que componen el mundo IT

Lo más Vistos

Destacados

Casos de Éxito

© 2021 zfsoluciones.net. All Rights Reserved