En este post vamos a preparar los nodos para instalar un clúster de Kubernetes (RKE) para después instalar un servidor Rancher para producción
Requisitos
- Conocimientos básicos de Linux
- Una computadora externa desde la cual vamos a aprovisionar los nodos (computadora de operador)
- Nano instalado (sudo apt install nano) en la computadora de operador
- Tres computadoras para el RKE con Linux 64 bits (debian)
- servidor ssh instalado en los nodos para conexión externa
Para instalar el servidor Rancher y manejar clústeres de Kubernetes, necesitamos primero un clúster RKE, vamos a usar los tres nodos para alta disponibilidad.
Y te estarás preguntando..
Espera.. para instalar el servidor Rancher para manejar clústeres de Kubernetes, ¿ necesito primero instalar un clúster de Kubernetes?
La respuesta es si y no.
La mejor forma de desarrollar una aplicación altamente disponible es sobre Kubernetes, y es por eso que vamos a instalar el servidor Rancher sobre un clúster de Kubernetes, pero no va a ser una instalación típica, lo vamos a hacer con ayuda de RKE.
RKE es un motor de Kubernetes configurado por Rancher, asi que la instalación va a ser fácil y rápida, una vez que preparemos los nodos, eso es lo que vamos a hacer en este post.
Laboratorio
Genera una llave SSH
- Genera una llave ssh en la computadora del operador para instalar los nodos y guardarla en /home/(usuario)/.ssh/rke usando
ssh-keygen
(passphrase opcional)
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/(your user)/.ssh/id_rsa): /home/(your user)/.ssh/rke
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/(your user)/.ssh/rke
Your public key has been saved in /home/(your user)/.ssh/rke.pub
The key fingerprint is:
SHA256:sgdlTKIDjXv7c2X86wcbQ7e0TGeXz5JiWzk4qC61YtY javier@javier-Lenovo-ideapad-330S-15ARR
The key's randomart image is:
+---[RSA 3072]----+
| .o . . |
| .... + |
| .o + .|
| . .. o . +.+|
| . .o S. o * Oo|
| . +. = O X o|
| ..o.= o X o |
| B.E + . |
| o *. .oo |
+----[SHA256]-----+
La siguiente configuración debe de aplicarse en los tres nodos (pasos 2 a 33)
2. Copia la llave a los nodos, esto nos va a permitir conectarnos a los nodos sin poner la contraseña cada vez que nos conectemos mediante ssh.
ssh-copy-id -i ~/.ssh/rke (node user)@(node ip)
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/(your user)/.ssh/rke.pub"
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:diitN4rOd6j9KdszklTR/QAb5/SiGw3Pwxx5rofnQ6g.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ubuntu@192.168.1.1's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ubuntu@192.168.1.1'"
and check to make sure that only the key(s) you wanted were added.
3. Conectate al nodo con ssh
usando el usuario, ip y contraseña del nodo
ssh (user)@(node ip)
Cambia el nombre del host
4. Edita el archivo /etc/hostname
sudo nano /etc/hostname
5. Agrega un nombre de host único, yo voy a usar raspb-ubuntu-1, raspb-ubuntu-2, raspb-ubuntu-3 para los nodos.
raspb-ubuntu-1
6. Guarda el archivo con control - 0 sal de la edición con Control - X
7. Reinicia el nodo
sudo reboot
8. Conectate al nodo con el nombre de host.
ssh (user)@raspb-ubuntu-1
Desinstala e instala una versión soportada de Docker
9. Desinstala cualquier versión anterior de docker
sudo apt-get remove docker docker-engine docker.io containerd
Este comando va a preservar el contenido de /var/lib/docker/ de cualquier imagen, volumen y configuración de alguna versión anterior de docker
10. Instala las dependencia necesarias para docker
sudo apt update && sudo apt install -y \
apt-transport-https ca-certificates curl \
gnupg-agent software-properties-common
11. Instala una versión de docker soportada por Rancher
Docker Version | Install Script |
---|---|
19.03 | curl https://releases.rancher.com/install-docker/19.03.sh | sh |
18.09 | curl https://releases.rancher.com/install-docker/18.09.sh | sh |
18.06 | curl https://releases.rancher.com/install-docker/18.06.sh | sh |
17.03 | curl https://releases.rancher.com/install-docker/17.03.sh | sh |
curl https://releases.rancher.com/install-docker/19.03.sh | sh
12. Verifica tu versión de Docker
sudo docker version --format '{{.Server.Version}}'
19.03.13
13. Habilita el auto inicio de docker
sudo systemctl enable --now docker
14. Crea el grupo docker y agrega tu usuario al grupo de docker
sudo usermod -aG docker $USER && sudo usermod -aG docker $USER
Deshabilita la memoria Swap
15. Este es un punto relacionado con seguridad, para evitar que un usuario pueda acceder al swap y obtener información sensible.
Edita el archivo /etc/fstab with sudo nano /etc/fstab
y comenta con # el inicio del la linea swap
GNU nano 4.8 /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=5be72ab8-47e4-4826-8437-624da4b296df / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=8060-E869 /boot/efi vfat umask=0077 0 1
#/swapfile none swap sw 0 0
16. Guarda con control + O y control - X para salir
17. Esto tomara efecto una vez que reiniciemos, pero para seguir trabajando en el host desactivemos el swap mediante comando
sudo swapoff -a
18. Verifica que no se este usando memoria swap con free -h
free -h
total used free shared buff/cache available
Mem: 7.6Gi 263Mi 6.8Gi 3.0Mi 580Mi 7.3Gi
Swap: 0B 0B 0B
Activa re-dirección de puerto
19. Activa re-dirección de puerto
sudo tee -a /etc/sysctl.d/99-kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
20. Cargar la nueva configuración
sudo sysctl --system
Abrir puertos y activar el firewall.
21. El firewall ufw debe de estar desactivado por defecto, puedes verificarlo con sudo ufw status
sudo ufw status
Status: inactive
Primero vamos a activar el puerto 22, tienes que hacer esto con cuidado, es posible que si activas el firewall antes de abrir los puertos para conectarte al host, este quede sin comunicación y la única forma de conectarte sera físicamente.
22. Permitir puerto 22 (ssh)
sudo ufw allow 22/tcp
Rules updated
Rules updated (v6)
23. Crea un script para permitir los puertos tcp necesarios por el servidor Rancher, la lista completa puedes encontrarla aquí
nano allowtcp.sh
24. Agrega esta información al archivo
#!/bin/bash
for i in 80 443 179 5473 6443 8472 2376 8472 2379:2380 9099 10250 10251 10252 10254 30000:32767; do
sudo ufw allow ${i}/tcp;
echo "${i}/tcp port enabled"
done
25. Guardar el archivo con control + O y control - X para salir
26. Agrega permisos de ejecución al archivo
chmod +x allowtcp.sh
27. Ejecuta el archivo con permisos de súper usuario
sudo ./allowtcp.sh
Rules updated
Rules updated (v6)
80/tcp port enabled
Rules updated
Rules updated (v6)
443/tcp port enabled
Rules updated
Rules updated (v6)
179/tcp port enabled
Rules updated
Rules updated (v6)
5473/tcp port enabled
Rules updated
Rules updated (v6)
6443/tcp port enabled
Rules updated
Rules updated (v6)
8472/tcp port enabled
Rules updated
Rules updated (v6)
2376/tcp port enabled
Skipping adding existing rule
Skipping adding existing rule (v6)
8472/tcp port enabled
Rules updated
Rules updated (v6)
2379:2380/tcp port enabled
Rules updated
Rules updated (v6)
9099/tcp port enabled
Rules updated
Rules updated (v6)
10250/tcp port enabled
Rules updated
Rules updated (v6)
10251/tcp port enabled
Rules updated
Rules updated (v6)
10252/tcp port enabled
Rules updated
Rules updated (v6)
10254/tcp port enabled
Rules updated
Rules updated (v6)
30000:32767/tcp port enabled
28. Ahora agreguemos los puertos udp necesarios por el servidor Rancher.
Crea un nuevo script.
nano allowudp.sh
29. Agrega la siguiente información
#!/bin/bash
for i in 8285 8472 4789 30000:32767; do
sudo ufw allow ${i}/udp
echo "${i}/udp port enabled"
done
30. Agregar permisos de ejecución
sudo chmod +x allowudp.sh
31. Ejecuta el script
sudo ./allowudp.sh
Rules updated
Rules updated (v6)
8285/udp port enabled
Rules updated
Rules updated (v6)
8472/udp port enabled
Rules updated
Rules updated (v6)
4789/udp port enabled
Rules updated
Rules updated (v6)
30000:32767/udp port enabed
32. Habilitemos el firewall
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
33. Habilita la re-dirección SHH, edita el archivo /etc/ssh/ssh_config
sudo nano /etc/ssh/ssh_config
Y agrega esto al final del archivo
AllowTcpForwarding yes
Guarda con Control + O para guardar y Control + X para salir
Reinicia el servidor ssh
sudo systemctl restart ssh
Bien hecho! preparamos los nodos, para el clúster de Kubernetes de producción
En el siguiente post vamos a aprovisionar un clúster RKE e instalaremos el servidor Rancher