Servicios Gestionados
Kubernetes Instalación y Configuración
Junio de 2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
HOJA DE CONTROL
Área responsable de la elaboración del procedimiento: Departamento de Servicios Gestionados
Versión Preparado por Revisado por Aprobado por
1.0
Fecha:09/05/2020 Fecha: Fecha: Nombre: Aitor Nombre: Nombre: Firma: Firma: Firma:
1.2
Fecha: 01/07/2020 Fecha: Fecha: Nombre: Javier Ibañez Nombre: Nombre: Firma: Firma: Firma:
Fecha: Fecha: Fecha:Nombre: Nombre: Nombre:Firma: Firma: Firma:
Fecha: Fecha: Fecha:Nombre: Nombre: Nombre:Firma: Firma: Firma:
Fecha: Fecha: Fecha:Nombre: Nombre: Nombre:Firma: Firma: Firma:
Edición Partes que cambian Descripción del cambio Fecha del cambio1.0 Edición inicial
1.2 Parte Instalación Se suprime 01/07/2020
2
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
3
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
Índice
1 INTRODUCCIÓN................................................................................................................................................ 41.1. OBJETIVO DEL DOCUMENTO........................................................................................................................... 4
2 INSTALACIÓN DE KUBERNETES....................................................................................................................51.2. INSTALACIÓN KUBERNETES............................................................................................................................ 5
3 CONFIGURACIÓN DE KUBERNETES............................................................................................................103.1. CONFIGURACIÓN DE KUBERNETES...............................................................................................................10
4 UNIÓN DE LOS NODOS.................................................................................................................................. 154.1. UNIÓN DE LOS NODOS................................................................................................................................. 15
5 CREACIÓN DE LOS PODS............................................................................................................................. 185.1. CREACIÓN DE LOS PODS.............................................................................................................................. 18
6 INSTALACIÓN Y CONFIGURACIÓN DE APACHE EN UN POD....................................................................216.1. INSTALACIÓN APACHE EN UN POD................................................................................................................21
7 INSTALACIÓN Y CONFIGURACIÓN DE NAGIOS EN UN POD.....................................................................257.1. INSTALACIÓN Y CONFIGURACIÓN DE NAGIOS.................................................................................................25
8 INSTALACIÓN Y CONFIGURACIÓN DE MARIADB EN UN POD..................................................................308.1. INSTALACIÓN Y CONFIGURACIÓN DE MARIADB..............................................................................................30
4
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
1 INTRODUCCIÓN
1.1. Objetivo del documentoEl objetivo del documento es mostrar la instalación de un cluster kubernetes así como aplicativos en contenedores.
El clúster constará de 3 nodos, en las cuales se instalará mediante contenedores:
Nagios Apache Mariadb
5
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
2 Instalación de Kubernetes
1.2. Instalación KubernetesLos siguientes pasos se realizarán en los 3 nodos.
El primer paso será editar el fichero hosts para que puedan comunicarse entre ellos mediante dns.
vi /etc/hosts
Comprobamos que funcione correctamente con un ping al nombre de los equipos que hemos dado anteriormente.
6
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
Ahora tenemos que deshabilitar Selinux y la memoria swap
Para deshabilitar Selinux:
vi /etc/selinux/config
Ahora con la swap
swapoff –a
vi /etc/fstab
*(Se comenta la línea referente a la swap)
7
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
Habilitamos el módulo br_netfilter
modprobe br_netfilter
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
echo "0" > /proc/sys/net/bridge/bridge-nf-call-ip6tables
Preparamos el sistema operativo para la implantación con los siguientes paquetes:
yum install -y yum-utils device-mapper-persistent-data lvm2
Añadimos el repositorio de Docker-CE
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
Añadimos el repositorio de Kubernetes:
Para ello crearemos un archivo en /etc/yum.repos.d/kubernetes.repo
8
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
vi /etc/yum.repos.d/kubernetes.repo
Añadimos las siguientes líneas al archivo
Ahora vamos a instalar Kubernetes
yum install -y kubelet kubeadm kubectl
Una vez llegamos a este punto ya estaría instalado kubernetes a partir de aquí procederemos a configurarlo.
9
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
3 Configuración de Kubernetes.
2.
3.
3.1. Configuración de Kubernetes
Lo primero que vamos a hacer es arrancar docker.
systemctl start docker | systemctl enable docker
Una vez arrancado comprobaremos en que cgroup se encuentra.
docker info | grep -i cgroup
Como podemos ver se encuentra en el grupo cgroupfs
Por lo que añadiremos a Kubernetes al cgroup
sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
(Dependiendo de la versión de Kubernetes el directorio puede cambiar a:
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf)
Ahora vamos a reiniciar el servicio kubelet
systemctl daemon-reload | systemctl restart kubelet | systemctl enable kubelet
10
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
Ahora procederemos a realizar exactamente los mismos pasos realizados en los puntos 4 y 5 con los otros dos nodos.
Antes de volver al servidor maestro y vamos a configurar el firewall de los nodos:
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd –-reload
Una vez realizado vamos a volver a el servidor maestro
Configuramos el firewall agregando los puertos por los que va a funcionar docker y kubernetes
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
11
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd –-reload
E iniciaremos el servicio kubeadm (Al final ponemos la ip de nuestra red)
kubeadm init --pod-network-cidr=10.244.0.0/16
12
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
(No tocar la red, es la red en la que trabaja flannel, si se cambia no funciona nada)
Una vez ejecutado el comando si no nos ha dado ningún problema nos dará un token para unir los nodos
Antes de unir los nodos tenemos que terminar de configurar kubernetes para ello.
Si kubernetes lo vamos a lanzar como root sólo debemos ejecutar el siguiente comando:
export KUBECONFIG=/etc/kubernetes/admin.conf
Si lo vamos a lanzar como otro usuario deberemos de crear un directorio para la configuración, copiar los archivos necesarios y darle permisos sobre dichos archivos
mkdir -p $HOME/.kube
13
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Id_u = id de usuario, id_g id del grupo. Ejemplo: chown root:root $HOME/admin.conf
En los otros nodos tenemos que crear también el usuario que utilicemos junto al directorio.kube
A continuación, copiaremos el archivo de configuración el resto de nodos
14
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
scp -p $HOME/.kube/config usuario@IP:/tmp
Ahora en los esclavos moveremos el archivo config a .kube
mv /tmp/config $HOME/.kube
15
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
4 Unión de los nodos.
4.
4.1. Unión de los nodos
Vamos a unir los nodos al cluster para ello necesitaremos saber el token y el hash proporcionado en el punto 5
Ahora solo tenemos que ir a los nodos 2 y 3 y poner el siguiente comando:
kubeadm join ipmanager:6443 --token TOKEN --discovery-token-ca-cert-hash MIDISCOVERY_TOKEN
(Donde pone:
Ipmanager: la ip del servidor
Token: el token que tenemos
midicovery_token: el hash proporcionado)
NODO2
16
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
NODO3
Reiniciamos la máquina y haremos una comprobación de que todo funcione correctamente con
kubectl get nodes
Ahora necesitamos definir el modelo de red que necesitamos. En nuestro caso vamos a usar flannel.
Usaremos el siguiente comando para instalar flannel.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-
17
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
flannel.yml
18
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
5 Creación de los pods
5.
5.1. Creación de los pods.Para la creación de los conteiner necesitaremos usar nginx. Lo que vamos a hacer para la creación de dichos pods es utilizar la configuración de un archivo yaml.
Debemos crear un archivo llamado: nginx.yaml, con el siguiente contenido:
apiVersion: v1kind: Podmetadata: name: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html # These containers are run during pod initialization initContainers: - name: install image: busybox command: - wget - "-O" - "/work-dir/index.html" - http://kubernetes.io volumeMounts: - name: workdir mountPath: "/work-dir" dnsPolicy: Default volumes: - name: workdir
19
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
emptyDir: {}
Para poder crear el pod con la configuración anterior usaremos el comando:
kubectl create -f nginx.yaml
Para conectarnos a nuestro pod usaremos el comando:
kubectl exec -it nginx -- /bin/bash
Para crear los otros dos containers será tan fácil como cambiar el nombre del archivo nginx.yaml ya creado anteriormente.
Solo tenemos que cambiar la línea en metadata, name:
Ahora actualizaremos los pods para dejarlo funcionando correctamente
20
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
apt-get install net-tools
apt-get install vim
apt-get install iputils-ping
apt-get update
Comandos útiles:
Obtener información más detallada del pod:
kubectl describe pod nginx
Obtener los logs del pod
kubectl logs nginx
21
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
6 Instalación y configuración de apache en un pod.
6.
6.1. Instalación Apache en un Pod
Cremos un nuevo pod con esta configuración:
apiVersion: v1kind: Podmetadata: name: apachespec: containers: - name: nginx image: nginx ports: - containerPort: 8080 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html # These containers are run during pod initialization initContainers: - name: install image: busybox command: - wget - "-O" - "/work-dir/index.html" - http://kubernetes.io volumeMounts: - name: workdir mountPath: "/work-dir" dnsPolicy: Default volumes: - name: workdir emptyDir: {}
22
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
(No se puede usar el puerto 80 por que lo usa nginx)
Lo creamos:
kubectl create -f nginx.yaml
Accedemos al pod:
kubectl exec -it apache -- /bin/bash
Este paso es muy sencillo, solo tenemos que instalar apache:
apt-get install apache2
Una vez instalado iremos a /etc/apache2/ports.conf (por qué el puerto 80 está siendo usado por el contenedor nginx)
Y cambiaremos el puerto al 8080
vi /etc/apache2/ports.conf
Ahora solo nos queda iniciarlo
service apache2 start
23
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
Para hacer la comprobación de que funciona correctamente haremos un exit y usaremos el comando curl con la IP de nuestro pod y el puerto
curl 192.168.185.15:8080
Debería devolver lo siguiente:
(para saber la ip del pod kubectl get pod -o wide)
Si comprobamos la dirección podemos ver cómo funciona correctamente
(Se ha configurado una 4º maquina con interfaz gráfica para hacer la comprobación)
24
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
25
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
7 Instalación y configuración de Nagios en un pod
7.
7.1. Instalación y configuración de NagiosCremos un nuevo pod con esta configuración:
apiVersion: v1kind: Podmetadata: name: nagiosspec: containers: - name: nginx image: nginx ports: - containerPort: 8080 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html # These containers are run during pod initialization initContainers: - name: install image: busybox command: - wget - "-O" - "/work-dir/index.html" - http://kubernetes.io volumeMounts: - name: workdir mountPath: "/work-dir" dnsPolicy: Default volumes: - name: workdir emptyDir: {}
26
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
(No se puede usar el puerto 80 por que lo usa nginx)
Lo creamos:
kubectl create -f nginx.yaml
Accedemos al pod:
kubectl exec -it nagios -- /bin/bash
Debemos descargar una serie de paquetes y librerías:
apt update
apt install -y autoconf gcc libc6 make wget
apt install -y unzip apache2 apache2-utils php libgd-dev
Cambiamos el puerto por el que trabaja apache:
vi /etc/apache2/ports.conf
Nos movemos a /tmp y descargamos los repositorios oficiales:
cd /tmp
wget -O nagioscore.tar.gz https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.1.tar.gz
tar xvf nagioscore.tar.gz
27
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
Compilamos el código:
cd /tmp/nagioscore-nagios-4.4.1/
./configure --with-httpd-conf=/etc/apache2/sites-enabled
make all
Creamos los usuarios y grupos
make install-groups-users
usermod -a -G nagios www-data
Instalamos los binarios, CGI y ficheros HTML
make install
Instalamos el servicio:
make install-daemoninit
make install-commandmode
make install-config
Instalamos los ficheros de configuración del servidor web Apache
make install-webconf
a2enmod rewrite
a2enmod cgi
Creamos el usuario nagiosadmin:
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Reiniciamos apache y encendemos nagios
28
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
service apache2 restart
service nagios start
Ahora para hacer la prueba y comprobar el funcionamiento volveremos a usar el comando curl para comprobarlo.
curl http://192.168.185.16:8080/nagios
(ip del pod:puerto/carpeta)
Si comprobamos la dirección podemos ver cómo funciona correctamente
29
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
30
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
8 Instalación y configuración de MariaDB en un pod.
8.
8.1. Instalación y configuración de MariaDB.
Cremos un nuevo pod con esta configuración:
apiVersion: v1kind: Podmetadata: name: mariadbspec: containers: - name: nginx image: nginx ports: - containerPort: 8080 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html # These containers are run during pod initialization initContainers: - name: install image: busybox command: - wget - "-O" - "/work-dir/index.html" - http://kubernetes.io volumeMounts: - name: workdir mountPath: "/work-dir" dnsPolicy: Default volumes: - name: workdir emptyDir: {}
31
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
(No se puede usar el puerto 80 por que lo usa nginx)
Lo creamos:
kubectl create -f nginx.yaml
Accedemos al pod:
kubectl exec -it mariadb -- /bin/bash
Añadimos los paquetes necesarios:
apt-get install software-properties-common -y
Agregamos la clave para que confiemos en los paquetes de MariaDB
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
Añadimos el repositorio
sudo add-apt-repository 'deb [arch=amd64,i386] http://lon1.mirrors.digitalocean.com/mariadb/repo/10.1/debian jessie main'
Instalamos el servico
sudo apt-get update
sudo apt-get install mariadb-server -y
Iniciamos el servicio
service mysql start
Ahora realizamos la comprobación haciendo una conexión con la base de datos
mysql -u root -p
32
05/07/2020
ITMS_PROC_KUBERNETES_Instalacion_Configuracion
Versión: 1.0
33
05/07/2020