Virtualisation avec OpenStack pour TP GIS : Différence entre versions

De Wiki de Projets IMA
(Modifier les fichier de configuration)
(Configuration Internet OpenStack)
Ligne 127 : Ligne 127 :
 
   virsh --connect qemu:///system create (dirWD)/xml/(nomDeVM).xml
 
   virsh --connect qemu:///system create (dirWD)/xml/(nomDeVM).xml
 
==Configuration Internet OpenStack==
 
==Configuration Internet OpenStack==
 +
<svg width="540" height="500" id="topology_canvas">
 +
  <defs>
 +
    <pattern id="device_normal_bg" patternUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
 +
      <g>
 +
        <rect width="20" height="20" class="base_bg_normal"></rect>
 +
      </g>
 +
    </pattern>
 +
    <pattern id="device_normal_bg_loading" patternUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
 +
      <g>
 +
        <rect width="20" height="20" class="loading_bg_normal"></rect>
 +
        <path d="M0 20L20 0ZM22 18L18 22ZM-2 2L2 -2Z" stroke-linecap="square" stroke="rgba(0, 0, 0, 0.3)" stroke-width="7"></path>
 +
      </g>
 +
      <animate attributeName="x" attributeType="XML" begin="0s" dur="0.5s" from="0" to="-20" repeatCount="indefinite"></animate>
 +
    </pattern>
 +
    <pattern id="device_small_bg" patternUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
 +
      <g>
 +
        <rect width="20" height="20" class="base_bg_small"></rect>
 +
      </g>
 +
    </pattern>
 +
    <pattern id="device_small_bg_loading" patternUnits="userSpaceOnUse" x="0" y="0" width="5" height="5">
 +
      <g>
 +
        <rect width="5" height="5" class="loading_bg_small"></rect>
 +
        <path d="M0 5L5 0ZM6 4L4 6ZM-1 1L1 -1Z" stroke-linecap="square" stroke="rgba(0, 0, 0, 0.4)" stroke-width="1.5"></path>
 +
      </g>
 +
      <animate attributeName="x" attributeType="XML" begin="0s" dur="0.5s" from="0" to="-5" repeatCount="indefinite"></animate>
 +
    </pattern>
 +
  </defs>
 +
