# PIM Virtual Cloud Management
**Auteurs :** ***Cedrigue DJIONGO, Daniel AFIVI, Oumar Barry, Eric et Ulrich***
[TOC]
Dans le cadre de Projet Inter-Matière, nous avons choisi de mettre en place un cloud virtuel destiné au DevOps.
## Mise en place du cloud virtuel
Nous commençons par la mise en place l'environnement matériels puis nous allons déployer les outils logiciels.

Nous utilisons l'hyperviseur VirtualBox, Ubuntu Server sur les noeuds Openstack et Ubuntu Desktop pour les accès clients.
* Nous avons besoins de 03 réseaux pour notre cloud :
* Mgt Network : 192.168.100.0/24 (Administration du cloud virtuel)
* Internal Network : 192.168.150.0/24 (Communications des Services)
* External Network : 192.168.190.0/24 (Accès client)
* Reseau NAT : 10.0.4.0/24 (Internet/VBox))

* Nous avons les VM suivantes:
### **Controller Node :**
01 CPU, 1Go RAM, 10Go HHD, OS Ubuntu Server 16.04, 03 Cartes réseaux (**NAT** pour Adapter 1, **Mgt Network** pour Adapter 2, **External Network** pour Adapter 3)

* Modifier le fichier `/etc/hosts` comme suit:

* Modifier le fichier `/etc/network/interfaces`

`sudio systemctl restart networking`
* Mise à jour des dépots et des paquets installés:
`sudo apt update -y && sudo apt upgrade -y `
* Installation du serveur de temps NTP pour l'horodatage et les synchronisations :
`sudo apt install ntp -y`
* **Configurer du serveur NTP en modifiant le fichier** `/etc/ntp.conf`

`sudo systemctl restart ntp && sudo ntpq -p`
* **Installation du SGBD Mysql**
```
sudo apt install python3-mysqldb mysql-server -y
sudo nano -l /etc/mysql/mysql.conf.d/mysqld.cnf
```

* **Installation et configurationde RabbitMQ Server**
`curl -fsSL https://github.com/rabbitmq/signing keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -`
`sudo apt-get install apt-transport-https -y`
`sudo apt-get install rabbitmq-server -y --fix-missing`
`sudo rabbitmq-plugins enable rabbitmq_management`
`http://controller:15672/`
`sudo rabbitmqctl add_user openstack openstack`
`sudo rabbitmqctl set_user_tags openstack administrator`
* **Installation et configuration du service Keystone**
* Installation : `sudo apt install keystone python3-openstackclient`
* Configuration
```
sudo su -
sudo nano -l /etc/keystone/keystone.conf
```


`sudo rm /var/lib/keystone/ keystone.db`
* **Creation de la base de donnée et de l'utilisateur pour Keystone**
```
sudo mysql
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
FLUSH PRIVILEGES;
exit;
```
* Création des tables de la base de données *keystone*
` sudo -s /bin/sh -c "keystone-manage db_sync" keystone`

* Génération d'un token de service (via OpenSSL)
```
openssl
rand -hex 10
exit
```
* Copie du Token génénré dans le fichier /etc/keystone/keystone.conf

`systemctl restart keystone`
* Création des utilisateurs, des tenants et de roles
```
export OS_SERVICE_TOKEN=5613d2b8d46d8bb5859d
export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0
keystone user-create --name=openstack --pass=openstack --email=adkot@estiam.com
```

```
keystone role-create --name=adminRole
```

```
keystone tenant-create --name=pimTenant --descriptio="PIM Tenant"
```

```
keystone user-role-add --user=openstack --tenant=pimTenant --role=adminRole
```
* Creation d'un services
```
keystone service-create --name=keystone --type=identity --description="Openstack Identity"
```

* Ajout d'un API Endpoint au service créé
```
keystone endpoint-create --service-id=$(keystone service-list | awk '/ identity / {print$2}') --publicurl=http://controller:5000/v2.0 --internalurl=http://controller:5000/v2.0 --admin=http://controller:35357/v2.0 0
```

