Installazione e configurazione del servizio Compute (Nova)

Configurazione dell'Hypervisor (KVM)

  • Installare i pacchetti per la virtualizzazione:
    # yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python python-virtinst libvirt-client bridge-utils
    # yum groupinstall Virtualization "Virtualization Client" "Virtualization Platform" "Virtualization Tools"
    # yum install openstack-utils memcached qpid-cpp-server openstack-nova dnsmasq-utils  python-keystone-auth-token
    

  • Verificare che sia attiva l'interfaccia di rete virtuale, chiamata di default virbr0. Il comando ifconfig dovrebbe mostrarla nel suo output:
    virbr0    Link encap:Ethernet  HWaddr 52:54:00:54:65:A1  
              inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 b)  TX bytes:7585 (7.4 KiB)
    

  • Requisiti di configurazione per RHEL
    • Assicurarsi che nel file /etc/qpidd.conf sia settato auth=no .
    • Attraverso il comando openstack-config settare a False il parametro force_dhcp_release :
      # openstack-config --set /etc/nova/nova.conf DEFAULT force_dhcp_release False
      
      Nota bene: non viene mostrato nessun output ma modificato il file di configurazione.
    • Se si intende utilizzare immagini che non usano una singola partizione, eseguire il seguente comando:
      # openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_inject_partition -1
      
      Nota bene: non viene mostrato nessun output ma modificato il file di configurazione.


Configurazione del servizio Compute

  • Modificare due file in /etc/nova nel seguente modo.
    • Contentuto completo di nova.conf :
      [DEFAULT]
      # LOG/STATE
      logdir = /var/log/nova
      verbose = True
      state_path = /var/lib/nova
      lock_path = /var/lib/nova/tmp
      
      # AUTHENTICATION
      auth_strategy = keystone
      
      # SCHEDULER
      #compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
      
      # VOLUMES
      volume_group = <VOLUME_NAME>
      #volume_name_template = volume-%08x
      iscsi_helper = tgtadm
      
      # DATABASE del Cloud Controller
      sql_connection = mysql://nova:<YOUR_NOVADB_PASSWORD>@openstack-01.cnaf.infn.it/nova
      
      # COMPUTE
      libvirt_type = kvm
      connection_type = libvirt
      #instance_name_template = instance-%08x
      #api_paste_config=/etc/nova/api-paste.ini
      #allow_resize_to_same_host=True
      
      # APIS
      #osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
      #ec2_dmz_host=192.168.206.130
      #s3_host=192.168.206.130
      
      # GLANCE
      image_service=nova.image.glance.GlanceImageService
      glance_api_servers=192.168.206.130:9292
      
      # NETWORK
      network_manager = nova.network.manager.FlatDHCPManager
      force_dhcp_release = True
      dhcpbridge_flagfile = /etc/nova/nova.conf
      firewall_driver = nova.virt.libvirt.firewall.IptablesFirewallDriver
      # Change my_ip to match each host
      my_ip = <THIS_SERVER_IP>
      public_interface = eth0
      #vlan_interface = eth0
      flat_network_bridge = virbr0
      flat_interface = eth0
      fixed_range = 192.168.122.0/24
      
      # NOVNC CONSOLE
      vnc_enabled = true
      vncserver_listen = 0.0.0.0
      vncserver_proxyclient_address = 131.154.100.111
      novncproxy_base_url=http://openstack-01.cnaf.infn.it:6080/vnc_auto.html
      xvpvncproxy_base_url=http://openstack-01.cnaf.infn.it:6081/console
      
      # Qpid
      qpid_hostname = openstack-01.cnaf.infn.it
      rpc_backend = nova.rpc.impl_qpid
      
      # OTHER
      dhcpbridge = /usr/bin/nova-dhcpbridge
      injected_network_template = /usr/share/nova/interfaces.template
      libvirt_xml_template = /usr/share/nova/libvirt.xml.template
      libvirt_nonblocking = True
      libvirt_inject_partition = -1
      vpn_client_template = /usr/share/nova/client.ovpn.template
      credentials_template = /usr/share/nova/novarc.template
      root_helper = sudo nova-rootwrap
      remove_unused_base_images = True
      

