Cómo instalar un clúster Docker de Kubernetes en CentOS 7

Kubernetes es una plataforma de código abierto para gestionar aplicaciones en contenedores desarrollada por Google. Te permite gestionar, escalar y desplegar automáticamente tus aplicaciones en contenedores en el entorno de clúster. Con Kubernetes, podemos orquestar nuestros contenedores en múltiples hosts, escalar las aplicaciones en contenedores con todos los recursos sobre la marcha, y tener un entorno de gestión de contenedores centralizado.

En este tutorial, te mostraré paso a paso cómo instalar y configurar Kubernetes en CentOS 7. Utilizaremos 1 servidor ‘k8s-master’ como maestro de Kubernetes, y 2 servidores como nodo de Kubernetes, ‘node01’ y ‘node02’.

Requisitos previos

  • 3 servidores CentOS 7
    • 10.0.15.10 k8s-master
    • 10.0.15.21 nodo01
    • 10.0.15.22 nodo02
  • Privilegios de root

¿Qué vamos a hacer?

  1. Instalación de Kubernetes
  2. Inicialización del Clúster Kubernetes
  3. Añadir node01 y node02 al Cluster
  4. Pruebas – Creación del primer pod

Paso 1 – Instalación de Kubernetes

En este primer paso, prepararemos los 3 servidores para la instalación de Kubernetes, por lo que ejecutaremos todos los comandos en los servidores maestro y de nodo.

Prepararemos todos los servidores para la instalación de Kubernetes cambiando la configuración existente en los servidores, y también instalando algunos paquetes, incluyendo docker-ce y el propio kubernetes.

– Configurar los Hosts

Edita el archivo de hosts en todos los servidores utilizando eleditor vim.

vim /etc/hosts

Pega la lista de hosts que aparece a continuación.

10.0.15.10      k8s-master
10.0.15.21      node01
10.0.15.22      node02

Guarda y sal.

– Desactivar SELinux

En este tutorial, no vamos a hablar de la configuración de SELinux para Docker, así que lo desactivaremos.

Ejecuta el siguiente comando para desactivar SELinux.

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

– Habilitar el módulo del núcleo br_netfilter

El módulo br_netfilter es necesario para la instalación de kubernetes. Habilita este módulo del núcleo para que los paquetes que atraviesan el puente sean procesados por iptables para su filtrado y para el reenvío de puertos, y los pods de kubernetes en el clúster puedan comunicarse entre sí.

Ejecuta el siguiente comando para activar el módulo del núcleo br_netfilter.

modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

– Desactivar SWAP

Desactiva el SWAP para la instalación de kubernetes ejecutando los siguientes comandos.

swapoff -a

Desactivar el intercambio

Y luego edita el archivo ‘/etc/fstab’.

vim /etc/fstab

Comenta el UUID de la línea de intercambio como se indica a continuación.

Editar /etc/fstab

– Instala Docker CE

Instala la última versión de Docker-ce desde el repositorio de docker.

Instala las dependencias de los paquetes para docker-ce.

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

Añade el repositorio docker al sistema e instala docker-ce con el comando yum.

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

Espera a que se instale docker-ce.

Instalar Docker

– Instala Kubernetes

Añade el repositorio de kubernetes al sistema centos 7 ejecutando el siguiente comando.

cat <<EOF > /etc/yum.repos.d/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
EOF

Ahora instala los paquetes de kubernetes kubeadm, kubelet y kubectl utilizando el comando yum siguiente.

yum install -y kubelet kubeadm kubectl

Instalar Kubernetes

Una vez completada la instalación, reinicia todos esos servidores.

sudo reboot

Vuelve a entrar en el servidor e inicia los servicios, docker y kubelet.

systemctl start docker && systemctl enable docker
systemctl start kubelet && systemctl enable kubelet

– Cambia el cgroup-driver

Tenemos que asegurarnos de que docker-ce y kubernetes utilizan el mismo ‘cgroup’.

Comprueba el cgroup de docker utilizando el comando docker info.

docker info | grep -i cgroup

Y verás que docker está utilizando‘cgroupfs‘ como cgroup-driver.

Ahora ejecuta el siguiente comando para cambiar el cgroup-driver de kuberetes a ‘cgroupfs’.

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

Recarga el sistema systemd y reinicia el servicio kubelet.

systemctl daemon-reload
systemctl restart kubelet

Ahora estamos listos para configurar el clúster de Kubernetes.

Configurar el clúster de Kubernetes

Paso 2 – Inicialización del Clúster Kubernetes

En este paso, inicializaremos la configuración del clúster maestro de kubernetes.

Mueve el shell al servidor maestro ‘k8s-master’ y ejecuta el siguiente comando para configurar el maestro de kubernetes.

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

