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?
- Instalación de Kubernetes
- Inicialización del Clúster Kubernetes
- Añadir node01 y node02 al Cluster
- 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
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.
– 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.
– 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
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.
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
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.
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
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’.
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
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
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».
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
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
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
curl node02:30691
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.
En el servidor node02 – http://10.0.15.11:30691/
La instalación y configuración del clúster Kubernetes en CentOS 7 se ha completado con éxito.