Introduction
Kubernetes propose des espaces de noms (namespaces) comme moyen d'isoler les charges de travail et les ressources dans un cluster. Dans ce laboratoire, vous apprendrez à utiliser les espaces de noms pour isoler les charges de travail et les ressources. Vous allez créer un espace de noms, déployer une application web simple dans cet espace de noms, et vérifier que l'application web est isolée des autres ressources du cluster.
Démarrer le cluster Minikube
Avant de créer des ressources, vous avez besoin d'un cluster Kubernetes en cours d'exécution. Minikube est un environnement Kubernetes léger qui s'exécute sur votre machine locale.
Accédez à votre répertoire de travail :
Ouvrez le terminal et accédez au dossier de projet par défaut :
cd /home/labex/projectDémarrez Minikube :
Démarrez Minikube pour initialiser un cluster Kubernetes :
minikube start- Cette commande configure un cluster Kubernetes mono - nœud sur votre machine locale.
- Minikube peut prendre quelques minutes à démarrer en fonction des performances de votre système.
Vérifiez que Minikube est en cours d'exécution :
Vérifiez l'état du cluster Minikube :
minikube status- Recherchez des composants tels que
kubeletetapiserverlistés commeRunning(en cours d'exécution). - Si le cluster n'est pas en cours d'exécution, relancez la commande
minikube start.
- Recherchez des composants tels que
Si vous rencontrez des problèmes lors du démarrage de Minikube, utilisez minikube delete pour réinitialiser l'environnement si nécessaire.
Créer un espace de noms (namespace)
Dans cette étape, vous allez créer un espace de noms appelé webapp pour isoler l'application web des autres ressources du cluster.
Créez un fichier appelé namespace.yaml avec le contenu suivant :
apiVersion: v1
kind: Namespace
metadata:
name: webapp
Appliquez l'espace de noms à votre cluster avec la commande suivante :
kubectl apply -f namespace.yaml
Vérifiez que l'espace de noms a été créé avec la commande suivante :
kubectl get namespaces
Vous devriez voir l'espace de noms webapp dans la liste des espaces de noms.
Déployer une application web
Dans cette étape, vous allez déployer une application web simple dans l'espace de noms (namespace) webapp.
Créez un fichier appelé web-app.yaml avec le contenu suivant :
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: webapp
spec:
replicas: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Ce fichier crée un déploiement (Deployment) avec une seule réplique d'un conteneur exécutant la dernière version du serveur web Nginx.
Appliquez le déploiement à votre cluster avec la commande suivante :
kubectl apply -f web-app.yaml
Vérifiez que l'application web est en cours d'exécution dans l'espace de noms webapp avec la commande suivante :
kubectl get pods -n webapp
Vous devriez voir le pod web-app dans la liste des pods en cours d'exécution dans l'espace de noms webapp.
Exposer l'application web
Dans cette étape, vous allez exposer l'application web au monde extérieur en utilisant un Service Kubernetes.
Créez un fichier appelé web-app-service.yaml avec le contenu suivant :
apiVersion: v1
kind: Service
metadata:
name: web-app
namespace: webapp
spec:
selector:
app: web-app
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
Ce fichier crée un Service qui expose l'application web au cluster en utilisant une adresse IP de cluster (ClusterIP).
Appliquez le Service à votre cluster avec la commande suivante :
kubectl apply -f web-app-service.yaml
Vérifiez que le Service est en cours d'exécution dans l'espace de noms (namespace) webapp avec la commande suivante :
kubectl get services -n webapp
Vous devriez voir le service web-app dans la liste des services en cours d'exécution dans l'espace de noms webapp.
Vérifier l'isolement des espaces de noms (namespace)
Dans cette étape, vous allez vérifier que l'application web est isolée des autres ressources du cluster.
Créez un fichier appelé other-app.yaml avec le contenu suivant :
apiVersion: apps/v1
kind: Deployment
metadata:
name: other
spec:
replicas: 1
selector:
matchLabels:
app: other
template:
metadata:
labels:
app: other
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Dans ce fichier, vous créez un autre déploiement (Deployment) appelé other dans l'espace de noms par défaut qui exécute un conteneur avec l'image nginx.
Appliquez le déploiement à votre cluster avec la commande suivante :
kubectl apply -f other-app.yaml
Vérifiez que le déploiement est en cours d'exécution dans l'espace de noms par défaut avec la commande suivante :
kubectl get pods | grep other
Vous devriez voir le pod other dans la liste des pods en cours d'exécution dans l'espace de noms par défaut.
Vérifier l'accès entre espaces de noms (namespace)
Tout d'abord, trouvez le nom du pod exécutant votre application en exécutant la commande suivante :
kubectl get pods -l app=other
Vous devriez voir le pod other. Notez le nom du pod.
Ensuite, exécutez la commande suivante pour ouvrir une session shell dans le conteneur exécutant votre application :
kubectl exec -it pod-name -- /bin/sh
Remplacez par le nom du pod que vous avez noté précédemment.
Une fois dans la session shell, exécutez la commande suivante pour accéder au Deployment web-app :
curl web-app.webapp
Vous devriez voir la réponse HTML du serveur web Nginx.
Résumé
Dans ce laboratoire, vous avez appris à utiliser les espaces de noms (namespace) pour isoler les charges de travail et les ressources dans un cluster Kubernetes. Vous avez créé un espace de noms, déployé une application web simple dans cet espace de noms, exposé l'application web au monde extérieur en utilisant un Service Kubernetes et vérifié que l'application web est isolée des autres ressources du cluster.


