En este artículo veremos como realizar una instalación inicial de Apache Mesos para arquitecturas ARM/AMD64.
Introducción
En el anterior artículo, hemos descrito Mesos como elemento que nos va a permitir abstraernos del hardware y que va a ejercer de director de orquesta dentro del pipeline SMACK.
Con este conocimiento, vamos a comenzar construyendo mesos desde los fuentes, para la ultima versión disponible, la 1.6.1. Sin más que comentar, nos ponemos manos a la obra.
Elementos Necesarios
- El hardware que voy a utilizar es compatible con AMD64 . Para ARM voy a utilizar las siguientes placas (Mesos nos abstrae el hardware!):
- El sistema Operativo que voy a utilizar en los articulos es la ultima versión estable de ubuntu bionic.
Instalando los paquetes necesarios
Vamos a construir mesos con todas las funcionalidades que aporta y que iremos describiendo en posteriores articulos. Este apartado se puede aplicar a ambas arquitecturas hardware:
# Elementos necesarios para compilar mesos
# Instalamos oracle java
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
# Instalamos los paquetes de sistema
$ sudo apt-get install automake1.11 tar wget git autoconf libtool build-essential python-dev python-six python-virtualenv libcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev zlib1g-dev
# Para libevent y network isolator necesitamos instalar
$ sudo apt-get install libnl-3-200 libnl-3-200-dbg libnl-3-dev libnl-cli-3-200 libnl-cli-3-200 libnl-cli-3-dev libnl-genl-3-200 libnl-genl-3-dev libnl-idiag-3-200 libnl-idiag-3-dev libnl-nf-3-200 libnl-idiag-3-dev libnl-nf-3-200 libnl-nf-3-dev libnl-route-3-200 libnl-route-3-dev libnl-xfrm-3-200 libnl-xfrm-3-dev libnl-utils libnlopt-dev libevent-dev
# Adicionalmente, instalamos ssl
$ sudo apt-get install libssl-dev
# Instalamos docker
$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
# En el caso de usar armhf, cambiamos [arch=armhf]
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ sudo groupadd docker
$ sudo usermod -aG docker jleon
Configuración y Compilación
Ampliación de memoria mediante swap
Normalmente, las placas ARM no suelen venir con mucha memoria de serie y el compilador se suele quejar. En este sentido, usaremos la memoria de intercambio swap para simular que disponemos de más memoria. Podemos realizarlo de dos formas, o generando un fichero crudo o pinchando un disco externo a las placas y generando una partición:
# Generar un fichero para swap, en este caso de 8GB
$ sudo dd if=/dev/zero of=/swapfile bs=1G count=8
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
# Incluimos la configuración en /etc/fstab para no tener que añadirla en cada reunicio
$ /swapfile swap swap defaults 0 0
# Reiniciamos y comprobamos que todo esta correcto
# Generar una partición swap, en este caso de 8GB
$ sudo fdisk /dev/sda
# Con n indicamos que queremos una nueva partición
# Elegimos el numero, en este caso 1
# Con t indicamos el tipo, 16 para linux swap
# Con w guardamos
$ sudo mkswap /dev/sda1
$ sudo swapon /dev/sda1
# Incluimos la configuración en /etc/fstab para no tener que añadirla en cada reunicio
$ /dev/sda1 swap swap defaults 0 0
# Reiniciamos y comprobamos que todo esta correcto
Compilación
A partir de este punto, aplica a ambas arquitecturas:
$ wget http://apache.rediris.es/mesos/1.7.0/mesos-1.7.0.tar.gz
$ tar xvfz mesos-1.7.0.tar.gz
$ cd mesos-1.7.0
$ mkdir build && cd build
$ ../configure --prefix=/opt/mesos-1.7.0 --enable-port-mapping-isolator --enable-optimize --enable-ssl --enable-libevent --enable-jemalloc-allocator --enable-tests-install --enable-install-module-dependencies --enable-perftools
$ make
$ sudo make install
$ sudo ldconfig
Si todo ha ido correctamente, dispondremos de mesos instalado en la ruta /opt/mesos-1.6.1.
Ejecución
Construido mesos, solo falta ejecutar los nodos maestro y agente. Para esta primera ejecución usaremos:
# Nodo maestro
$ mkdir -p /var/lib/mesos/master
$ sudo ln -s /opt/mesos-1.6.1 /opt/mesos-master
$ sudo /opt/mesos-master/sbin/mesos-master --cluster=cluster-leonvillamayor --hostname=master.leonvillamayor.org --ip=192.168.1.5 --log_dir=/var/log/mesos/master --port=5050 --work_dir=/var/lib/mesos/master
# Nodo agente
$ mkdir -p /var/lib/mesos/agent
$ sudo ln -s /opt/mesos-1.6.1 /opt/mesos-agent
$ sudo /opt/mesos-agent/sbin/mesos-agent --hostname=agent-1.leonvillamayor.org --ip=192.168.1.200 --log_dir=/var/log/mesos/agent --work_dir=/var/lib/mesos/agent --master=192.168.1.5:5050 --containerizers=docker,mesos --docker=/usr/bin/docker --executor_registration_timeout=10mins
En las opciones de ejecución anteriores, tendriamos que sustituir los valores –hostname, –ip por los adecuados. Si solo disponemos de 1 maquina, usaremos localhost.
En posteriores articulos vamos a explicar cada uno de los componentes en detalle, la configuración y procedimiento de arranque y parada de los mismos configurandolos como servicios systemd.