\documentclass[french]{beamer}

\usepackage[french]{babel}     %% on parle français
\usepackage[utf8]{inputenc}    %% en utf 8
\usetheme{Warsaw}              %% un thème de transparent

%% les méta-données de la présentation :
\title{Virtualisation Linux~: la solution OpenVZ}
\author{}
\institute{Agence universitaire de la Francophonie}
\date{\today}

%% et on commence !

\begin{document}

\begin{frame}
  \titlepage   %% le premier transparent (frame) est la page de titre
\end{frame}

\begin{frame}
  \frametitle{Plan}
  \tableofcontents   %% second frame : la table des matières, qui présente les sections
\end{frame}

\section{Introduction}   %% une première partie (section)
\frame{\tableofcontents[current]}

\begin{frame} 
  \frametitle{Généralités sur la virtualisation (1/2)}
  \begin{block}{Différents types de virtualisation}
    \begin{itemize}
      \item Paravirtualisation (hyperviseur) : Xen, VMware ESX, Microsoft
      \item Emulation (machine virtuelle) : QEMU/KVM, VirtualBox, VMware, Bochs, Parallels
      \item Isolation : FreeBSD Jail, Solaris Zones/Containers, Linux-VServer, OpenVZ, Virtuozzo
      \item supports matériels (Intel VT, AMD-V, HP Superdome, Sun LDOM)
     \end{itemize}
     Ce n'est qu'une tentative de classification. Voir Wikipédia...
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Paravirtualisation (hyperviseur)}
  \includegraphics{hyperviseur.png}
\end{frame}

\begin{frame}
  \frametitle{Emulation (machine virtuelle)}
  \includegraphics{emulateur.png}
\end{frame}

\begin{frame}
  \frametitle{User space}
  \includegraphics{userspace.png}
\end{frame}

\begin{frame}
  \frametitle{Isolation (le cas d'OpenVZ)}
  \includegraphics{isolateur.png}
  \begin{center}exemple : OpenVZ\end{center}
\end{frame}

\begin{frame}
  \frametitle{Généralités sur la virtualisation (2/2)} 
  \begin{block}{Objectifs de la virtualisation}
    \begin{itemize}
      \item Consolidation
      \item Sécurisation
      \item Hébergement
      \item Développement et tests
      \item Education
      \item ... et tout ce qu'on peut imaginer quand le nombre de machines est «~illimité~»
     \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{OpenVZ en quelques lignes (1/4)}
  \begin{block}{}
    \begin{itemize}
      \item Virtualisation niveau OS
      \item Base de Parallels Virtuozzo Containers
      \item Supporté par Parallels (support payant possible : sales@openvz.org)
      \item GPL
     \end{itemize}
  \end{block}
  \begin{block}{Fonctionnalités}
    \begin{itemize}
      \item Penser à un «~super chroot~». Vraiment super.
      \item Isolation niveau OS : un seul noyau, plusieurs systèmes
      \item Linux-only, mais multi-distributions (sur même noyau)
      \item Gestion de ressources par machine : CPU, RAM, disque
      \item Checkpoints : migration de machine
     \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{OpenVZ en quelques lignes (2/4)}
  \begin{block}{Isolation des objets}
    \begin{itemize}
      \item Fichiers (y compris /proc, /sys, /dev, etc)
      \item Utilisateurs et groupes (y compris root)
      \item Processus
      \item Réseau et interfaces réseau
      \item Périphériques (on peut même attribuer un périphérique à une seule machine)
      \item IPC (mémoire partagée, sémaphores, messages, etc)
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{OpenVZ en quelques lignes (3/4)}
  \begin{block}{Gestion des ressources}
    \begin{itemize}
      \item Quota disque (espace et nombre d'inodes). Quotas unix toujours possibles
      \item Ordonnanceur «équitable», par machine (avec priorité et limites) et ordonnanceur habituel dans chaque machine
      \item Les \textit{beancounters} : compteurs, limites et garantie sur un grand nombre de ressources
      \item But : donner toute les ressources possibles à chaque machine virtuelle, sans qu'une seule puisse accaparer tout la machine hôte.
      \item La plupart de ces paramètres sont modifiables à la volée
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{OpenVZ en quelques lignes (4/4)}
  \begin{block}{Checkpoint}
    \begin{itemize}
      \item point d'arrêt complet
      \item permet de passer une machine virtuelle sur un autre hote (en quelques secondes : pas d'arrêt du service)
    \end{itemize}
  \end{block}
  \begin{block}{Outils}
    \begin{itemize}
      \item \texttt{vzctl} : start, stop, set, ...
      \item Modèle de machine (\textit{templates}) : fournis, mais aussi faciles à construire (personnalisation)
    \end{itemize}
  \end{block}
\end{frame}


\section{Premiers pas}  
\frame{\tableofcontents[current]}

\begin{frame} 
  \frametitle{Création d'une machine}
  \begin{block}{Paramètres à décider}
    \begin{itemize}
      \item un numéro de machine (supérieur à 100)
      \item \texttt{--ostemplate} : le modèle
      \item \texttt{--hostname} : nom de la machine
      \item \texttt{--ipadd} : adresse IP de la machine
      \item \texttt{--config} : configuration modèle (valeurs de base)
     \end{itemize}
  \end{block}
  Résultat : \texttt{vzctl create 101 --ostemplate debian-lenny-ucad --hostname ucad101}
\end{frame}

\begin{frame}
  \frametitle{Lancement, arrêt, liste...}
  \begin{block}{Lancement d'une machine virtuelle (container)}
   \texttt{vzctl start 101}
  \end{block}
  \begin{block}{Arrêt}
   \texttt{vzctl stop 101}
  \end{block}
  \begin{block}{Liste des containers}
   \texttt{vzlist} et \texttt{vzlist -a}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Entrer dans une machine}
  \begin{block}{Entrer dans une machine}
   \texttt{vzctl enter 101}
  \end{block}
  ... et essayer quelques commandes :
  \begin{itemize}
   \item hostname
   \item ps waux
   \item ls -l /boot
   \item ls -l /dev
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Réseautique...}
  \begin{block}{Ajouter une adresse réseau}
   \texttt{vzctl set 101 --ipadd 172.16.0.101 --save}
  \end{block}
  Etudier la configuration obtenue (et regarder au niveau du \textit{netfilter} de la machine hôte)
\end{frame}

\begin{frame}
  \frametitle{TP : une seconde machine, des services séparés}
  \begin{itemize}
   \item Créer une seconde machine ucad102, adresse IP 172.16.0.102
   \item Installer apache2 sur ucad101
   \item Installer proftpd sur ucad102
   \item Faire le tour des processus et des ports IP ouverts, sur ucad101, ucad102 et sur la machine hôte
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Où sont les données ?}
  \begin{itemize}
   \item les configurations : \texttt{/etc/vz/conf/101.conf}
   \item \texttt{/var/lib/vz} (ou \texttt{/vz})
   \item les répertoires \texttt{private} et \texttt{root}
   \item les \texttt{template}
  \end{itemize}
\end{frame}


\end{document}

