Aller au contenu principal

Chapitre 3.2 - Déclaration YAML des Pods

Objectifs d'Apprentissage

À la fin de ce chapitre, vous serez capable de:

  • Comprendre la structure YAML d'un Pod
  • Créer des Pods avec kubectl
  • Définir les ressources (CPU, mémoire)
  • Configurer les variables d'environnement
  • Monter des volumes

Structure YAML d'un Pod

Structure de Base

apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
env: production
spec:
containers:
- name: my-container
image: nginx:1.20
ports:
- containerPort: 80

Sections Principales

  1. apiVersion: Version de l'API Kubernetes
  2. kind: Type de ressource (Pod)
  3. metadata: Métadonnées (nom, labels, annotations)
  4. spec: Spécification du Pod

Exemple Complet

apiVersion: v1
kind: Pod
metadata:
name: web-server
namespace: default
labels:
app: web
tier: frontend
version: v1
spec:
containers:
- name: nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
protocol: TCP
env:
- name: ENV_VAR
value: "production"
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
volumeMounts:
- name: config
mountPath: /etc/nginx/conf.d
volumes:
- name: config
configMap:
name: nginx-config
restartPolicy: Always

Ressources (CPU et Mémoire)

Requests et Limits

resources:
requests: # Ressources garanties
cpu: "100m" # 0.1 CPU core
memory: "128Mi" # 128 Mebibytes
limits: # Ressources maximales
cpu: "500m" # 0.5 CPU core
memory: "512Mi" # 512 Mebibytes

Unités CPU:

  • 100m = 0.1 CPU
  • 1 = 1 CPU core
  • 2.5 = 2.5 CPU cores

Unités Mémoire:

  • 128Mi = 128 Mebibytes
  • 1Gi = 1 Gibibyte
  • 500M = 500 Megabytes

Variables d'Environnement

Méthode 1: Directe

env:
- name: DATABASE_URL
value: "postgresql://localhost:5432/mydb"
- name: LOG_LEVEL
value: "info"

Méthode 2: Depuis ConfigMap

env:
- name: CONFIG_VALUE
valueFrom:
configMapKeyRef:
name: my-config
key: config-key

Méthode 3: Depuis Secret

env:
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password

Volumes

Types de Volumes

volumes:
# Volume depuis ConfigMap
- name: config
configMap:
name: my-config

# Volume depuis Secret
- name: secrets
secret:
secretName: my-secret

# Volume temporaire
- name: temp
emptyDir: {}

# Volume persistant
- name: data
persistentVolumeClaim:
claimName: my-pvc

Montage dans le Conteneur

volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true

Commandes kubectl

Créer un Pod

# Depuis un fichier YAML
kubectl apply -f pod.yaml

# Depuis la ligne de commande
kubectl run my-pod --image=nginx:1.20

# Créer et afficher le YAML
kubectl run my-pod --image=nginx:1.20 --dry-run=client -o yaml > pod.yaml

Gérer les Pods

# Lister les Pods
kubectl get pods

# Voir les détails
kubectl describe pod my-pod

# Voir les logs
kubectl logs my-pod

# Exécuter une commande
kubectl exec -it my-pod -- /bin/bash

# Supprimer un Pod
kubectl delete pod my-pod

Résumé

Dans ce chapitre, vous avez appris:

Structure YAML: apiVersion, kind, metadata, spec
Ressources: Requests (garanties) et Limits (maximales)
Variables d'environnement: Directes, ConfigMap, Secret
Volumes: ConfigMap, Secret, emptyDir, PVC
Commandes: kubectl apply, get, describe, logs, exec, delete


Prochaines Étapes

Maintenant que vous savez créer des Pods:

Chapitre 3.3: Labels et Selectors
Lab 3.1: Création et Gestion de Pods


Chapitre créé le: Décembre 2024