Kubernetes es una plataforma gratuita y de código abierto para administrar las aplicaciones en contenedores. Te ayuda a administrar, escalar e implementar automáticamente tus aplicaciones en contenedores en un entorno agrupado. Ha sido desarrollado por Google y mantenido por Cloud Native Computing Foundation. Se está convirtiendo en la plataforma más popular para implementar y administrar software en la nube. Kubernetes usa una arquitectura maestro-trabajador, donde el nodo maestro es responsable de administrar y controlar a todos los trabajadores.
En este tutorial, te mostramos cómo implementar un cluster de Kubernetes de dos nodos en CentOS 8.
Requisitos Previos
- Dos servidores corriendo con CentOS 8 con un mínimo de 4 GB de RAM.
- Una contraseña root configurada en ambos servidores.
Empezamos
Para empezar, deberás configurar la resolución del nombre de host en los nodos maestro y trabajador para que ambos nodos puedan comunicarse entre sí utilizando el nombre de host.
Edita el archivo /etc/hosts en ambos nodos:
# nano /etc/hosts
Añade las siguientes líneas:
your-masternode-ip master
your-workernode-ip worker
Guarda y cierra el archivo cuando hayas terminado.
A continuación, necesitarás deshabilitar la partición Swap para iniciar el cluster de Kubernetes. Puedes deshabilitarlo con el siguiente comando:
# swapoff -a
Instala Docker
Para continuar, necesitarás instalar Docker en ambos servidores. Por defecto, Docker no está incluido en el repositorio por defecto de CentOS 8.
Por ello, añade el repositorio Docker con el siguiente comando:
# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Una vez que el repositorio esté añadido, instala el CE Docker con el siguiente comando:
# dnf install docker-ce --nobest
Después de instalar Docker, inícialo y habilita que se inicie con un reinicio del sistema:
# systemctl enable --now docker
Para continuar, verifica el estado de Docker con el siguiente comando:
# systemctl status docker
Deberías obtener el siguiente resultado:
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2021-06-12 01:37:05 EDT; 10s ago
Docs: https://docs.docker.com
Main PID: 2209 (dockerd)
Tasks: 10
Memory: 47.1M
CGroup: /system.slice/docker.service
└─2209 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Para continuar, comprueba la versión de Docker con el siguiente comando:
# docker --version
Deberías obtener el siguiente resultado:
Docker version 20.10.7, build f0df350
A este punto, Docker ha sido instalado en ambos nodos.
Instala Kubernetes en los Nodos Maestro y Trabajador
Para continuar, necesitarás instalar Kubernetes en ambos servidores.
Primero, crea un repositorio para Kubernetes con el siguiente comando:
# nano /etc/yum.repos.d/kubernetes.repo
Y después añade las siguientes líneas:
[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
exclude=kubelet kubeadm kubectl
Guarda y cierra el archivo y después actualiza el repositorio con el siguiente comando:
# dnf upgrade -y
A continuación, instala todas las herramientas de Kubernetes con el siguiente comando:
# dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
A este punto, Kubernetes ya está instalado en ambos nodos.
Aviso
Si estás usando un servidor de Clouding para seguir este tutorial, esta parte no es necesaria, ya que la imagen de Clouding viene sin el firewall activado por defecto.
Configura el Firewall
A continuación, tendrás que habilitar todos los puertos requeridos a través de firewall en ambos nodos.
Puedes hacerlo con el siguiente comando:
# firewall-cmd --zone=public --permanent --add-port=6443/tcp
# firewall-cmd --zone=public --permanent --add-port=2379-2380/tcp
# firewall-cmd --zone=public --permanent --add-port=10250/tcp
# firewall-cmd --zone=public --permanent --add-port=10251/tcp
# firewall-cmd --zone=public --permanent --add-port=10252/tcp
# firewall-cmd --zone=public --permanent --add-port=10255/tcp
A continuación, carga de nuevo el firewall para aplicar los cambios:
# firewall-cmd --reload
Después, haz la configuración puente con el siguiente comando:
# modprobe br_netfilter
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
Configura el Cluster de Kubernetes en el Nodo Maestro
Primero, configura kubeadm con el siguiente comando:
# kubeadm config images pull
Deberías ver el siguiente resultado:
[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.21.1
[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.21.1
[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.21.1
[config/images] Pulled k8s.gcr.io/kube-proxy:v1.21.1
[config/images] Pulled k8s.gcr.io/pause:3.4.1
[config/images] Pulled k8s.gcr.io/etcd:3.4.13-0
[config/images] Pulled k8s.gcr.io/coredns/coredns:v1.8.0
A continuación, inicializa el cluster de Kubernetes con el siguiente comando:
# kubeadm init --pod-network-cidr=192.168.0.0/16
Deberías obtener el siguiente resultado:
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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 45.58.32.52:6443 --token 95maq6.dbn7ooiz50eol73y \
--discovery-token-ca-cert-hash sha256:d705a3ab93e6cc3c38585bfa33717f6369f99340a09e03a4030aa4479db7ee1e
Anota el token como se muestra en el resultado más arriba. Lo necesitarás para el Nodo Trabajador.
Después, crea el siguiente directorio y archivo de configuración:
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
A continuación, despliega una red pod con el siguiente comando:
# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Espera un tiempo y comprueba tu cluster de Kubernetes con el siguiente comando:
# kubectl get nodes
Deberías ver que tu nodo Maestro está habilitado y corriendo:
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 2m51s v1.21.1
Configura Kubernetes en el Nodo Trabajador
El cluster de Kubernetes tiene uno o más nodos Trabajadores, por lo que necesitarás ir al Nodo Trabajador y unirlo al Nodo Maestro.
Utiliza el siguiente comando para unir el Nodo Trabajador al cluster de Kubernetes.
# kubeadm join [IP_Pública]:6443 --token 95maq6.dbn7ooiz50eol73y --discovery-token-ca-cert-hash sha256:d705a3ab93e6cc3c38585bfa33717f6369f99340a09e03a4030aa4479db7ee1e
Deberías obtener el siguiente resultado:
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Ahora vuelve al Nodo Maestro y verifica el cluster de Kubernetes:
# kubectl get nodes
Deberías ver dos nodos con el estatus "Ready":
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 5m54s v1.21.1
worker Ready 59s v1.21.1
Si quieres resetear toda la configuración y empezar el proceso de nuevo, utiliza el siguiente comando en los Nodos Maestro y Trabajador:
# kubeadm reset
# rm -rf /etc/cni/net.d
Conclusión
¡Felicidades! Has desplegado con éxito el cluster de Kubernetes en CentOS 8.
Ahora, puedes desplegar tus aplicaciones en un entorno agrupado.