0% ont trouvé ce document utile (0 vote)
84 vues27 pages

Openstack

Le projet CLOUD COMPUTING présente une architecture cloud hybride pour l'Université Abdelmalek Essaâdi, répondant aux besoins en plateformes d'apprentissage en ligne, ressources de recherche et services administratifs. Les simulations effectuées montrent un taux de réussite de 100 % pour les tâches, bien que le temps de réponse moyen soit élevé, suggérant des améliorations nécessaires. OpenStack est également testé pour vérifier la fonctionnalité des services middleware et la mise en œuvre d'une infrastructure en tant que service (IaaS).

Transféré par

bnpo2722
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
84 vues27 pages

Openstack

Le projet CLOUD COMPUTING présente une architecture cloud hybride pour l'Université Abdelmalek Essaâdi, répondant aux besoins en plateformes d'apprentissage en ligne, ressources de recherche et services administratifs. Les simulations effectuées montrent un taux de réussite de 100 % pour les tâches, bien que le temps de réponse moyen soit élevé, suggérant des améliorations nécessaires. OpenStack est également testé pour vérifier la fonctionnalité des services middleware et la mise en œuvre d'une infrastructure en tant que service (IaaS).

Transféré par

bnpo2722
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Faculté des Sciences et Techniques

Tanger

Projet CLOUD COMPUTING

Élève : Encadrants :
BEN SAADA Ziad Chaker EL
AMRANI
Contents
Part 1: CloudSim.............................................................................................................................4
Aperçu des besoins cloud de l'UAE.....................................................................................................4
Architecture cloud proposée..............................................................................................................4
Modèles de service :.......................................................................................................................4
Modèles de déploiement :..............................................................................................................4
Composants principaux :................................................................................................................5
Description des scénarios simulés......................................................................................................5
Scénario 1 : Pic d'utilisation des plateformes d'apprentissage en ligne..........................................5
Scénario 2 : Besoins en calcul pour la recherche............................................................................5
Scénario 3 : Services administratifs en ligne...................................................................................5
Simulation Scénario 1 avec CloudSim.................................................................................................6
Résultats et analyse des simulations................................................................................................11
Résumé des résultats :..................................................................................................................11
Analyse des résultats :..................................................................................................................11
Recommandations :..........................................................................................................................11
Part 2: OpenStack................................................................................................................................13
Test the Middleware Functionality...................................................................................................13
Keystone (Identity Service):..........................................................................................................13
Glance (Image Service):................................................................................................................14
Neutron (Networking Service):.....................................................................................................15
Implement an IaaS............................................................................................................................16
Develop a SaaS.................................................................................................................................23
Prepare cirrOS Instance................................................................................................................23
Create a Static HTML Page............................................................................................................24
Start the netcat HTTP Server........................................................................................................24
Allow HTTP Traffic.........................................................................................................................24
Test the SaaS.................................................................................................................................25
Part 3: Service Level Agreement (SLA).................................................................................................26
Création de fichier SLA.....................................................................................................................26
Install Virtual Environment Tools:.................................................................................................26
Create a Virtual Environment:......................................................................................................26
Activate the Virtual Environment:................................................................................................27
Install openstacksdk:....................................................................................................................27
Création de Script Python.................................................................................................................27
Déploiement du Script......................................................................................................................29
Configuration les Variables d’Environnement :.............................................................................29
Exécution du Script :.....................................................................................................................29
Résultats dans le Fichier sla.txt:....................................................................................................29
Explications des Modules Utilisés.................................................................................................29
Rapport Final Exemple dans sla.txt:..................................................................................................30
Part 1: CloudSim
Aperçu des besoins cloud de l'UAE
L'Université Abdelmalek Essaâdi est composée de 16 établissements
universitaires répartis sur plusieurs villes, notamment Tétouan, Tanger, Larache
et Al Hoceima.

L'effectif des étudiants dépasse les 60 000, dont 3 000 doctorants.

Les besoins spécifiques de l'UAE incluent :

 Plateformes d'apprentissage en ligne : pour faciliter l'enseignement à


distance et les ressources pédagogiques.
 Ressources informatiques pour la recherche : pour soutenir les
projets de recherche nécessitant une puissance de calcul élevée.
 Services administratifs numériques : pour gérer les inscriptions, les
dossiers étudiants et les communications internes.
 Outils de collaboration : pour favoriser le travail en équipe entre
étudiants, enseignants et chercheurs.

Architecture cloud proposée


Pour répondre aux besoins de l'UAE, une architecture cloud hybride est
recommandée, combinant des solutions de cloud privé et public.

