\documentclass[8pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{graphicx}
\usepackage{xcolor}
%%\usepackage{pstricks} %% génère du rouge à la compilation
                        %% En plus, je sais pas à quoi il sert..
\usepackage{alltt}
\usepackage{hyperref}

\usepackage{palatino}
\setbeamercovered{transparent}
\setbeamercolor{section in head/foot}{use=structure,bg=structure.fg!25!bg}
\useoutertheme[footline=authortitle]{miniframes} %subsection=false,
\setbeamertemplate{frametitle}[default][center]
\logo{\includegraphics[width=1.5cm]{images/logoCrans.png}}
%\setbeamertemplate{background}{
% \begin{pspicture}
%\put(1.5,9.8){\includegraphics[width=7cm]{images/fondSwitchs.png}}
%\end{pspicture}
%}
% Les symboles de navigation, c'est moche
\setbeamertemplate{navigation symbols}{}

\author{Vincent Le Gallic}
\institute{Séminaire Technique du Cr@ns}
\date{02 avril 2013}
\title{Virtualisation}



\begin{document}
\begin{frame}
 \maketitle
\end{frame}

%\begin{frame}
% \tableofcontents
%\end{frame}


\section{Introduction}
\subsection{Quoi ?}
\begin{frame}
 \frametitle{La virtualisation, c'est quoi ?}

\begin{block}{Définition de Wikipédia}
La virtualisation consiste à faire fonctionner un ou plusieurs systèmes d'exploitation/applications, sur un serveur/système d'exploitation, au lieu d'en installer un seul par machine.
\end{block}

\bigskip

Le principe est de faire tourner plusieurs \texttt{DomU} peu gourmands en ressources sur un même \texttt{Dom0} (une brute).
\end{frame}

\subsection{Pourquoi ?}
\begin{frame}
 \frametitle{La virtualisation, pourquoi ?}
\begin{itemize}%[<+->]
 \item Un serveur, ça coûte cher.
 \item La plupart du temps, ça se tourne les pouces.
 \item[$\rightarrow$] On répartit les ressources (temps CPU, mémoire, \ldots)
 \item On peut mettre en place un nouveau serveur facilement
 \item On peut allumer/éteindre un serveur plus rapidement
 \item On peut changer facilement les caractéristiques du serveur (coeurs, RAM alloués\ldots)
 \item \ldots
\end{itemize}
\end{frame}

\subsection{Comment ?}
\begin{frame}
 \frametitle{On fait ça comment ?}
 \begin{itemize}
  \item Différentes méthodes sont possibles en fonction de l'utilisation qu'on veut en faire.
  \item En fonction de la méthode utilisée, deux systèmes virtualisés n'auront pas les mêmes choses en commun.
 \end{itemize}
\end{frame}


\section{Les Virtualisations}
\subsection{Un peu}

\begin{frame}
 \frametitle{Isolateur}
\begin{block}{Définition}
Un isolateur est un logiciel permettant d'isoler l'exécution des applications dans ce que l’on appelle des contextes ou bien zones d'exécution. L'isolateur permet ainsi de faire tourner plusieurs fois la même application dans un mode multi-instance (plusieurs instances d’exécution) même si elle n’était pas conçue pour ça.
\end{block}
\begin{center}
 \includegraphics[width=200px]{images/schema_isolateur.png}
\end{center}
\end{frame}

\begin{frame}
 \frametitle{Isolateur}

Exemples :
 \begin{itemize}
  \item \texttt{chroot} : isolation de la racine. Le système de fichier «ignore» qu'il existe un monde extérieur.
  \item \texttt{Linux-VServer} : isolation des processus en espace utilisateur
  \item \texttt{OpenVZ} : partitionnement au niveau noyau sous Linux
 \end{itemize}

\bigskip

$\pm$ :
 \begin{itemize}
  \item[$\oplus$] Peu d'overhead (= temps où le système «se tourne les pouces»)
  \item[$\ominus$] Seulement sous Linux.
  \item[$\ominus$] Les environnements virtualisés ne sont pas complètement isolés.
 \end{itemize}
\end{frame}

\subsection{Beaucoup}
\begin{frame}
 \frametitle{Noyau en userspace}
\begin{block}{Définition}
Un noyau en espace utilisateur (user-space) tourne comme n'importe quelle application en espace utilisateur de l'OS hôte.

Le noyau user-space a donc son propre espace utilisateur dans lequel il contrôle à son tour ses applications.
\end{block}
\begin{center}
 \includegraphics[width=200px]{images/schema_noyau_userspace.png}
\end{center}
\end{frame}

\begin{frame}
 \frametitle{Noyau en userspace}

Exemples :
 \begin{itemize}
  \item \texttt{User Mode Linux} : noyau tournant en espace utilisateur
  \item \texttt{coLinux} : noyau coopératif avec un hôte Windows
 \end{itemize}

\bigskip

$\pm$ :
 \begin{itemize}
  \item[$\oplus$] Utile pour le développement du noyau
  \item[$\ominus$] Pas d'indépendance par rapport au système hôte
  \item[$\ominus$] Isolation des environnements non gérés
  \item[$\ominus$] Deux noyaux empilés $\rightarrow$ très peu performant
 \end{itemize}
\end{frame}

\subsection{Passionément}
\begin{frame}
 \frametitle{Hyperviseur de type 2}
\begin{block}{Définition}
Un hyperviseur de type 2 est un logiciel (lourd) qui tourne sur l'OS hôte. Ce logiciel permet de lancer un ou plusieurs OS invités. La machine émule le matériel pour les OS invités, ces derniers croient dialoguer directement avec ledit matériel.

C'est aussi ce qu'on appelle une \textbf{Machine Virtuelle}.
\end{block}
\begin{center}
 \includegraphics[width=200px]{images/schema_hyperviseur2.png}
\end{center}
\end{frame}

\begin{frame}
 \frametitle{Hyperviseur de type 2}

Exemples :
 \begin{itemize}
  \item \texttt{Microsoft VirtualPC} / \texttt{Virtual Server}
  \item \texttt{Parallels Desktop}
  \item \texttt{VirtualBox} (libre)
  \item \texttt{VMware}
  \item \texttt{QEMU, bochs} : émulateurs de plateforme x86
 \end{itemize}

\bigskip

$\pm$ :
 \begin{itemize}
  \item[$\oplus$] Isolation complète des OS invités.
  \item[$\oplus$] Cohabitation possible de plusieurs OS hétérogènes.
  \item[$\ominus$] Gros coût en performance, notamment si il faut émuler le processeur.
 \end{itemize}
\end{frame}

\subsection{À la folie}
\begin{frame}
 \frametitle{Hyperviseur de type 1}
\begin{block}{Définition}
Un hyperviseur de type 1 est comme un noyau système très léger et optimisé pour gérer les accès des noyaux d'OS invités à l'architecture matérielle sous-jacente.
\end{block}
\begin{center}
 \includegraphics[width=200px]{images/schema_hyperviseur1.png}
\end{center}
\end{frame}

\begin{frame}
 \frametitle{Hyperviseur de type 1}

Exemples :
 \begin{itemize}
  \item \texttt{Microsoft Hyper-V Server}
  \item \texttt{VMware vSphere}
  \item \texttt{KVM} (libre)
  \item \textbf{\texttt{Citrix Xen Server}} (libre)
 \end{itemize}

\bigskip

$\pm$ :
 \begin{itemize}
  \item[$\ominus$] Méthode contraignante (le noyaux hôte n'est plus classique)
  \item[$\oplus$] Plus de flexibilité
  \item[$\oplus$] Meilleure performances, surtout quand on augmente le nombre de système virtualisés
  \item[$\oplus$] Actuellement la méthode de virtualisation d'infrastructure la plus performante
 \end{itemize}
\end{frame}


\section{La Virtualisation au Cr@ns}
\subsection{Dom0}
\begin{frame}
 \frametitle{Les virtualiseurs au Cr@ns}
 \texttt{fy} et \texttt{fz}, au 0B (avant, \texttt{fx} aussi, mais il est devenu \texttt{zamok})
\begin{itemize}
 \item 8Go et 16Go de RAM
 \item 8$\times$3 GHz et 16$\times$2.4 GHz de processeurs
 \item accessibles par leur interface \texttt{ILO} en cas de besoin
\end{itemize}
\end{frame}

\begin{frame}
 \frametitle{xm : gestion des DomU}
 L'utilisation de la commande \texttt{xm} nécessite les droits root sur le \texttt{Dom0} (Le «Système privilégié»).

\begin{itemize}
 \item \texttt{list} : voir la liste des \texttt{DomU} hébergés et leur état
 \item \texttt{info} : obtenir les caractéristiques du \texttt{Dom0}
 \item \texttt{create <DomU>} : booter le \texttt{DomU}
 \item \texttt{shutdown <DomU>} : équivalent à \texttt{shutdown} sur le \texttt{DomU}
 \item \texttt{destroy <DomU>} : éteindre sans condition le \texttt{DomU} (agressif)
 \item \texttt{migrate <DomU> <AutreDom0>} : envoyer «à chaud» le \texttt{DomU} sur un autre \texttt{Dom0}
 \item \texttt{dmesg <DomU>} : obtenir la sortie de \texttt{dmesg} du \texttt{DomU}
 \item \texttt{console <DomU>} : basculer sur un tty sur le \texttt{DomU}
\end{itemize}
\end{frame}

\subsection{Créer un DomU}
\begin{frame}[fragile]
 \frametitle{Il a besoin de place}

\begin{verbatim}
fz# cd /usr/scripts/gestion/iscsi
fz# ipython
ipython> import nolslib
ipython> conn = nolslib.Nols()
ipython> conn.create_volume("toto_slash", 2)      # La taille est en
ipython> conn.create_volume("toto_var", 2)        #  Go par défaut
ipython> conn.create_volume("toto_swap", 512, "MB")

fz# /usr/scripts/gestion/iscsi/update.sh

fz# mkfs.ext4 /dev/iscsi_toto_slash
fz# mkfs.ext4 /dev/iscsi_toto_var
fz# mkswap /dev/iscsi_toto_swap
\end{verbatim}
\end{frame}

\begin{frame}[fragile]
 \frametitle{Il a besoin d'un OS}

Debootstrap :
\begin{verbatim}
fz# mkdir /mnt/toto
fz# mount /dev/iscsi_toto_slash /mnt/toto
fz# mkdir /mnt/toto/var
fz# mount /dev/iscsi_toto_var /mnt/toto/var
fz# debootstrap squeeze /mnt/toto ftp://mirror.adm.crans.org/debian
\end{verbatim}

Dans \texttt{/etc/fstab.local} :
\begin{verbatim}
/dev/xvda        /       ext4    defaults        0       1
/dev/xvdb        /var    ext4    defaults        0       2
/dev/xvdc        none    swap    defaults        0       0
\end{verbatim}

Dans \texttt{/etc/inittab} :
\begin{verbatim}
vc:2345:respawn:/sbin/getty 38400 hvc0
\end{verbatim}

Mot de passe root du \texttt{DomU} :
\begin{verbatim}
fz$ sudo chroot /mnt/toto
root@fz# passwd
root@fz# exit
\end{verbatim}
\end{frame}

\begin{frame}[fragile]
\frametitle{ensuite}
RTFM : \url{https://wiki.crans.org/CransTechnique/Virtualisation/CreerUnDomu}
\end{frame}
\subsection{DomUs}
\begin{frame}
 \frametitle{Les virtualisés au Cr@ns}
 \begin{itemize}
  \item \texttt{irc} : IRC
  \item \texttt{asterisk} : SIP
  \item \texttt{bcfg2} : Bcfg2 (cf séminaire idoine)
  \item \texttt{cas} : Central Authentication Service
  \item \texttt{kenobi} : serveur obby
  \item \texttt{nat64} : Nat des IPv6 derrière une IPv4
  \item \texttt{news} : serveur de newsgroups
  \item \texttt{niomniom} : wiki
  \item \texttt{o2} : intranet2
  \item \texttt{tracker} : Todolist
  \item \texttt{whatsupdoc} : ex-bugtracker
 \end{itemize}
\end{frame}
\begin{frame}
 \frametitle{Les virtualisés au Cr@ns}
 \begin{itemize}
  \item \texttt{dhcp} : DHCP
  \item \texttt{eap} : authentification wifi
  \item \texttt{vert} : LDAP
  \item \texttt{owl} : IMAP, Horde, Roundcube
  \item \texttt{radius} : authentification radius sur les switchs
  \item \texttt{redisdead} : SMTP, Mailman
  \item \texttt{routeur} : route les différents réseaux internes
  \item \texttt{sogo} : SOGo (webmail)
  \item \texttt{titanic} : routeur (entre autres) en connexion de secours
  \item \texttt{xmpp} : jabber
  \item \texttt{listes} : \textit{ask Ping}
  \item \texttt{bob} : victime
 \end{itemize}
\end{frame}
\end{document}