|
|
% Created 2024-06-05 mer. 10:04
|
|
|
% Intended LaTeX compiler: pdflatex
|
|
|
\documentclass[12pt,a4paper]{article}
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
\usepackage[T1]{fontenc}
|
|
|
\usepackage{graphicx}
|
|
|
\usepackage{longtable}
|
|
|
\usepackage{wrapfig}
|
|
|
\usepackage{rotating}
|
|
|
\usepackage[normalem]{ulem}
|
|
|
\usepackage{amsmath}
|
|
|
\usepackage{amssymb}
|
|
|
\usepackage{capt-of}
|
|
|
\usepackage{hyperref}
|
|
|
\usepackage{minted}
|
|
|
\usepackage[a4paper,margin=0.5in]{geometry}
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
\usepackage[inkscapelatex=false]{svg}
|
|
|
\usepackage[sfdefault]{AlegreyaSans}
|
|
|
\usepackage{multicol}
|
|
|
\usepackage{minted}
|
|
|
\usepackage{float}
|
|
|
\usepackage{tikz}
|
|
|
\usetikzlibrary{positioning}
|
|
|
\renewcommand\listingscaption{Exemple de code}
|
|
|
\usepackage[tikz]{bclogo}
|
|
|
\usepackage{tcolorbox}
|
|
|
\tcbuselibrary{skins}
|
|
|
\usepackage{ragged2e}
|
|
|
\usepackage{environ}
|
|
|
\date{}
|
|
|
\title{TP1 - Cours de virtualisation avancée - \emph{Kubernetes}, dernier TP}
|
|
|
\hypersetup{
|
|
|
pdfauthor={Evrard Van Espen},
|
|
|
pdftitle={TP1 - Cours de virtualisation avancée - \emph{Kubernetes}, dernier TP},
|
|
|
pdfkeywords={},
|
|
|
pdfsubject={},
|
|
|
pdfcreator={Emacs 30.0.50 (Org mode 9.6.15)},
|
|
|
pdflang={English}}
|
|
|
\begin{document}
|
|
|
|
|
|
\maketitle
|
|
|
\NewEnviron{warning}%
|
|
|
{\begin{center}%
|
|
|
\begin{tcolorbox}[notitle,
|
|
|
colback=orange!5!white,
|
|
|
colbacklower=white,
|
|
|
frame hidden,
|
|
|
boxrule=0pt,
|
|
|
bicolor,
|
|
|
sharp corners,
|
|
|
borderline west={4pt}{0pt}{orange!50!black},
|
|
|
fontupper=\sffamily]
|
|
|
\textcolor{orange!50!black}{
|
|
|
\sffamily
|
|
|
\textbf{Attention:\\}%
|
|
|
}%
|
|
|
\BODY
|
|
|
\end{tcolorbox}
|
|
|
\end{center}%
|
|
|
}
|
|
|
|
|
|
\NewEnviron{good}%
|
|
|
{\begin{center}%
|
|
|
\begin{tcolorbox}[notitle,
|
|
|
colback=green!5!white,
|
|
|
colbacklower=white,
|
|
|
frame hidden,
|
|
|
boxrule=0pt,
|
|
|
bicolor,
|
|
|
sharp corners,
|
|
|
borderline west={4pt}{0pt}{green!50!black},
|
|
|
fontupper=\sffamily]
|
|
|
\textcolor{green!50!black}{
|
|
|
\sffamily
|
|
|
}%
|
|
|
\BODY
|
|
|
\end{tcolorbox}
|
|
|
\end{center}%
|
|
|
}
|
|
|
|
|
|
\begin{warning}
|
|
|
Comme pour les autres TPs, vous allez travailler dans une machine virtuelle VDN.
|
|
|
|
|
|
\medskip
|
|
|
|
|
|
N'oubliez pas de lancer \\[0pt]
|
|
|
\texttt{export no\_proxy="127.0.0.1,.vdn,localhost,10.96.0.0/12,192.168.49.2.nip.io"} \\[0pt]
|
|
|
à chaque connexion \texttt{ssh} !
|
|
|
|
|
|
\medskip
|
|
|
|
|
|
Pour lancer \emph{Minikube}, lancez la commande \texttt{./minikube start} (attention vous aviez probablement laissé les binaires \texttt{minikube} et \texttt{kubectl} dans le dossier du TP2).
|
|
|
|
|
|
\medskip
|
|
|
|
|
|
N'oubliez pas aussi de laisser un autre terminal tourner avec la commande \texttt{minikube tunnel} ;)
|
|
|
\end{warning}
|
|
|
|
|
|
\begin{warning}
|
|
|
Installez l'outil \texttt{httpie}: \texttt{sudo apt install -y httpie}.
|
|
|
|
|
|
Il s'agit d'un outil similaire à \texttt{curl} mais plus agréable à utiliser
|
|
|
\end{warning}
|
|
|
|
|
|
L'objectif de ce TP est de finir le travail commencé la semaine dernière et de tester de nouvelles choses.
|
|
|
|
|
|
La base de données que vous avez déployé est une simple \emph{API REST} qui reçoit et retourne une liste de films au format \emph{json}.
|
|
|
Voici une commande permettant d'ajouter quelques films à la base:
|
|
|
\begin{minted}[]{bash}
|
|
|
http POST <ext ip>:<port>/ title="Blade Runner" director="Ridley Scott" release_year:=1982
|
|
|
http POST <ext ip>:<port>/ title="Dune" director="Denis Villeneuve" release_year:=2021
|
|
|
http POST <ext ip>:<port>/ title="Dune 2" director="Denis Villeneuve" release_year:=2024
|
|
|
\end{minted}
|
|
|
|
|
|
\section{Une base de données sans stockage}
|
|
|
\label{sec:orge95a53d}
|
|
|
Déployez le fichier \texttt{without\_storage.yaml}.
|
|
|
Il contient les déploiements et services de la base de données et de l'application.
|
|
|
|
|
|
Une fois le fichier déployé, vérifier que les \emph{pods} sont bien en cours d’exécution.
|
|
|
|
|
|
Ensuite, lancez la commande \texttt{http <external ip>:4000}.
|
|
|
Vous devriez avoir une sortie telle que :
|
|
|
\begin{verbatim}
|
|
|
HTTP/1.1 200 OK
|
|
|
content-length: 2
|
|
|
content-type: application/json
|
|
|
date: Wed, 05 Jun 2024 07:21:34 GMT
|
|
|
x-servedby: database-85bddd5ddc-c4fm7
|
|
|
|
|
|
[]
|
|
|
\end{verbatim}
|
|
|
|
|
|
Notez que la valeur de \texttt{x-servedby} change d'une requête à l'autre.
|
|
|
Cela montre que le \emph{Service} \emph{LoadBalancer} redirige bien le trafic vers les différents \emph{pods}.
|
|
|
La sortie \texttt{[]} indique que la liste est vide.
|
|
|
|
|
|
Maintenant, lancez les commandes :
|
|
|
\begin{minted}[]{bash}
|
|
|
http POST <ext ip>:4000/ title="Blade Runner" director="Ridley Scott" release_year:=1982
|
|
|
http POST <ext ip>:4000/ title="Dune" director="Denis Villeneuve" release_year:=2021
|
|
|
http POST <ext ip>:4000/ title="Dune 2" director="Denis Villeneuve" release_year:=2024
|
|
|
\end{minted}
|
|
|
|
|
|
Cela va ajouter des films dans la base de données.
|
|
|
|
|
|
Maintenant, relancez la commande \texttt{http <external ip>:4000} plusieurs fois.
|
|
|
Vous verrez que les films ne sont pas présents dans toutes les réponses car les requêtes \texttt{POST} ont été dirigées vers différents \emph{pods}.
|
|
|
|
|
|
\section{Votre travail de la semaine dernière}
|
|
|
\label{sec:org59acb8b}
|
|
|
Si vous aviez fini le TP la semaine dernière, passez à la partie suivante.
|
|
|
|
|
|
Sinon continuez le.
|
|
|
Si vous le souhaitez, vous pouvez vous baser le fichier \texttt{without\_storage.yaml} et y ajouter :
|
|
|
\begin{itemize}
|
|
|
\item \emph{ConfigMap}
|
|
|
\item \emph{PersistentVolume}
|
|
|
\item \emph{PersistentVolumeClaim}
|
|
|
\item montage du \emph{PVC} dans les \emph{pods} du déploiement
|
|
|
\end{itemize}
|
|
|
|
|
|
\section{\emph{Ingress}}
|
|
|
\label{sec:orgc44da1d}
|
|
|
\begin{warning}
|
|
|
Avant tout, lancez la commande \texttt{minikube addons enable ingress} qui permet l'utilisation des \emph{Ingress} dans \emph{minikube}.
|
|
|
|
|
|
N'oubliez pas aussi \\[0pt]
|
|
|
\texttt{export no\_proxy="127.0.0.1,.vdn,localhost,10.96.0.0/12,192.168.49.2.nip.io"} \\[0pt]
|
|
|
|
|
|
\textbf{Attention à ne pas utiliser la commande des précédents TPs car elle ne contient pas l'exclusion pour \texttt{192.168.49.2.nip.io}}.
|
|
|
\end{warning}
|
|
|
|
|
|
Déployez maintenant un \emph{Ingress} permettant l'accès à l'application.
|
|
|
|
|
|
Configurez votre \emph{Ingress} pour que le chemin \texttt{/} arrive sur l'application et le chemin \texttt{/api} arrive sur la base de données.
|
|
|
|
|
|
Lors de la configuration de l'\emph{Ingress}, utilisez \texttt{192.168.49.2.nip.io} \textbf{comme nom de domaine}.
|
|
|
Il s'agit d'un domaine résolvant vers l'adresse \texttt{192.168.49.2}, qui est l'adresse de \emph{minikube} dans votre machine virtuelle.
|
|
|
|
|
|
Vérifiez le fonctionnement avec ces commandes :
|
|
|
\begin{minted}[]{bash}
|
|
|
http 192.168.49.2.nip.io/
|
|
|
http 192.168.49.2.nip.io/api
|
|
|
\end{minted}
|
|
|
|
|
|
\section{Déploiement \emph{Canary}}
|
|
|
\label{sec:org485e115}
|
|
|
Créez maintenant un déploiement identique à celui de l'application mais qui utilise l'image \\[0pt]
|
|
|
\texttt{evanespen/application:claque} et un nombre de \emph{replicas} à 1.
|
|
|
|
|
|
Ne changez pas les valeurs de \texttt{template.metadata.labels.app} sinon ce nouveau déploiement ne sera pas géré par le \emph{LoadBalancer}.
|
|
|
|
|
|
Ouvrez \texttt{192.168.49.2.nip.io} dans un navigateur \textbf{dans la machine virtuelle} (donc en vous connectant avec \texttt{ssh -X}).
|
|
|
Rechargez la page plusieurs fois, \textbf{avec \texttt{Ctrl+Shift+R}} pour ignorer le cache, et constatez !
|
|
|
|
|
|
\section{Aide}
|
|
|
\label{sec:orgdbe80a5}
|
|
|
Référez vous au cours et à ces documentations pour y parvenir (ce sont bien des liens):
|
|
|
\begin{itemize}
|
|
|
\item \href{https://kubernetes.io/fr/docs/concepts/services-networking/service/}{\emph{Service}}
|
|
|
\item \href{https://kubernetes.io/docs/concepts/workloads/pods/}{\emph{Pod}}
|
|
|
\item \href{https://kubernetes.io/docs/concepts/workloads/controllers/deployment/}{\emph{Deployment}}
|
|
|
\item \href{https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/}{\emph{PV} et \emph{PVC}}
|
|
|
\item \href{https://kubernetes.io/fr/docs/concepts/services-networking/ingress/}{\emph{Ingress}}
|
|
|
\end{itemize}
|
|
|
|
|
|
Amusez vous bien ;)
|
|
|
\end{document}
|