Modèles de service :

 Infrastructure en tant que service (IaaS) : fournir des machines


virtuelles et du stockage pour les besoins de recherche et administratifs.
 Plateforme en tant que service (PaaS) : offrir des plateformes pour le
développement d'applications par les étudiants et les chercheurs.
 Logiciel en tant que service (SaaS) : héberger des applications telles
que des plateformes d'apprentissage en ligne et des outils de
collaboration.

Modèles de déploiement :

 Cloud privé : pour les données sensibles et les systèmes internes de


l'université.
 Cloud public : pour les services nécessitant une évolutivité, comme les
plateformes d'apprentissage en ligne.

Composants principaux :

 Machines virtuelles : pour exécuter les applications et services


nécessaires.
 Stockage cloud : pour les documents, les ressources pédagogiques et les
données de recherche.
 Réseautage : pour assurer une communication fluide entre les différents
campus et les ressources cloud.
Pour concevoir une architecture cloud adaptée à l'Université Abdelmalek Essaâdi (UAE), il
est essentiel de comprendre ses besoins spécifiques, de proposer une architecture cloud
appropriée, de décrire les scénarios simulés, d'analyser les résultats des simulations et de
recommander le meilleur scénario.

Description des scénarios simulés


Pour évaluer l'efficacité de l'architecture proposée, plusieurs scénarios
peuvent être simulés :

Scénario 1 : Pic d'utilisation des plateformes d'apprentissage


en ligne

o Objectif : évaluer la performance du système lors des périodes de


forte affluence, comme les examens.
o Simulation : modéliser une augmentation significative du trafic et
observer la réponse du système.

Scénario 2 : Besoins en calcul pour la recherche

o Objectif : tester la capacité du cloud à gérer des tâches de calcul


intensives pour les projets de recherche.
o Simulation : allouer des ressources pour des simulations complexes
et mesurer les temps de traitement.

Scénario 3 : Services administratifs en ligne

o Objectif : assurer la disponibilité et la fiabilité des services


administratifs numériques.
o Simulation : introduire des pannes simulées et évaluer les
mécanismes de reprise.

Simulation Scénario 1 avec CloudSim

package org.cloudbus.cloudsim.examples;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import org.cloudbus.cloudsim.*;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.provisioners.*;

