{"id":18675371,"url":"https://github.com/manuparra/openstack","last_synced_at":"2025-04-12T02:11:24.276Z","repository":{"id":79050941,"uuid":"82423029","full_name":"manuparra/openstack","owner":"manuparra","description":"Instalación y despliegue OpenStack + clusters para BigData","archived":false,"fork":false,"pushed_at":"2017-08-06T13:57:53.000Z","size":319,"stargazers_count":5,"open_issues_count":5,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-25T21:51:13.012Z","etag":null,"topics":["cinder","docker","glance","horizon","nova","openstack","rdo","virtualization"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manuparra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-18T23:40:37.000Z","updated_at":"2018-04-23T14:32:13.000Z","dependencies_parsed_at":"2023-05-18T14:02:17.842Z","dependency_job_id":null,"html_url":"https://github.com/manuparra/openstack","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuparra%2Fopenstack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuparra%2Fopenstack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuparra%2Fopenstack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuparra%2Fopenstack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manuparra","download_url":"https://codeload.github.com/manuparra/openstack/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248505928,"owners_count":21115354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cinder","docker","glance","horizon","nova","openstack","rdo","virtualization"],"created_at":"2024-11-07T09:24:39.249Z","updated_at":"2025-04-12T02:11:24.260Z","avatar_url":"https://github.com/manuparra.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"http://zdnet2.cbsistatic.com/hub/i/r/2016/10/25/e2569fbb-c7f8-4f5c-9b81-f841816e5261/resize/770xauto/b291ee9185e8472b75b6875fda72b3f4/openstack-logo-2016.png\" width=\"600\"\u003e\n\n\n# Instalación y despliegue de OpenStack\n\nManual completo y funcional de instalación, despliegue y uso de OpenStack en modo MULTI-NODO sobre CentOS7 con RDO para la versión de OpenStack **NEWTON**. Este manual se ha desarrollado para poner en producción un cluster completo con todos los servicios de OpenStack, desde la instalación básica hasta aspectos más complejos de despliegue, uso y automatización.\n\nEn este tutorial cubre los siguientes aspectos:\n\n- Instalación de OpenStack sobre tres nodos: **Control, Computo y Red**.\n- Instalación adicional de nodos (+ de 3) para diversos roles control, computo y red.\n- Alta disponibilidad en OpenStack.\n- Gestión de OpenStack desde línea de comandos [en proceso].\n- Despligue de servicios de BigData sobre OpenStack: HDFS, Hadoop, Spark, etc. [pendiente].\n\n## Autoría\n\nEste manual completo está desarrollado por Rubén Castro, Juan A. Cortés y Manuel J. Parra dentro del marco de trabajo del Laboratorio  Distributed Computational Intelligence and Time Series y el departamento de Ciencias de la Computación e Inteligencia Artificial de la Universidad de Granada, para el proyecto Minería de Datos en CloudComputing.\n\n\n### Redistribución del tutorial\n\nRecuerda citar a los autores y la referencia a este repositorio si usas el material que aquí se expone.\n\n\nContenido\n=================\n\n   * [Instalación de OpenStack RDO](#instalación-de-openstack-rdo)\n      * [Arquitectura del sistema](#arquitectura-del-sistema)\n      * [Datos de los nodos](#datos-de-los-nodos)\n      * [Qué se instalará en cada nodo](#qué-se-instalará-en-cada-nodo)\n      * [Instalación con RDO y PackStack](#instalación-con-rdo-y-packstack)\n         * [Actualización de paquetes en CentOS 7](#actualización-de-paquetes-en-centos-7)\n         * [Actualización de fichero hosts](#actualización-de-fichero-hosts)\n         * [Deshabilitar SELINUX y NetworkManager](#deshabilitar-selinux-y-networkmanager)\n         * [Configurar SSH passwordless desde el nodo de control a los demás.](#configurar-ssh-passwordless-desde-el-nodo-de-control-a-los-demás)\n         * [Habilitar el repositorio de RDO e instalar PackStack](#habilitar-el-repositorio-de-rdo-e-instalar-packstack)\n         * [Generar y personalizar el fichero de instalación](#generar-y-personalizar-el-fichero-de-instalación)\n         * [Instalar OpenStack](#instalar-openstack)\n      * [Añadiendo espacio a CINDER](#añadiendo-espacio-a-cinder)\n   * [Afinar la instalación de OpenStack](#afinar-la-instalación-de-openstack)\n      * [Añadir más nodos de almacenamiento con CINDER](#añadir-más-nodos-de-almacenamiento-con-cinder)\n      * [Añadir más nodos de RED (network)](#añadir-más-nodos-de-red-network)\n\t  * [Habilitar Sahara DataProcessing en Horizon](#horizonabilitar-dataprocessing-con-sahara-en-horizon)\n   * [ Referencias](#referencias)\n\n\n## Arquitectura del sistema\n\nPara esta instalación básica usaremos 3 nodos físicos con el siguiente esquema y arquitectura de red:\n\n\u003ca data-flickr-embed=\"true\" data-footer=\"true\"  href=\"https://www.flickr.com/photos/manuparra/32868225721/in/dateposted-public/\" title=\"OpenStack Basic Architecture\"\u003e\u003cimg src=\"https://c1.staticflickr.com/4/3832/32868225721_62f7016426_z.jpg\" width=\"640\" height=\"453\" alt=\"OpenStack Basic Architecture\"\u003e\u003c/a\u003e\u003cscript async src=\"//embedr.flickr.com/assets/client-code.js\" charset=\"utf-8\"\u003e\u003c/script\u003e\n\n\n\nNodos del diagrama:\n\n- Control (**Controller**): nodecontroller\n- Computo (**Compute**): nodecompute -- Se encarga de la gestión/ejecución, etcétera de las MVs\n- Red (**Network**): nodenetwork -- Exclusivamente dedicado al soporte de redes en la instalación de OpenStack. Hay muchas posibilidades, pero como recomendación, lo ideal es que sea un nodo dedicado a esta tarea y no se mezcle con los demás.\n\nAlgunas consideraciones sobre el diagrama:\n\n- En nuestro caso todos los nodos tienen instalado **CentOS7 Minimal** como distribución linux\n- Todos los nodos conectados a la misma red y switch por Ethernet (o Infiniband)\n- Todos los nodos deben tener acceso a Internet\n- Las particiones de disco son particiones estandar de 900 GB para la partición raíz / y el resto para swap (no LVM)\n- Uno de los nodos será exclusivo e independiente para la gestión de redes (Neutron) de OpenStack.\n\nCaracterísticas de los nodos\n\n- 32 cores.\n- 256 GB RAM.\n- 2 HD con 2TB cada uno.\n- 4 tarjetas de red y 1 Infiniband, pero sólo se usará una de ellas.\n\nLa **instalación mínima** admitible tiene que tener la siguiente configuración de los nodos:\n\n- 8 cores\n- 8 GB de RAM\n- 1 HD con 1 TB\n- 1 Tarjeta de red para cada nodo\n\n## Datos de los nodos\n\n- nodecontroller\n```\nHostname \t: controller.dicits.es\nIP Address \t:192.168.10.150\nOS         \t:CentOS 7\nDNS  \t\t:192.168.10.10\n```\n\n- nodecompute\n```\nHostname \t: compute.dicits.es\nIP Address \t:192.168.10.151\nOS         \t:CentOS 7\nDNS  \t\t:192.168.10.10\n```\n\n- nodenetwork\n```\nHostname \t: network.dicits.es\nIP Address \t:192.168.10.153\nOS         \t:CentOS 7\nDNS  \t\t:192.168.10.10\n```\n\n*En DNS, usamos el servidor de nombres de dominio que exista en la propia red. En nuestro caso ``192.168.10.10`` *\n\n## Qué se instalará en cada nodo\n\n- nodecontroller\n```\nKeystone, Glance, swift, Cinder, Horizon, Neutron, Nova novncproxy, Novnc, Nova api, Nova Scheduler, Nova-conductor\n```\n\n- nodecompute\n```\nNova Compute, Neutron – Openvswitch Agent\n```\n\n- nodenetwork\n```\nNeutron Server\nNeturon DHCP agent\nNeutron- Openswitch agent\nNeutron L3 agent\n```\n\n## Instalación con RDO y PackStack\n\nNOTA: Este tutorial esta orientado a la instalación de packstack 9.0.1. (que corresponde a OpenStack NEWTON). Hay que tener en cuenta que si se instala packstack por defecto tomará la última versión disponible del repositorio (Actualmente la 10.0.0 que corresponde con OpenStack OCATA).\n\n\n### Actualización de fichero hosts\n\nUna vez configurados los nodos con su IP correspondiente y validado el acceso a Internet de los mismos, fijamos el nombre de cada uno de los nodos (``hostname``):\n\nPara el nodo controlador (IP: 192.168.6.150), ponemos el nombre:\n```\nhostnamectl set-hostname nodecontroller\n```\n\nPara el nodo de computo (IP: 192.168.6.151), ponemos el nombre:\n```\nhostnamectl set-hostname nodecompute\n```\n\nPara el nodo de red (IP: 192.168.6.152), ponemos el nombre:\n```\nhostnamectl set-hostname nodenetwork\n```\n\nY añadimos el siguiente esquema en ``/etc/hosts`` en cada uno de los nodos :\n\n```\n192.168.10.150 nodecontroller.dicits.es nodecontroller\n192.168.10.151 nodecompute.dicits.es    nodecompute\n192.168.10.152 nodenetwork.dicits.es    nodenetwork\n```\n\n*En lugar de ``.dicits.es`` puedes poner algo como ``miorganizacion.com`` o similar que corresponda a tu organización*\n\n\n### Actualización de paquetes en CentOS 7\n\nPasamos a realizar un ``update`` para cada nodo:\n\n```\n[root@nodecontroller]$ yum -y update ; reboot\n```\n\n```\n[root@nodecompute]$ yum -y update ; reboot\n```\n\n```\n[root@nodenetwork]$ yum -y update ; reboot\n```\n\n\n### Deshabilitar SELINUX y NetworkManager\n\nEn cada uno de los nodos modificar el fichero ``/etc/sysconfig/selinux`` cambiar ``SELINUX=disabled``\n\nTambién deshabilitar NetworkManager en cada uno de los nodos:\n\n```\nsystemctl stop NetworkManager\nsystemctl disable NetworkManager\n```\n\nUna vez hechos los cambios es necesario reinicar de nuevo los tres nodos:\n\n```\nreboot\n```\n\n### Configurar SSH passwordless desde el nodo de control a los demás.\n\nEsto es importante, ya que permite que, entre los nodos, se pueda conectar con SSH sin utilizar la clave. En este caso lo que se usa es la clave pública, para autenticar dentro del grupo de nodos que tenemos (y además es requerido por packstack para poder hacer la instalación):\n\nEn el ``nodecontroller`` (cuando el comando ``ssh-keygen`` pida clave, dejala en blanco):\n\n```\n[root@nodecontroller ]# ssh-keygen\n[root@nodecontroller ]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.151\n[root@nodecontroller ]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.152\n```\n\n\nHecho esto, chequea que puedes conectarte con SSH a cada uno de los nodos sin que pida la clave por teclado:\n\n```\n[root@nodecontroller ~]# ssh root@192.168.10.151\n[root@nodecompute ~]#\n```\n\nSi has conectado correctamente, este paso está bien realizado. En caso contrario vuelve a repetirlo.\n\n### Habilitar el repositorio de RDO e instalar PackStack\n\nCon los siguientes comandos añadiremos a nuestro sistema el paquete RPM de RDO, donde se encuentra PackStack 9.0.1 (OpenStack NEWTON), y lo instalaremos:\n\nSerán ejecutados en ``nodecontroller`` (esto instalará la versión de OpenStack Newton [9.0.1] ):\n\n```\n[root@nodecontroller ]# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-newton/rdo-release-newton-4.noarch.rpm\n[root@nodecontroller ]# yum install -y openstack-packstack\n```\n### Generar y personalizar el fichero de instalación\n\nCon el siguiente comando generaremos el fichero de instalación (\"Answer File\" según PackStack).\n\nEn el ``nodecontroller``:\n\n```\n[root@nodecontroller ]# packstack --gen-answer-file=/root/instalacion.txt\n```\n\nEditaremos este fichero modificando las opciones que nos interesen. Para esta instalación añadiremos las IP de nuestros nodos, desactivaremos la demostración, desactivaremos Ceilometer, añadiremos un servidor para NTP y cambiaremos las contraseñas de los servicios que nos interesen.\n\n\nEn el ``nodecontroller`` abrir el fichero ``/root/instalacion.txt`` y buscar y cambiar las siguientes directivas:\n```\n[root@controller ~]# vi /root/instalacion.txt\n........................................\nCONFIG_CONTROLLER_HOST=192.168.10.150\nCONFIG_COMPUTE_HOSTS=192.168.10.151\nCONFIG_NETWORK_HOSTS=192.168.10.153\nCONFIG_PROVISION_DEMO=n\nCONFIG_CEILOMETER_INSTALL=n\nCONFIG_HORIZON_SSL=y\nCONFIG_NTP_SERVERS= 1.es.pool.ntp.org\nCONFIG_KEYSTONE_ADMIN_PW= \u003ccontraseña\u003e\n..........................................\n```\nEl servidor NTP deberá ser el propio de nuestra región, por ejemplo ``hora.ugr.es``.\n\n### Instalar OpenStack\n\nUna vez editado el fichero de configuración ```/root/instalacion.txt``` pasamos\na realizar la instalación de OpenStack con PackStack. Para ello lanzamos el siguiente comando:\nEn el ``nodecontroller``:\n\n```\n[root@controller ~]# packstack --answer-file=/root/instalacion.txt\n```\n\nEn la figura vemos cómo ha finalizado correctamente la instalación.\n![install_001](https://github.com/manuparra/openstack/blob/master/imgs/img_001.png?raw=true)\n\nUna vez realizada la instalación sin ningún error podremos ver como se ha\ncreado una nueva interfaz de red en el nodo de red (``nodenetwork``), llamada ``br-ex``. Ésta se puede ver ejecutando ``ifconfig -a`` como muestra la imagen.\n\n![install_002](https://github.com/manuparra/openstack/blob/master/imgs/img_002.png?raw=true)\n\nUna vez comprobado\nque realmente está la interfaz de red en el nodo de red, hacemos que esta nueva\ninterfaz sea la que de acceso al exterior mientras que la otra interconectará los nodos. Para ello copiamos la configuración de la interfaz existente a la nueva interfaz ```br-ex``` y la editamos.\nEn el ``nodenetwork``:\n```\n[root@network ~]# cd /etc/sysconfig/network-scripts/\n[root@network network-scripts]# cp ifcfg-enp0s3 ifcfg-br-ex\n[root@network network-scripts]# vi ifcfg-enp0s3\n........................................\nDEVICE=enp1s0\nTYPE=OVSPort\nDEVICETYPE=ovs\nOVS_BRIDGE=br-ex\nONBOOT=yes\n........................................\n\n........................................\n[root@network network-scripts]# vi ifcfg-br-ex\nDEVICE=br-ex\nDEVICETYPE=ovs\nTYPE=OVSBridge\nBOOTPROTO=static\nIPADDR=192.168.10.153\nNETMASK=255.255.255.0\nGATEWAY=192.168.10.1\nDNS1=192.168.10.10\nDNS2=8.8.8.8\nONBOOT=yes\n........................................\n```\n\nAcabada la edición, pasamos a reiniciar el servicio de red.\nEn el `nodenetwork`:\n```\n[root@network ~]# systemctl restart network\n```\nComprobamos que todos los cambios han surtido efecto ejecutando de nuevo ``ifconfig``.\n![install_003](https://github.com/manuparra/openstack/blob/master/imgs/img_003.png?raw=true)\n\n\n## Añadiendo espacio a CINDER\n\nComprobamos en el nodo de control (``controller``) el espacio que hay disponible. Por defecto en la instalación de RDO, sólo se instalan 10GB de espacio y esto **NO** es suficiente, así que tendremos que ampliarlo.\n\n```\n[root@controller ]# vgs\n  VG             #PV #LV #SN Attr   VSize  VFree\n  cinder-volumes   1   1   0 wz--n- 20.60g 10.60g\n```\n\nAhora añadimos un nuevo volumen para CINDER:\n\n```\n[root@controller ~]# dd if=/dev/zero of=cinder-volumes bs=1 count=0 seek=300G\n[root@controller ~]# losetup /dev/loop3 cinder-volumes\n[root@controller ~]# fdisk /dev/loop3\n```\n\nUsar la secuencia de teclas siguiente para el menú de ``fdisk``:\n\n```\nn\np\n1\nENTER\nENTER\nt\n8e\nw\n```\n\nCreamos un dispositivo físico:\n\n```\n[root@controller ~]# pvcreate /dev/loop3\n```\n\nExtendemos el volumen de cinder añadiendo el nuevo creado:\n\n```\n[root@controller ~]# vgextend cinder-volumes  /dev/loop3\n```\n\nComprobamos que se ha añadido el espacio a CINDER:\n\n```\n[root@controller ~]# vgs\n  VG             #PV #LV #SN Attr   VSize   VFree  \n  cinder-volumes   2   1   0 wz--n- 320.59g 310.59g\n```\n\nSi no has configurado en ``packstack`` cuáles son los servidores de almacenamiento o dónde está CINDER y el tamaño, puedes hacerlo en la instalación indicando qué servidores estarán disponibles para usar espacio de almacenamiento para CINDER.\n\n\n\n# Afinar la instalación de OpenStack\n\n## Añadir más nodos de almacenamiento con CINDER\n\n\n## Añadir más nodos de RED (network)\n\n\n## Habilitar DataProcessing con Sahara en Horizon\n\nPrimero hay que instalar el paquete siguiente:\n\n```\npip install sahara-dashboard\n```\n\nUna vez hecho esto, cambiar la configuración de `Horizon`:\n\n```\nvi /usr/share/openstack-dashboard/openstack_dashboard/settings.py\n```\n\ny añadir a la sección ``INSTALLED_APPS`` el valor `saharadashboard`: \n\n```\nINSTALLED_APPS = [\n    'openstack_dashboard',\n    'django.contrib.contenttypes',\n    'django.contrib.auth',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'django.contrib.humanize',\n    'django_pyscss',\n    'openstack_dashboard.django_pyscss_fix',\n    'compressor',\n    'horizon',\n    'openstack_auth',\n    'saharadashboard',\n]\n```\n\nFinalmente reiniciar apache:\n\n```\nservice httpd restart\n```\n## Personalizar el arranque con cloud-init.\n\nEn el caso de que tengamos que realizar ciertas tareas durante el arranque de nuestras imágenes, podemos recurrir a *cloud-init*. Así pues, durante la configuración de nuestra nueva instancia podemos añadir nuestro *script* en el siguiente menú:\n\n![cloudinit](https://i.imgur.com/S1J44vt.png)\n\nEsto es muy útil ya que algunas imágenes de ciertos sistemas operativos (Ubuntu, por ejemplo) requieren la inyección de una clave SSH para conectar y de esta manera podemos inyectarla al usuario que queramos (entre otras cosas). Por ejemplo, para crear un usuario, añadirle una clave y modificar los DNS podríamos usar el siguiente *script*:\n\n```\n#cloud-config\nusers:\n  - name: tfg_user\n    ssh-authorized-keys:\n      - ssh-rsa \u003cclave generado por OpenStack\u003e\n    sudo: ['ALL=(ALL) NOPASSWD:ALL']\n    groups: sudo\n    shell: /bin/bash\nruncmd:\n  - echo 'interface \"ens3\" {prepend domain-name-servers 8.8.8.8;}' | sudo tee --append /etc/dhcp/dhclient.conf\n  - sudo reboot\n```\n\nPara ver otras posibles opciones, se enlazan los ejemplos de la página oficial: [Cloud config examples](https://cloudinit.readthedocs.io/en/latest/topics/examples.html)\n\n# Referencias\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuparra%2Fopenstack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanuparra%2Fopenstack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuparra%2Fopenstack/lists"}