<g transform="translate(0,0)" id="id_31af9740-771f-4c5c-b644-4f7da9f57827" class="network"><g class="network_container_normal">
 +
    <rect rx="9" ry="9" width="17" height="500" style="fill: rgb(31, 119, 180);" class="network-rect"></rect>
 +
    <text x="250" y="-4" class="network-name" transform="rotate(90 0 0)" pointer-events="none">netPublic</text>
 +
    <text x="495" y="-20" class="network-cidr" transform="rotate(90 0 0)">193.48.65.192/26</text>
 +
  </g><g transform="translate(98.5,80)" id="id_5fd71818-fe7d-4cf4-ab01-ff1b2185b1a3" class="device"><g class="router_normal device_body">
 +
    <g class="ports" pointer-events="none"><g transform="translate(90,25)" id="id_1c5a1de1-96e6-4bfd-9128-970a1d97b788" class="port"><line x2="82" y2="0" y1="0" x1="0" stroke="#ff7f0e" stroke-width="6" class="port_line"></line><text y="-4" x="6" class="port_text">192.168.100.1</text></g><g transform="translate(0,25)" id="id_93dcb6e4-22b3-4301-b739-479ece15fbb2" class="port"><line x2="-82" y2="0" y1="0" x1="0" stroke="#1f77b4" stroke-width="6" class="port_line"></line><text y="-4" x="-6" class="port_text left">193.48.65.196</text></g></g>
 +
    <rect class="frame" x="0" y="0" rx="6" ry="6" width="90" height="50"></rect>
 +
    <g class="texts" pointer-events="none">
 +
      <rect class="texts_bg" x="1.5" y="32" width="87" height="17"></rect>
 +
      <text x="45" y="46" class="type">Router</text>
 +
      <text x="45" y="22" class="name">routerPub..</text>
 +
    </g>
 +
    <g class="icon" transform="translate(6,6)" pointer-events="none">
 +
      <circle class="icon_bg" cx="0" cy="0" r="12"></circle>
 +
      <g transform="translate(-6.5,-6.5)">
 +
        <polygon points="12.51,4.23 12.51,0.49 8.77,0.49 9.68,1.4 6.92,4.16 8.84,6.08 11.6,3.32  "></polygon>
 +
        <polygon points="0.49,8.77 0.49,12.51 4.23,12.51 3.32,11.6 6.08,8.83 4.17,6.92 1.4,9.68  "></polygon>
 +
        <polygon points="1.85,5.59 5.59,5.59 5.59,1.85 4.68,2.76 1.92,0 0,1.92 2.76,4.68  "></polygon>
 +
        <polygon points="11.15,7.41 7.41,7.41 7.41,11.15 8.32,10.24 11.08,13 13,11.08 10.24,8.32  "></polygon>
 +
      </g>
 +
    </g>
 +
  </g></g></g><g transform="translate(270,0)" id="id_24c0b88a-5352-4ad3-949f-0ebf89801c05" class="network"><g class="network_container_normal">
 +
    <rect rx="9" ry="9" width="17" height="500" style="fill: rgb(255, 127, 14);" class="network-rect"></rect>
 +
    <text x="250" y="-4" class="network-name" transform="rotate(90 0 0)" pointer-events="none">netPriYlin</text>
 +
    <text x="495" y="-20" class="network-cidr" transform="rotate(90 0 0)">192.168.100.0/24</text>
 +
  </g><g transform="translate(98.5,150)" id="id_16e96b51-06d9-4387-95f2-fdce973b0e8c" class="device"><g class="instance_normal device_body">
 +
    <g class="ports" pointer-events="none"><g transform="translate(0,25)" id="id_ddba7f0e-60ad-4566-bac4-906ba546456a" class="port"><line x2="-82" y2="0" y1="0" x1="0" stroke="#ff7f0e" stroke-width="6" class="port_line"></line><text y="-4" x="-6" class="port_text left">192.168.100.13</text></g></g>
 +
    <rect class="frame" x="0" y="0" rx="6" ry="6" width="90" height="50"></rect>
 +
    <g class="texts">
 +
      <rect class="texts_bg" x="1.5" y="32" width="87" height="17"></rect>
 +
      <text x="45" y="46" class="type">Instance</text>
 +
      <text x="45" y="22" class="name">D104</text>
 +
    </g>
 +
    <g class="icon" transform="translate(6,6)">
 +
      <circle class="icon_bg" cx="0" cy="0" r="12"></circle>
 +
      <g transform="translate(-5,-6.5)">
 +
        <rect class="instance_bg" width="10" height="13"></rect>
 +
        <rect x="2" y="1" fill="#FFFFFF" width="6" height="2"></rect>
 +
        <rect x="2" y="4" fill="#FFFFFF" width="6" height="2"></rect>
 +
        <circle class="active" cx="3" cy="10" r="1.3"></circle>
 +
      </g>
 +
    </g>
 +
  </g></g><g transform="translate(98.5,220)" id="id_5aa7a5ff-71cd-45dd-a25e-936110c91c3e" class="device"><g class="instance_normal device_body">
 +
    <g class="ports" pointer-events="none"><g transform="translate(0,25)" id="id_440178b0-c82b-4bee-ae66-c7c359fb6210" class="port"><line x2="-82" y2="0" y1="0" x1="0" stroke="#ff7f0e" stroke-width="6" class="port_line"></line><text y="-4" x="-6" class="port_text left">192.168.100.12</text></g></g>
 +
    <rect class="frame" x="0" y="0" rx="6" ry="6" width="90" height="50"></rect>
 +
    <g class="texts">
 +
      <rect class="texts_bg" x="1.5" y="32" width="87" height="17"></rect>
 +
      <text x="45" y="46" class="type">Instance</text>
 +
      <text x="45" y="22" class="name">D103</text>
 +
    </g>
 +
    <g class="icon" transform="translate(6,6)">
 +
      <circle class="icon_bg" cx="0" cy="0" r="12"></circle>
 +
      <g transform="translate(-5,-6.5)">
 +
        <rect class="instance_bg" width="10" height="13"></rect>
 +
        <rect x="2" y="1" fill="#FFFFFF" width="6" height="2"></rect>
 +
        <rect x="2" y="4" fill="#FFFFFF" width="6" height="2"></rect>
 +
        <circle class="active" cx="3" cy="10" r="1.3"></circle>
 +
      </g>
 +
    </g>
 +
  </g></g></g></svg>