Inicialización del clúster Kubernetes

Nota:

–apiserver-advertise-address = determina la dirección IP en la que Kubernetes debe anunciar su servidor API.

–pod-network-cidr = especifica el rango de direcciones IP para la red del pod. Nosotros estamos utilizando la red virtual «flannel». Si quieres utilizar otra red de pods, como weave-net o calico, cambia el rango de direcciones IP.

Cuando se complete la inicialización de Kubernetes, obtendrás el resultado que se muestra a continuación.

La inicialización de Kubernetes se ha completado

Nota:

Copia el comando‘kubeadm join … … …‘ en tu editor de texto. El comando se utilizará para registrar nuevos nodos en el clúster de Kubernetes.

Ahora, para utilizar Kubernetes, necesitamos ejecutar algunos comandos como en el resultado.

Crea un nuevo directorio de configuración ‘.kube’ y copia la configuración ‘admin.conf’.

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

A continuación, despliega la red flannel en el clúster kubernetes mediante el comando kubectl.

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

Únete a Kubernetes

La red flannel se ha desplegado en el clúster Kubernetes.

Espera un minuto y luego comprueba el nodo y los pods de kubernetes utilizando los siguientes comandos.

kubectl get nodes
kubectl get pods --all-namespaces

Y obtendrás que el nodo «k8s-master» se está ejecutando como clúster «maestro» con el estado «listo», y obtendrás todos los pods necesarios para el clúster, incluido el «kube-flannel-ds» para la configuración del pod de red.

Asegúrate de que el estado de todos los pods de kube-system es ‘running’.

Comprobar el nodo Kubernetes

La inicialización y configuración del maestro del clúster Kubernetes se ha completado.

Paso 3 – Añadir el nodo01 y el nodo02 al Cluster

En este paso, añadiremos el nodo01 y el nodo02 para que se unan al clúster ‘k8s’.

Conéctate al servidor node01 y ejecuta el comando kubeadm join como hemos copiado en la parte superior.

kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

Añadir el nodo01 y el nodo02 al Cluster

Conéctate al servidor del nodo02 y ejecuta el comando kubeadm join como hemos copiado en la parte superior.

kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

Conecta los nodos Docker

Espera unos minutos y vuelve al servidor del clúster maestro ‘k8s-master’ y comprueba los nodos y pods con el siguiente comando.

kubectl get nodes
kubectl get pods --all-namespaces

Ahora obtendrás que el nodo01 y el nodo02 se han añadido al clúster con el estado «listo».

comando kubctl

El nodo01 y el nodo02 han sido añadidos al cluster de kubernetes.

Paso 4 – Prueba de creación del primer pod

En este paso, haremos una prueba desplegando el pod de Nginx en el cluster de kubernetes. Un pod es un grupo de uno o más contenedores con almacenamiento y red compartidos que se ejecuta bajo Kubernetes. Un Pod contiene uno o más contenedores, como el contenedor Docker.

Accede al servidor ‘k8s-master’ y crea un nuevo despliegue llamado ‘nginx’ utilizando el comando kubectl.

kubectl create deployment nginx --image=nginx

Para ver los detalles de la sepcificación del despliegue ‘nginx’, ejecuta el siguiente comando.

kubectl describe deployment nginx

Y obtendrás la especificación de despliegue del pod nginx.

A continuación, expondremos el pod nginx accesible a través de Internet. Y para ello necesitamos crear un nuevo servicio NodePort.

Ejecuta el siguiente comando kubectl.

kubectl create service nodeport nginx --tcp=80:80

Crear la primera vaina

Asegúrate de que no hay ningún error. Ahora comprueba el nodeport y la IP del servicio nginx con el comando kubectl que aparece a continuación.

kubectl get pods
kubectl get svc

Obtener lista de vainas

Ahora obtendrás que el pod nginx se está ejecutando bajo la dirección IP del cluster ‘10.160.60.38’ puerto 80, y la dirección IP principal del nodo ‘10.0.15.x’ en el puerto ‘30691’.

Desde el servidor ‘k8s-master’ ejecuta el siguiente comando curl.

curl node01:30691

Prueba con el rizo

curl node02:30691

Prueba el nodo 2 con curl

El Pod Nginx se ha desplegado ahora en el clúster Kubernetes y es accesible a través de Internet.

Ahora accede desde el navegador web.

http://10.0.15.10:30691/

Y obtendrás la página por defecto de Nginx.

Página en el nodo 1

En el servidor node02 – http://10.0.15.11:30691/

Página en el nodo 2

La instalación y configuración del clúster Kubernetes en CentOS 7 se ha completado con éxito.

Referencia

También te podría gustar...