public class Scenario1Simulation {


public static DatacenterBroker broker;
private static List<Cloudlet> cloudletList;
private static List<Vm> vmlist;

public static void main(String[] args) {


Log.println("Starting E-Learning Platform Peak Usage Simulation...");

try {
// Initialize CloudSim
int num_user = 1;
Calendar calendar = Calendar.getInstance();
boolean trace_flag = false;

CloudSim.init(num_user, calendar, trace_flag);

// Create Datacenter
Datacenter datacenter0 = createDatacenter("Datacenter_0");

// Create Broker
broker = new DatacenterBroker("Broker");
int brokerId = broker.getId();

// Create VMs for different services


vmlist = new ArrayList<>();

// Different VM configurations for different services


int[] mipsConfigs = {2000, 1500, 1000}; // High, medium, and low
performance VMs
int[] ramConfigs = {4096, 2048, 1024}; // RAM configurations in MB

int vmid = 0;
// Create VMs of different configurations
for (int config = 0; config < mipsConfigs.length; config++) {
for (int i = 0; i < 5; i++) { // 5 VMs of each type
Vm vm = new Vm(vmid++, brokerId, mipsConfigs[config], 2,
ramConfigs[config], 1000, 10000, "Xen",
new CloudletSchedulerTimeShared());
vmlist.add(vm);
}
}

broker.submitGuestList(vmlist);

// Create cloudlets representing different e-learning activities


cloudletList = new ArrayList<>();

// Different lengths for different types of activities


long[] taskLengths = {
10000, // Light tasks (page views, quiz submissions)
25000, // Medium tasks (video streaming, file uploads)
50000 // Heavy tasks (video conferencing, complex simulations)
};

int cloudletId = 0;
// Simulate peak period with many concurrent users
for (int userId = 0; userId < 500; userId++) { // 500 concurrent users
for (int taskType = 0; taskType < taskLengths.length; taskType++) {
Cloudlet cloudlet = new Cloudlet(cloudletId++,
taskLengths[taskType],
2, 300, 300, new UtilizationModelFull(),
new UtilizationModelFull(), new UtilizationModelFull());
cloudlet.setUserId(brokerId);
cloudletList.add(cloudlet);
}
}

broker.submitCloudletList(cloudletList);

// Start simulation
CloudSim.startSimulation();

// Get results
List<Cloudlet> newList = broker.getCloudletReceivedList();
CloudSim.stopSimulation();

printCloudletList(newList);

Log.println("E-Learning Platform Peak Usage Simulation finished!");

} catch (Exception e) {
e.printStackTrace();
Log.println("The simulation has been terminated due to an unexpected
error");
}
}

private static Datacenter createDatacenter(String name) {


List<Host> hostList = new ArrayList<>();

// Create powerful hosts to handle peak load


List<Pe> peList = new ArrayList<>();
int mips = 3000; // Higher MIPS for better performance

// 4 processors per host


for(int i = 0; i < 4; i++) {
peList.add(new Pe(i, new PeProvisionerSimple(mips)));
}

// Create hosts with high capacity


int ram = 32768; // 32 GB RAM
long storage = 2000000; // 2 TB storage
int bw = 20000; // 20 Gbps

// Create multiple hosts


for(int hostId = 0; hostId < 3; hostId++) { // 3 powerful hosts
hostList.add(new Host(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList,
new VmSchedulerTimeShared(peList)
));
}

String arch = "x86";


String os = "Linux";
String vmm = "Xen";
double time_zone = 10.0;
double cost = 3.0;
double costPerMem = 0.05;
double costPerStorage = 0.001;
double costPerBw = 0.0;

DatacenterCharacteristics characteristics = new DatacenterCharacteristics(


arch, os, vmm, hostList, time_zone, cost, costPerMem,
costPerStorage, costPerBw);

Datacenter datacenter = null;


try {
datacenter = new Datacenter(name, characteristics,
new VmAllocationPolicySimple(hostList), new LinkedList<Storage>(),
0);
} catch (Exception e) {
e.printStackTrace();
}

return datacenter;
}

private static void printCloudletList(List<Cloudlet> list) {


int size = list.size();
Cloudlet cloudlet;

String indent = " ";


Log.println();
Log.println("========== E-Learning Platform Peak Usage Results
==========");
Log.println("Cloudlet ID" + indent + "STATUS" + indent +
"Data center ID" + indent + "VM ID" + indent +
"Time" + indent + "Start Time" + indent + "Finish Time");

DecimalFormat dft = new DecimalFormat("###.##");


int successfulTasks = 0;
double totalResponseTime = 0.0;
double maxResponseTime = 0.0;

for (Cloudlet value : list) {


cloudlet = value;
Log.print(indent + cloudlet.getCloudletId() + indent + indent);

if (cloudlet.getStatus() == Cloudlet.CloudletStatus.SUCCESS) {
successfulTasks++;
double responseTime = cloudlet.getFinishTime() -
cloudlet.getExecStartTime();
totalResponseTime += responseTime;
maxResponseTime = Math.max(maxResponseTime, responseTime);

Log.print("SUCCESS");
Log.println(indent + indent + cloudlet.getResourceId() +
indent + indent + cloudlet.getGuestId() +
indent + indent + dft.format(cloudlet.getActualCPUTime()) +
indent + indent + dft.format(cloudlet.getExecStartTime()) +
indent + indent + dft.format(cloudlet.getFinishTime()));
}
}

// Print analysis for e-learning platform performance


Log.println("\n============= Performance Analysis
=============");
Log.println("Total number of tasks: " + size);
Log.println("Successfully completed tasks: " + successfulTasks);
Log.println("Success Rate: " + dft.format((successfulTasks * 100.0) / size) +
"%");
Log.println("Average Response Time: " + dft.format(totalResponseTime /
successfulTasks) + " seconds");
Log.println("Maximum Response Time: " + dft.format(maxResponseTime) + "
seconds");

Log.println("==========================================
====");
}
}

 Performance Analysis
Résultats et analyse des simulations
La simulation pour le scénario de pic d'utilisation des plateformes
d'apprentissage en ligne a été réalisée avec succès. Les résultats obtenus sont
les suivants :

Résumé des résultats :

 Nombre total de tâches simulées (Cloudlets) : 1500


 Tâches complétées avec succès : 1500
 Taux de réussite : 100%
 Temps de réponse moyen : 1798,58 secondes
 Temps de réponse maximal : 4249,93 secondes

Analyse des résultats :

1. Taux de réussite :
o Un taux de réussite de 100 % indique que toutes les tâches ont été
correctement exécutées par les machines virtuelles (VM). Cela
montre que l'infrastructure cloud configurée est suffisante pour
gérer la charge de travail générée pendant les périodes de forte
affluence.

2. Temps de réponse moyen :


o Le temps de réponse moyen est relativement élevé (1798,58
secondes), ce qui peut être attribué au grand nombre de tâches
simultanées et à la complexité des calculs. Cela suggère que
l'infrastructure peut nécessiter des améliorations, comme l'ajout de
VMs plus performantes ou l'optimisation des allocations des tâches.

3. Temps de réponse maximal :


o Le temps de réponse maximal (4249,93 secondes) indique que
certaines tâches, probablement les plus complexes (par exemple,
les simulations vidéo ou les tâches de conférence en ligne), ont pris
beaucoup de temps à s'exécuter. Cela reflète une surcharge
temporaire des ressources.
Recommandations :
La simulation montre que l'architecture cloud est fonctionnelle pour gérer le pic d'utilisation
des plateformes d'apprentissage en ligne. Cependant, pour améliorer davantage les
performances, les actions suivantes sont recommandées :

 Ajouter des machines virtuelles avec des capacités plus élevées (plus de MIPS et de RAM)
pour réduire les temps de réponse.
 Optimiser l'algorithme d'allocation des ressources pour mieux équilibrer la charge entre les
machines virtuelles.

 Évaluer l'impact de la redondance (ajout d'autres Datacenters) pour garantir une meilleure
répartition de la charge en cas de surcharge.

Part 2: OpenStack
Test the Middleware Functionality
OpenStack middleware facilitates various services (e.g., Keystone for
identity, Neutron for networking, and Glance for images). To test it:

Keystone (Identity Service):

o List available projects:

$ openstack project list

o Create a new user to verify it works:

$ openstack user create --domain default --password testuser testuser


Glance (Image Service):

o Verify image listing:

$ openstack image list

o Add a test image:

$ wget http://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-
disk.img

$ openstack image create "cirros" --file cirros-0.6.1-x86_64-


disk.img --disk-format qcow2 --container-format bare --public
Neutron (Networking Service):

o Verify networks:

$ openstack network list

o Create a new network for testing:

$ openstack network create test-network


$ openstack subnet create --network test-network --subnet-range 192.168.1.0/24 test-
subnet
Implement an IaaS
 Create router from network/Router

 Create Internal Network Network network/network

 Add this network to the interface of the router just created


 Create Instance Compute/Instances
 Click Launch Instance

 Source : select the image


 Flavor: select the requirements

 Network: select network just created (ext-net)


 Key Pair: import public key

$ ssh-keygen -t rsa -b 4096


 After that , Launch Instance

 In Instance , Action , click on Associate Floating IP

 Click on Allocate Floating IP


 And then Allocate IP

 And Then Associate.


 pour connecter via ssh , we need to add a rule to work Network/Security
Groups
 and then manage rules -> add rule

 And then click add

 Now from my machine:

$ ssh [email protected]
 I connect with rsa key without any password!

 This is our Network Topology

Develop a SaaS
Prepare cirrOS Instance

 Access the cirrOS Instance:

$ ssh [email protected]

 Verify netcat Availability: cirrOS includes netcat by default. Confirm


it's available:

$ nc --version

 If it outputs a version, it’s good to go.

Create a Static HTML Page

Since cirrOS cannot run sophisticated servers like Apache, we serve static
content instead.

 Create an HTML file inside the instance:

$ echo "<h1>Welcome to Our SaaS Application!</h1>" > index.html

Start the netcat HTTP Server

 Use netcat to serve the HTML file on port 80:


$ while true; do
echo -e "HTTP/1.1 200 OK\r\a-Length: $(wc -c < index.html)\r\n\r\n$(cat index.html)"
| nc -l -p 80;
done

 This command:

o Creates an HTTP response header (HTTP/1.1 200 OK).


o Reads the content of index.html.
o Listens on port 80 using netcat.

Allow HTTP Traffic

 Open the HTTP port (80) in OpenStack's security group:

 Or with command line

$ openstack security group rule create --proto tcp --dst-port 80 default

Test the SaaS

 Open a web browser on local machine.


 Enter the floating IP of the cirrOS instance:

$ http://<floating-ip> ( in my case 10.0.3.20 )


Part 3: Service Level Agreement (SLA)
Cette solution inclut la création du fichier SLA, le développement du programme
Python pour la surveillance des instances, et l'intégration des rapports dans le
fichier SLA.

Création de fichier SLA


Le fichier SLA contiendra les termes de l'accord, notamment l'objectif de
disponibilité à 99,5 % et les règles de surveillance.

 Exemple de contenu de sla.txt :


Service Level Agreement (SLA)

Objectif :
- Surveiller la disponibilité des instances OpenStack.

Conditions :
- Les instances doivent avoir une disponibilité minimale de 99.5% sur une
période d'évaluation quotidienne.
- La disponibilité sera surveillée toutes les 5 minutes.

Rapports :
- Un rapport journalier sera généré et inclus à la fin de ce fichier.
Date de début de l'accord : 2025-01-19

Install Virtual Environment Tools:

$ sudo apt install python3-venv -y

Create a Virtual Environment:

 Create a directory for the virtual environment and initialize it:

$ mkdir ~/openstack-env
$ python3 -m venv ~/openstack-env

Activate the Virtual Environment:

 Activate the virtual environment:

$ source ~/openstack-env/bin/activate
Install openstacksdk:

 The virtual environment is activated, now we can use pip:

$ pip install openstacksdk


Création de Script Python
Le script doit surveiller la disponibilité des instances toutes les 5 minutes,
calculer leur disponibilité sur une période quotidienne, et inclure les résultats
dans le fichier sla.txt.

 Code Python :

import time
from datetime import datetime, timedelta
from openstack import connection

# Connexion à OpenStack
def connect_to_openstack():
conn = connection.Connection(
auth_url="http://10.0.3.8/identity",
project_name="admin",
username="admin",
password="ziadadmin”,
user_domain_name="Default",
project_domain_name="Default",
)
return conn

# Surveiller la disponibilité des instances


def monitor_instances(conn, sla_file):
# Récupérer toutes les instances
instances = conn.compute.servers()
total_instances = 0
available_instances = 0

for instance in instances:


total_instances += 1
# Vérifier l'état de l'instance
if instance.status.lower() == "active":
available_instances += 1

# Calculer la disponibilité
availability = (available_instances / total_instances) * 100 if total_instances
> 0 else 0
return availability, total_instances, available_instances

# Ajouter les résultats au fichier SLA


def update_sla_report(sla_file, availability, total_instances, available_instances):
with open(sla_file, "a") as file:
file.write("\n")
file.write(f"Rapport de surveillance : {datetime.now()}\n")
file.write(f"Instances totales : {total_instances}\n")
file.write(f"Instances disponibles : {available_instances}\n")
file.write(f"Disponibilité : {availability:.2f}%\n")
file.write("-" * 50 + "\n")

# Script principal
def main():
sla_file = "sla.txt"
conn = connect_to_openstack()

start_time = datetime.now()
end_time = start_time + timedelta(days=1) # Surveiller pendant 24 heures

while datetime.now() < end_time:


availability, total_instances, available_instances =
monitor_instances(conn, sla_file)
update_sla_report(sla_file, availability, total_instances,
available_instances)
print(f"Surveillance effectuée. Disponibilité actuelle : {availability:.2f}%")
time.sleep(300) # Pause de 5 minutes

print("Surveillance quotidienne terminée.")

if __name__ == "__main__":
main()

Déploiement du Script
Configuration les Variables d’Environnement :

$ Source ~/devstack/openrc

Exécution du Script :

 Lancement de script avec Python :

$ python monitor_sla.py
Résultats dans le Fichier sla.txt:

 Chaque exécution de surveillance ajoutera une section de rapport avec les


résultats actuels.

Explications des Modules Utilisés

 Nova (Compute):

o Récupère l’état des instances (ex. : ACTIVE, ERROR).

 Ceilometer (Telemetry):

o Peut être utilisé pour collecter des métriques supplémentaires


(optionnel dans ce projet).

 Keystone (Identity):

o Authentifie et autorise les interactions avec OpenStack.

 Neutron (Networking):

o Fournit des informations sur les réseaux et connectivité des


instances.

Rapport Final Exemple dans sla.txt:


Service Level Agreement (SLA)

Objectif :
- Surveiller la disponibilité des instances OpenStack.

Conditions :
- Les instances doivent avoir une disponibilité minimale de 99.5% sur une
période d'évaluation quotidienne.
- La disponibilité sera surveillée toutes les 5 minutes.
Rapports :
- Un rapport journalier sera généré et inclus à la fin de ce fichier.

Date de début de l'accord : 2025-01-19

--------------------------------------------------
Rapport de surveillance : 2025-01-19 10:00:00
Instances totales : 10
Instances disponibles : 10
Disponibilité : 100.00%
--------------------------------------------------

Rapport de surveillance : 2025-01-19 10:05:00


Instances totales : 10
Instances disponibles : 9
Disponibilité : 90.00%
--------------------------------------------------

Vous aimerez peut-être aussi