Version du 30 mai 2016 à 13:59

Virtualiser dans une VM

Création de une VM avec kvm et libvirt

Kernel-based Virtual Machine (KVM) est un logiciel hyperviseur pour Linux. Il fonctionne originellement sur les processeurs à architectures x86, x86_64 disposant des instructions de Virtualisation Intel VT ou AMD-V. QEMU est capable, grâce à son module KQEMU (K pour Kernel, « noyau » en anglais), d'exécuter du code machine directement sur le processeur hôte afin d'accélérer l'émulation.

libvirt est une bibliothèque, une API, un daemon et des outils en logiciel libre de gestion de la virtualisation. Elle est notamment utilisée par KVM, Xen, VMware ESX, QEMU et d'autres solutions de virtualisation. Elle est notamment utilisée par la couche d'orchestration des hyperviseurs.

Les paquetages à installer installer:

   apt-get install qemu-kvm libvirt-bin

Créer une image de disque

Pour commencer il faut créer les image de disque dans les quelles les VMs stockeront les donnée. Pour créer une image de disque de format RAW il est suffit de lancer le command

   qemu-img create -f raw disk.img 8G

Il est aussi possible de créer une image de format QCOW2 qui supporter les technologies "copy on write" et "snapshot" pour les VMs.

   qemu-img create -f qcow2 disk.img 8G

Il est pratique de créer une image de swap

   dd if=/dev/zero of=/swapfile1 bs=1024 count=524288

Comm:

   if=/dev/zero : Read from /dev/zero file. /dev/zero is a special file in that provides as many null characters.
   of=/swapfile1 : Read from /dev/zero write storage file to /swapfile1.
   bs=1024 : Read and write 1024 BYTES bytes at a time.
   count=524288 : Copy only 523288 BLOCKS input blocks.

Fichier de configuration libvirt

Une VM gérée par libvirt est définie par un fichier XML. Ici une exemple qui définie un VM.Fichier:Lisa.xml.zip Vous prouvez trouvez le définition de ce fichier au site web de libvirt.

Gréer les VMs avec libvirt

Commande à utiliser: virsh Lancer une VM:

   virsh --connect qemu:///system create <fichier.xml> 

Lister les VMs:

   virsh --connect qemu:///system list 

Arrêter une VM:

   virsh --connect qemu:///system shutdown <nom de la VM>

Connecter ver les VMs

Vous prouvez connecter ver vnc. La package à installer: vncviewer. Commande à utiliser: vncviewer localhost

Établir des ponts entre les connexions réseaux

Pour que les VMs peuvent être une partie de la réseaux d’école il faut de creer un pont virtuel. Le programme dont vous allez avoir besoin s'appelle brctl et fait parti de bridge-utils.

   apt-get install bridge-utils

Pour créer le pont il faut modifier le fichier de configuration des interface: /etc/network/interfaces ici une exemple qui créera un pont nommé br0 a partir de la .

  source /etc/network/interfaces.d/*
  auto lo
    iface lo inet loopback
  iface eth0 inet manual
  auto br0  
    iface br0 inet dhcp 
    bridge_ports eth0

Le création du pont configurer le carte réseau à la mode promiscuité. Les relus dans le filtres iptables bloquera les package redirecté. Donc il nécessaire de modifier le fichier de configuration de iptables /etc/iptables.up.rules il faut que dans le section filter il y a FORWARD ACCEPT [0:0].

Il faut faire un reboot après les configurations. Il faut que vous trouvez avec ifconfig, le br0 prend une adresse ipv4 du réseau INSECURE donc 172.26.*.* et la interface eth0 ne prend pas un adresse ipv4.

Configure dans les VMs

Il faut fixer l'adresse à la main dans les VMs. Vous prouvez modifier le fichier /etc/network/interfaces et le fichier /etc/resolv.conf dans le fenêtre de vncviewer. Il faut aussi configure les proxy de ecole avec le commande

    export http_proxy=http://proxy.polytech-lille.fr:3128

Activer le mod nested

Pour faire une virtualisation imbriqué avec kvm il faut activer le fonction VT-x dans les cpus avec les commande suivent:

   echo "options kvm-intel nested=1" >> /etc/modprobe.d/kvm-intel.conf
   rmmod kvm_intel
   modprobe kvm-intel nested=1
   cat /sys/module/kvm_intel/parameters/nested

Pour les VMs il fut que les vcpus supporter VT-x. Donc dans le xml on fixer le model de vcpus, ici une example de la section cpu dans le xml ou on utiliser les vcpus de model SandyBridge et fonction vmx (VT-x) activé.

 <vcpu>4</vcpu> 
 <cpu mode='custom' match='exact'>
   <model fallback='allow'>SandyBridge</model>
   <vendor>Intel</vendor>
   <topology sockets='2' cores='1' threads='2'/>
   <feature policy='require' name='vmx'/>
 </cpu>

Noede nœud calcul virtuel

Une fois que une VM a lancer vous prouvez suivre les guides sur http://rex.plil.fr/Enseignement/Reseau/AtelierInfonuagique.GIS4/atelier_infonuagique.html pour configure un nœud de calcul. Ici, dans cette section nous allons créer un système automatique pour configure les nœuds. Le script deploy.sh créera une structure de fichier d’après le route dirWD:

(dirWD)
 ├── img
 │   ├── kvm-lisaB.img
 │   ├── kvm-lisaBSwap.img
 ├── temp
 │   └── kvm-lisaB
 │       ├── conf.d
 │       │   ├── hostname
 │       │   ├── hosts
 │       │   ├── interfaces
 │       │   ├── kvm.xml
 │       │   ├── ml2_conf.ini
 │       │   ├── neutron.conf
 │       │   ├── nova.conf
 │       │   ├── ovs_neutron_plugin.ini
 │       │   └── sysctl.conf
 │       └── imgRoot
 └── xml
     └── kvm-lisaB.xml

Montre les image

Nous avons utiliser les images de formule QCOW2 pour créer les nœuds donc pour modifier les images il faut utiliser qemu-nbd. Il faut activer le module nbd de linux avec le commande modprobe nbd. Pour montre une image qcow2 il faut

   qemu-nbd -c /dev/nbd0 disk.img --format=qcow2
   kpartx -a /dev/nbd0
   mkdir /media/diskqcow2
   mount /dev/mapper/nbd0p1 /media/diskqcow2

Pour déconnecter

   umount /media/diskqcow2
   qemu-nbd -d /dev/nbd0

Modifier les fichier de configuration

Pour les nœud de calcul les fichier suivent droit être modifier:

hostname                  # nom du nœud
hosts                     # nom du nœud
interfaces                # adresse ip etc.
kvm.xml                   # configuration de VM
ml2_conf.ini              # configuration de ml2
neutron.conf              # configuration de neutron
nova.conf                 # configuration de nova
ovs_neutron_plugin.ini    # configuration de ovs
sysctl.conf               # configuration de flitre

Nous allons modifier les fichiers avec "sed". Le script créera d'abord une copie des modeles de fichiers de configuration dans (dirWD)/temp/(nomDeVM)/conf.d apres, il modifiera les paramètres dans les fichiers.

Une fois le modification a fini le script copiera les fichier dans le image. Vous prouvez trouvez ici une example de script.Fichier:Deploy.sh.zip. A la fin pour lancer les VMs il est suffit de faire

 virsh --connect qemu:///system create (dirWD)/xml/(nomDeVM).xml

Configuration Internet OpenStack

<svg width="540" height="500" id="topology_canvas">

 <defs>
   <pattern id="device_normal_bg" patternUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
     <g>
       <rect width="20" height="20" class="base_bg_normal"></rect>
     </g>
   </pattern>
   <pattern id="device_normal_bg_loading" patternUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
     <g>
       <rect width="20" height="20" class="loading_bg_normal"></rect>
       <path d="M0 20L20 0ZM22 18L18 22ZM-2 2L2 -2Z" stroke-linecap="square" stroke="rgba(0, 0, 0, 0.3)" stroke-width="7"></path>
     </g>
     <animate attributeName="x" attributeType="XML" begin="0s" dur="0.5s" from="0" to="-20" repeatCount="indefinite"></animate>
   </pattern>
   <pattern id="device_small_bg" patternUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
     <g>
       <rect width="20" height="20" class="base_bg_small"></rect>
     </g>
   </pattern>
   <pattern id="device_small_bg_loading" patternUnits="userSpaceOnUse" x="0" y="0" width="5" height="5">
     <g>
       <rect width="5" height="5" class="loading_bg_small"></rect>
       <path d="M0 5L5 0ZM6 4L4 6ZM-1 1L1 -1Z" stroke-linecap="square" stroke="rgba(0, 0, 0, 0.4)" stroke-width="1.5"></path>
     </g>
     <animate attributeName="x" attributeType="XML" begin="0s" dur="0.5s" from="0" to="-5" repeatCount="indefinite"></animate>
   </pattern>
 </defs>

<g transform="translate(0,0)" id="id_31af9740-771f-4c5c-b644-4f7da9f57827" class="network"><g class="network_container_normal">

   <rect rx="9" ry="9" width="17" height="500" style="fill: rgb(31, 119, 180);" class="network-rect"></rect>
   <text x="250" y="-4" class="network-name" transform="rotate(90 0 0)" pointer-events="none">netPublic</text>
   <text x="495" y="-20" class="network-cidr" transform="rotate(90 0 0)">193.48.65.192/26</text>
 </g><g transform="translate(98.5,80)" id="id_5fd71818-fe7d-4cf4-ab01-ff1b2185b1a3" class="device"><g class="router_normal device_body">
   <g class="ports" pointer-events="none"><g transform="translate(90,25)" id="id_1c5a1de1-96e6-4bfd-9128-970a1d97b788" class="port"><line x2="82" y2="0" y1="0" x1="0" stroke="#ff7f0e" stroke-width="6" class="port_line"></line><text y="-4" x="6" class="port_text">192.168.100.1</text></g><g transform="translate(0,25)" id="id_93dcb6e4-22b3-4301-b739-479ece15fbb2" class="port"><line x2="-82" y2="0" y1="0" x1="0" stroke="#1f77b4" stroke-width="6" class="port_line"></line><text y="-4" x="-6" class="port_text left">193.48.65.196</text></g></g>
   <rect class="frame" x="0" y="0" rx="6" ry="6" width="90" height="50"></rect>
   <g class="texts" pointer-events="none">
     <rect class="texts_bg" x="1.5" y="32" width="87" height="17"></rect>
     <text x="45" y="46" class="type">Router</text>
     <text x="45" y="22" class="name">routerPub..</text>
   </g>
   <g class="icon" transform="translate(6,6)" pointer-events="none">
     <circle class="icon_bg" cx="0" cy="0" r="12"></circle>
     <g transform="translate(-6.5,-6.5)">
       <polygon points="12.51,4.23 12.51,0.49 8.77,0.49 9.68,1.4 6.92,4.16 8.84,6.08 11.6,3.32  "></polygon>
       <polygon points="0.49,8.77 0.49,12.51 4.23,12.51 3.32,11.6 6.08,8.83 4.17,6.92 1.4,9.68  "></polygon>
       <polygon points="1.85,5.59 5.59,5.59 5.59,1.85 4.68,2.76 1.92,0 0,1.92 2.76,4.68   "></polygon>
       <polygon points="11.15,7.41 7.41,7.41 7.41,11.15 8.32,10.24 11.08,13 13,11.08 10.24,8.32  "></polygon>
     </g>
   </g>
 </g></g></g><g transform="translate(270,0)" id="id_24c0b88a-5352-4ad3-949f-0ebf89801c05" class="network"><g class="network_container_normal">
   <rect rx="9" ry="9" width="17" height="500" style="fill: rgb(255, 127, 14);" class="network-rect"></rect>
   <text x="250" y="-4" class="network-name" transform="rotate(90 0 0)" pointer-events="none">netPriYlin</text>
   <text x="495" y="-20" class="network-cidr" transform="rotate(90 0 0)">192.168.100.0/24</text>
 </g><g transform="translate(98.5,150)" id="id_16e96b51-06d9-4387-95f2-fdce973b0e8c" class="device"><g class="instance_normal device_body">
   <g class="ports" pointer-events="none"><g transform="translate(0,25)" id="id_ddba7f0e-60ad-4566-bac4-906ba546456a" class="port"><line x2="-82" y2="0" y1="0" x1="0" stroke="#ff7f0e" stroke-width="6" class="port_line"></line><text y="-4" x="-6" class="port_text left">192.168.100.13</text></g></g>
   <rect class="frame" x="0" y="0" rx="6" ry="6" width="90" height="50"></rect>
   <g class="texts">
     <rect class="texts_bg" x="1.5" y="32" width="87" height="17"></rect>
     <text x="45" y="46" class="type">Instance</text>
     <text x="45" y="22" class="name">D104</text>
   </g>
   <g class="icon" transform="translate(6,6)">
     <circle class="icon_bg" cx="0" cy="0" r="12"></circle>
     <g transform="translate(-5,-6.5)">
       <rect class="instance_bg" width="10" height="13"></rect>
       <rect x="2" y="1" fill="#FFFFFF" width="6" height="2"></rect>
       <rect x="2" y="4" fill="#FFFFFF" width="6" height="2"></rect>
       <circle class="active" cx="3" cy="10" r="1.3"></circle>
     </g>
   </g>
 </g></g><g transform="translate(98.5,220)" id="id_5aa7a5ff-71cd-45dd-a25e-936110c91c3e" class="device"><g class="instance_normal device_body">
   <g class="ports" pointer-events="none"><g transform="translate(0,25)" id="id_440178b0-c82b-4bee-ae66-c7c359fb6210" class="port"><line x2="-82" y2="0" y1="0" x1="0" stroke="#ff7f0e" stroke-width="6" class="port_line"></line><text y="-4" x="-6" class="port_text left">192.168.100.12</text></g></g>
   <rect class="frame" x="0" y="0" rx="6" ry="6" width="90" height="50"></rect>
   <g class="texts">
     <rect class="texts_bg" x="1.5" y="32" width="87" height="17"></rect>
     <text x="45" y="46" class="type">Instance</text>
     <text x="45" y="22" class="name">D103</text>
   </g>
   <g class="icon" transform="translate(6,6)">
     <circle class="icon_bg" cx="0" cy="0" r="12"></circle>
     <g transform="translate(-5,-6.5)">
       <rect class="instance_bg" width="10" height="13"></rect>
       <rect x="2" y="1" fill="#FFFFFF" width="6" height="2"></rect>
       <rect x="2" y="4" fill="#FFFFFF" width="6" height="2"></rect>
       <circle class="active" cx="3" cy="10" r="1.3"></circle>
     </g>
   </g>
 </g></g></g></svg>