Dove:

      • <VOLUME_NAME> è il nome del volume fisico del server che si sta configurando
      • <YOUR_NOVADB_PASSWORD> è la password dell'utente "nova" del DB "nova" del Cloud Controller
      • <THIS_SERVER_IP> è l'IP del server che si sta configurando
      • nei parametri sql_connection e qpid_hostname "openstack-01.cnaf.infn.it" è il server che ospita il Cloud Controller
      • nel parametro flat_network_bridge "virbr0" è l'interfaccia di rete virtuale del server che si sta configurando
        
        
    • Parte finale di /etc/nova/api-paste.ini (la parte precedente rimane invariata):
      [...]
      
      [filter:authtoken]
      paste.filter_factory = keystone.middleware.auth_token:filter_factory
      service_protocol = http
      service_host = <KEYSTONE_SERVICE_IP>
      service_port = 5000
      auth_host = <KEYSTONE_SERVICE_IP>
      auth_port = 35357
      auth_protocol = http
      auth_uri = http://<KEYSTONE_SERVICE_IP>:5000/
      admin_tenant_name = service 
      admin_user = nova
      admin_password = <NOVA_PASSWORD>
      
      Dove:
      • <KEYSTONE_SERVICE_IP> è l'IP del server che ospita Keystone (nel caso del prototipo è l'IP di openstack-01.cnaf.infn.it)
      • <NOVA_PASSWORD> è la password che è stata associata all'utente del servizio Nova in Keystone
        
        
  • Nota bene: il comando nova-manage potrebbe dare in output alcuni messaggi di Warning su metodi deprecati.
    
    
  • Per far partire i servizi di Nova ed inizializzare il DB, lanciare i seguenti comandi:
    # for svc in api objectstore compute network volume scheduler cert; do echo openstack-nova-$svc; service openstack-nova-$svc stop ; chkconfig openstack-nova-$svc on; done
    # nova-manage db sync
    # for svc in api objectstore compute network volume scheduler cert; do echo openstack-nova-$svc; /etc/init.d/openstack-nova-$svc start ; done 
    

  • Sul Cloud controller verificare lo stato dei servizi Nova compute:
    # nova-manage service list
    
    Binary           Host                                 Zone             Status     State Updated_At
    nova-cert        openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:46:04
    nova-consoleauth openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:45:54
    nova-console     openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:46:04
    nova-scheduler   openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:45:55
    nova-compute     openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:45:54
    nova-volume      openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:45:55
    nova-network     openstack-01.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:46:01
    nova-compute     openstack-02.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:45:57
    nova-network     openstack-02.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:46:03
    nova-compute     openstack-03.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:46:02
    nova-network     openstack-03.cnaf.infn.it            nova             enabled    :-)   2012-10-15 14:46:02
    

  • Creare la sottorete privata, i cui IP verranno assegnati alle istanze delle macchine virtuali, utilizzando l'interfaccia virtuale (nel caso in esempio virbr0). Il seguente comando, ad esempio, crea una sottorete con range 192.168.122.0/24.
    # nova-manage network create private --multi_host=T --fixed_range_v4=192.168.122.0/24 --bridge_interface=virbr0 --num_networks=1 --network_size=256
    
    # nova-manage network list
    id      IPv4                    IPv6            start address   DNS1            DNS2            VlanID          project         uuid           
    1       192.168.122.0/24        None            192.168.122.2   8.8.4.4         None            None            None            052f9b4b-e6d7-4ad9-a3f1-929e80008372
    


Configurazione degli indirizzi IP Floating pubblici

Indirizzi IP pubblici e privati

  • Ad ogni istanza virtuale viene automaticamente assegnato un IP privato (appartenente alla sottorete creata al punto precedente). E' possibile assegnare indirizzi pubblici alle istanze. In tal caso verificare la presenza della seguente riga nel file nova.conf :
    public_interface = eth0
    
    Far ripartire il servizio nova-network dopo aver cambiato il nova.conf .

Abilitazione di IP forwarding

  • Di default l'IP forwarding è disabilitato sulla maggior parte delle distribuzioni Linux. Per poter assegnare indirizzi pubblici alle macchine è necessario che l'IP forwarding sia abilitato. Verificare se è abilitato tramite il seguente comando:
    # sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    
    In questo esempio è disabilitato. e' possibile abilitarlo al volo usando il seguente comando:
    # sysctl -w net.ipv4.ip_forward=1
    
    Al fine di rendere permanente questa modifica, editare il file /etc/sysctl.conf inserendo o modificando la seguente riga:
    net.ipv4.ip_forward = 1
    