* Mise en place de neutron
* Créer la base de donnée nommée neutron et un utilisateur nommée neutron ayant tout les droits sur cette base de données
* Créer un utilisateur dans keystone pour ce service
```
sudo keystone user-create --name neutron --pass openstanck --email pim@estiam.com
keystone user-role-add --user neutron --tenant service --role openstack
keystone service-create --name neutron --type network --description "Openstack Networking"
keystone endpoint-create --service-id $(keystone service-list | awk '/ network / {print $2}') --publicurl http://controller:9696 --adminurl http://controller:9696 --internalurl http://controller:9696
sudo apt install neutron-server neutron-plugin-ml2 -y
```
* Ouvrir le fichier et modifier les lignes suivantes:
```
connection = mysql://neutron:openstack@controller/neutron
auth_strategy = keystone
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = openstack
[keystone_authtoken]
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = a8bb88b2929c419c92a8a136db0b1dc7
admin_user = neutron
admin_password = openstack
#signing_dir = $state_path/keystone-signing
auth_url = http://controller:5000
```
* Ouvrir et configurer le fichier `/etc/neutron/plugins/ml2/ml2_conf`
```
[ml2]
type_drivers = gre
tenant_networks_types = gre
mechanism_drivers = openvswitch
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptables$
enable_security_group = true
```
### **Network Node**
* Caractéristique de la machine: 01 CPU, 1Go RAM, 05Go HHD 
* Modifier le fichier `/etc/hosts` comme suit:

* Modifier le fichier `/etc/netplan/00-installer-config.yaml`

`sudo apt update -y && sudo apt upgrade -y `
* Installation du serveur de temps NTP pour l'horodatage et les synchronisations : `sudo apt install ntp -y`
* Configurer du client NTP `/etc/ntp.conf`  `sudo systemctl restart ntp` `ntpq -c peers` 
* Installation du connecteur pyhton pour le SGBD Mysql `sudo apt install python3-mysqldb -y`
### **Compute Node** : 01 CPU, 1Go RAM, 10Go HHD
* Modifier le fichier `/etc/hosts` comme suit:

* Modifier le fichier `/etc/netplan/00-installer-config.yaml`

`sudo apt update -y && sudo apt upgrade -y `
* Installation du serveur de temps NTP pour l'horodatage et les synchronisations : `sudo apt install ntp -y`
* Configurer du client NTP `/etc/ntp.conf`  `sudo systemctl restart ntp` `ntpq -c peers`
* Installation du connecteur pyhton pour le SGBD Mysql `sudo apt install python3-mysqldb -y`
### **Storage Node : CINDER** : 01 CPU, 1Go RAM, 20Go HHD
* La mise en place de ce noeud s'appuie sur les ressources précedement déployé et fonctionnelles comme Keystone
* Installation des logiciels d'administration sur le noeuds controller
` sudo apt install cinder-api cinder-scheduler -y`
* Modifier le fichier de configuration ` sudo nano /etc/cinder/cinder.conf` 
* Créer la base de données cinder ainsi que l'utilisateur cinder qui aura tout les droits sur cette base de données
```
create database cinder;
grant all privileges on cinder.* to 'cinder'@'localhost' identified by 'openstack';
grant all privileges on cinder.* to 'cinder'@'%' identified by 'openstack'
su -s /bin/sh -c "cinder-manage db sync" cinder
keystone user-create --name=cinder --pass openstack --email cinder@estiam.com
keystone user-role-add --user cinder --tenant service --role admin
keystone service-create --name cinder --type volume --description "Openstack Block Storage"
keystone endpoint-create --service-id $(keystone service-list | awk '/ volume / {print $2}') --publicurl http://controller:8776/v1/%\(tenant_id\)s --adminurl http://controller:8776/v1/%\(tenant_id\)s --internalurl http://controller:8776/v1/%\(tenant_id\)s
```


* Nous avons créé un autre espace de stockage de type bloc

```
keystone endpoint-create --service-id $(keystone service-list | awk '/ volume2 / {print $2}') --publicurl http://controller:8776/v2/%\(tenant_id\)s --adminurl http://controller:8776/v2/%\(tenant_id\)s --internalurl http://controller:8776/v2/%\(tenant_id\)s
```
* Relancer les services cinder-api et cinder-scheduler
```
systemctl enable cinder-api
systemctl enable cinder-scheduler
systemctl restart cinder-api
systemctl restart cinder-scheduler
```
* Configuration et administration du noeud cinder
* Installation des paquets:`sudo apt install lvm2 cinder-api tgt targetcli-fb -y`
* Visualisation des périphériques de stockage :
`lshw -C disk` 
* Initialisation de la partition LVM : `pvcreate /dev/sdb`
* Création des volumes logiques : `vgcreate cinder-volume /dev/sdb`
* Modifier le fichier de configuration retirant le commentaire sur cette ligne: ` filter = [ "a|.*|" ]`
* Installer le paquets: cinder-volume :`sudo apt install cinder-volume -y` et modifier le fichier de configuration `/etc/cinder/cinder.conf` `systemctl restart cinder-volume`