Creazione di una lista di IP Floating pubblici disponibili

  • Nova può gestire una lista di IP pubblici che possano essere assegnati alle istanze virtuali. Per aggiungere un IP alla lista:
    # nova-manage floating create <AVAILABLE_PUBLIC_IP>
    
    Dove <AVAILABLE_PUBLIC_IP> è un IP disponibile. E' possibile aggiungere una sottorete tramite:
    # nova-manage floating create --ip_range=<SUBNET>
    
    Dove <SUBNET> è una sottorete disponibile (es. 131.154.100.0/24). Per la gestione della lista di IP pubblici sono disponibili i seguenti comandi:
    • nova-manage floating list : mostra la lista degli IP pubblici inseriti
    • nova-manage floating create : aggiunge un IP alla lista
    • nova-manage floating create --ip-range= : aggiunge una sottorete alla lista
    • nova-manage floating delete : rimuove un IP dalla lista
    • nova-manage floating delete --ip-range= : rimuove una sottorete dalla lista


Gruppi di sicurezza: abilitazione di SSH e ICMP

Il servizio Compute usa i concetti di gruppi di sicurezza per controllare che i protocolli di rete (TCP, UDP, ICMP), le porte e gli indirizzi IP permettano di accedere alle istanze.

  • Per mostrare la lista dei gruppi di sicurezza usare il seguente comando:
    # nova secgroup-list
    +---------+-------------+
    |   Name  | Description |
    +---------+-------------+
    | default | default     |
    +---------+-------------+
    

  • Abilitare l'accesso sulla porta TCP 22 (SSH) per tutti gli indirizzi di Nova:
    # nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
    +-------------+-----------+---------+-----------+--------------+
    | IP Protocol | From Port | To Port |  IP Range | Source Group |
    +-------------+-----------+---------+-----------+--------------+
    | tcp         | 22        | 22      | 0.0.0.0/0 |              |
    +-------------+-----------+---------+-----------+--------------+
    

  • Abilitare il traffico ICMP (ping) per tutti gli IP di Nova:
    # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
    +-------------+-----------+---------+-----------+--------------+
    | IP Protocol | From Port | To Port |  IP Range | Source Group |
    +-------------+-----------+---------+-----------+--------------+
    | icmp        | -1        | -1      | 0.0.0.0/0 |              |
    +-------------+-----------+---------+-----------+--------------+
    


Installare e impostare l'avvio automatico dei servizi legati a ISCSI

  • Per poter fare l'attach di un volume nova ad l'instanza di una macchina virtuale è necessario installare ed avviare il servizio iscsi-initiator-utils su ogni Compute Node. Controllare quindi che sia installato attraverso il seguente comando:
    yum install iscsi-initiator-utils
    
  • Far partire il servizio:
    service iscsid force-start
    
  • Per settare l'avvio automatico:
    • Creare uno script /etc/rc.d/init.d/force-iscsid che possa far partire il servizio iscsid in maniera forzata:
      #!/bin/bash
      
      # Source function library.
      . /etc/rc.d/init.d/functions
      
      case "$1" in
      start)
      service iscsid force-start
      ;;
      stop)
      service iscsid stop
      ;;
      restart)
      service iscsid stop
      service iscsid force-start
      ;;
      status)
      service iscsid status
      ;;
      *)
      echo "Usage: force-iscsid {start|stop|restart|status}"
      exit 1
      esac
      exit 0
      
    • Cambiare i diritti al file:
      chmod 755 /etc/rc.d/init.d/force-iscsid
      
    • Settare il default SELinux file context per lo script appena creato:
      # restorecon -R -v /etc/rc.d/init.d/force-iscsid
      


-- PaoloVeronesi - 2012-08-30


This topic: MarcheCloudPilotaCNAF > GestioneOpenstack > InstallingAndConfiguringNova
Topic revision: r22 - 2012-10-17 - MatteoManzali
 
This site is powered by the TWiki collaboration platformCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback