
Sommaire
- 1 Introduction à Kubernetes
- 2 Comprendre les composants de Kubernetes
- 3 Gestion des applications avec Kubernetes
- 4 Travailler avec le réseau dans Kubernetes
- 5 Orchestration et automatisation avec Kubernetes
- 6 Sécurité dans Kubernetes
- 7 Surveillance et dépannage
- 8 Utilisation de Helm pour la gestion des packages Kubernetes
- 9 Kubernetes avancé
- 10 Cas pratique : Déploiement d’une application microservices avec Kubernetes
- 11 Conclusion et perspectives d’avenir pour Kubernetes
Introduction à Kubernetes
Qu’est-ce que Kubernetes?
Kubernetes est un système open-source qui automatise le déploiement, la mise à l’échelle et la gestion des applications conteneurisées. Il regroupe les conteneurs qui constituent une application en unités logiques pour une gestion facile et efficace.
Kubernetes fournit un cadre pour exécuter des systèmes distribués résilients.
Il gère la mise à l’échelle et la redondance pour vous. Il fournit également des interfaces et des services de niveau supérieur pour faciliter le déploiement et l’exploitation des applications.
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp
Pourquoi Kubernetes est-il important?
Kubernetes a apporté une nouvelle ère dans le domaine de la technologie avec l’orchestration de conteneurs.
Avec la croissance rapide des microservices, Kubernetes est devenu une plateforme indispensable pour automatiser, déployer, mettre à l’échelle et gérer les applications conteneurisées.
Cela a permis aux développeurs de se concentrer sur l’écriture du code sans se soucier de l’infrastructure sous-jacente.
Kubernetes est maintenant supporté par une grande communauté et est utilisé par de grandes entreprises dans le monde entier.
Vue d’ensemble de l’architecture Kubernetes
L’architecture Kubernetes est composée d’un cluster qui contient un master node et plusieurs worker nodes.
Le master node est le centre de contrôle de Kubernetes qui gère le cluster et coordonne toutes les activités, tandis que les worker nodes sont les machines qui exécutent les applications.
Un cluster Kubernetes est généralement composé des éléments suivants :
- Master Node: Il contient les composants de contrôle comme l’API server, le controller manager, le scheduler et etcd.
- Worker Nodes: Ils contiennent les applications conteneurisées et les composants de runtime comme le Kubelet et le Kube Proxy.
- Pods: Les pods sont les plus petites unités déployables que vous pouvez créer et gérer dans Kubernetes.
apiVersion: v1
kind: Node
metadata:
name: node1
spec:
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
L’architecture de Kubernetes permet une orchestration efficace des conteneurs, une mise à l’échelle automatique, une tolérance aux pannes et bien d’autres fonctionnalités qui sont essentielles pour exécuter des applications en production.
Comprendre les composants de Kubernetes
Les pods
Un pod est la plus petite unité de calcul déployable que vous pouvez créer et gérer dans Kubernetes.
Il peut contenir un ou plusieurs conteneurs. Chaque pod dans Kubernetes a une adresse IP unique et les conteneurs à l’intérieur d’un pod partagent le même contexte de réseau, ce qui leur permet de communiquer entre eux via localhost
.
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp
Les services
Un service Kubernetes est un objet abstrait qui définit un ensemble logique de pods et une politique permettant d’y accéder (parfois appelée micro-service).
Les services permettent de découpler la politique de réseau des pods. Un service peut mapper n’importe quelle interface entrante (port) à un ensemble de pods cibles.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Les volumes et le stockage persistant
Les volumes Kubernetes sont une abstraction qui permet aux conteneurs de stocker des données de manière persistante et de partager des données entre les conteneurs d’un pod.
Un volume a une durée de vie identique à celle du pod qui le contient, ce qui signifie que le volume survit aux redémarrages de conteneurs.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
Les namespaces
Les namespaces Kubernetes sont destinés à être utilisés dans les environnements avec de nombreux utilisateurs répartis en plusieurs équipes, ou projets. Les namespaces sont un moyen de diviser les ressources d’un cluster entre plusieurs utilisateurs.
apiVersion: v1
kind: Namespace
metadata:
name: mynamespace
Un namespace fournit une portée pour les noms. Les noms de ressources doivent être uniques à l’intérieur d’un namespace, mais pas à travers les namespaces.
Les namespaces ne peuvent pas être imbriqués à l’intérieur les uns des autres et chaque ressource Kubernetes peut seulement être dans un namespace.
Gestion des applications avec Kubernetes
Déploiements
Un déploiement dans Kubernetes vous offre des mises à jour déclaratives pour les Pods et les ReplicaSets.
Vous décrivez l’état souhaité dans un objet de déploiement, et le contrôleur de déploiement modifie l’état réel à l’état souhaité à un taux contrôlé.
Vous pouvez définir des déploiements pour créer de nouveaux ReplicaSets ou pour supprimer des déploiements existants et adopter toutes leurs ressources avec de nouveaux déploiements.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Rollbacks et mises à jour
Kubernetes déploiement fournit la fonctionnalité de rollback pour revenir à une version précédente de votre application, ce qui peut être utile en cas d’échec de votre application suite à une mise à jour.
kubectl rollout undo deployment.v1.apps/nginx-deployment
Configuration et gestion des secrets
Kubernetes Secrets vous permettent de stocker et de gérer des informations sensibles, comme les mots de passe, les jetons OAuth et les clés ssh.
Les informations sensibles peuvent être mises en place de manière sécurisée et utilisées sans être exposées dans votre pile de configuration.
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: dmFsdWUxCg==
username: dmFsdWUy
Stocker des informations sensibles dans des secrets est plus sûr et plus flexible que de les placer en dur dans les définitions de pods ou les images de conteneurs.
Travailler avec le réseau dans Kubernetes
Comprendre le réseau dans Kubernetes

Dans Kubernetes, chaque Pod reçoit sa propre adresse IP. Cela signifie que vous n’avez pas besoin de créer explicitement des liens entre les Pods et vous pouvez presque traiter chaque Pod comme une machine physique ou virtuelle dans votre cluster.
Cela facilite le portage d’applications.
Les services de réseau
Un Service Kubernetes est un objet abstrait qui définit un ensemble logique de Pods et une politique d’accès à ces Pods.
Les services permettent à votre application de recevoir du trafic. Les services peuvent être exposés de différentes manières en définissant un type de service dans le serviceSpec : ClusterIP, NodePort, LoadBalancer et Ingress.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
L’équilibrage de charge et l’exposition des services
L’équilibrage de charge dans Kubernetes est généralement géré par le service de type LoadBalancer. Un Service de type LoadBalancer est une fonctionnalité de l’infrastructure cloud qui expose le Service à l’extérieur du cluster Kubernetes.
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer
spec:
type: LoadBalancer
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Les services peuvent également être exposés via un Ingress, qui est un objet API qui gère l’accès externe aux services dans un cluster, généralement avec HTTP. L’Ingress peut fournir un équilibrage de charge, la terminaison SSL et la redirection de nom d’hôte.
Orchestration et automatisation avec Kubernetes
Les Jobs et les CronJobs
Un Job dans Kubernetes est une tâche ponctuelle, c’est-à-dire une tâche qui doit être exécutée jusqu’à son achèvement. Pour des tâches qui doivent être exécutées périodiquement, Kubernetes propose des CronJobs, une version automatisée et planifiée des Jobs.
apiVersion: batch/v1
kind: Job
metadata:
name: hello
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 30']
restartPolicy: OnFailure
Auto-scaling
L’auto-scaling est une fonctionnalité clé de Kubernetes qui vous permet d’adapter automatiquement le nombre de Pods en fonction de l’utilisation des ressources à l’aide de l’Horizontal Pod Autoscaler.
Cette fonctionnalité garantit que vous utilisez de manière optimale les ressources de votre cluster.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: my-autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50
Health checks et readiness probes
Les health checks (contrôles de santé) sont cruciaux pour maintenir la fiabilité et la stabilité des applications dans un environnement de microservices.
Kubernetes propose deux types de sondes pour vérifier l’état de santé des Pods : les Liveness probes et les Readiness probes.
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: my-app-image
livenessProbe:
httpGet:
path: /healthz
port: 8080
readinessProbe:
httpGet:
path: /ready
port: 8080
Dans l’exemple ci-dessus, la Liveness probe vérifie si l’application est toujours en cours d’exécution et doit être redémarrée en cas de défaillance. La Readiness probe vérifie si l’application est prête à recevoir du trafic.
Sécurité dans Kubernetes
Les principes de la sécurité dans Kubernetes
La sécurité est un aspect essentiel de toute application ou système, et Kubernetes ne fait pas exception.
Kubernetes offre un ensemble de fonctionnalités pour sécuriser votre cluster, telles que le contrôle d’accès basé sur les rôles (RBAC), l’isolation du réseau et la gestion sécurisée des secrets.
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
containers:
- name: secure-container
securityContext:
runAsNonRoot: true
image: my-image
Les rôles et les bindings de rôles
Kubernetes utilise le contrôle d’accès basé sur les rôles (RBAC) pour gérer l’accès aux ressources du cluster. Cela permet aux administrateurs de limiter l’accès à certaines ressources et actions.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
La gestion des secrets
Kubernetes propose un objet Secret pour stocker et gérer des informations sensibles, comme les mots de passe, les jetons OAuth et les clés ssh.
Les secrets peuvent être montés comme des volumes de données ou exposés comme des variables d’environnement pour être utilisés par un Pod.
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: dGhpcyBpcyBhIHNlY3JldA==
Dans cet exemple, nous créons un secret avec un mot de passe. La valeur du mot de passe est codée en base64.
Surveillance et dépannage
Logging et monitoring
Pour maintenir un système Kubernetes sain, il est crucial d’avoir un système de journalisation et de surveillance robuste. Cela peut aider à comprendre l’état de votre cluster et à identifier rapidement les problèmes.
apiVersion: apps/v1
kind: Deployment
metadata:
name: logging-app
spec:
replicas: 3
selector:
matchLabels:
app: logging-app
template:
metadata:
labels:
app: logging-app
spec:
containers:
- name: logging-app
image: my-logging-app
ports:
- containerPort: 8080
Dans cet exemple, nous déployons une application qui enregistre les logs dans stdout et stderr, qui sont collectés et stockés par le service de journalisation de Kubernetes.
Debugging des applications Kubernetes
Le débogage des applications Kubernetes peut être réalisé de plusieurs façons, notamment en utilisant kubectl logs
pour visualiser les journaux d’application, kubectl describe
pour voir les détails d’une ressource, et kubectl exec
pour exécuter des commandes dans un conteneur.
# Get logs from a Pod
kubectl logs my-pod
# Describe a Pod
kubectl describe pod my-pod
# Execute command in a container
kubectl exec -it my-pod -- /bin/bash
Utilisation de kubectl pour le dépannage
kubectl
est l’outil en ligne de commande principal pour interagir avec un cluster Kubernetes. Il offre une multitude de commandes pour le dépannage, y compris l’inspection des ressources, la visualisation des journaux, et l’exécution de commandes dans les conteneurs.
# Get all Pods
kubectl get pods
# Get details about a Pod
kubectl describe pod my-pod
# Tail logs from a Pod
kubectl logs -f my-pod
Utilisation de Helm pour la gestion des packages Kubernetes
Introduction à Helm
Helm est un gestionnaire de packages pour Kubernetes qui simplifie le déploiement et la gestion des applications sur un cluster Kubernetes. Il utilise une structure de chart, qui est un ensemble de fichiers décrivant une application Kubernetes.
# Installation de Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# Vérification de l'installation
helm version
Gestion des dépendances avec Helm
Helm vous permet de définir des dépendances pour votre application à l’aide du fichier Chart.yaml. Ces dépendances peuvent être d’autres charts Helm qui sont nécessaires pour votre application.
# Exemple de Chart.yaml avec des dépendances
apiVersion: v2
name: myapp
version: 1.0.0
dependencies:
- name: postgresql
version: 9.6.2
repository: "https://charts.bitnami.com/bitnami"
Dans cet exemple, l’application dépend du chart PostgreSQL du dépôt Bitnami.
Création et partage des charts Helm
Helm fournit des outils pour créer vos propres charts. Une fois créés, ces charts peuvent être partagés sur un dépôt de charts Helm, rendant votre application facilement déployable par d’autres.
# Création d'un nouveau chart
helm create mychart
# Empaquetage du chart pour le partage
helm package mychart
# L'opération d'empaquetage crée un fichier .tgz que vous pouvez partager
Avec Helm, la gestion des applications Kubernetes devient une tâche beaucoup plus simple et plus gérable.
Kubernetes avancé
Utilisation des Custom Resource Definitions (CRD)
Dans cette section, nous explorerons les Custom Resource Definitions (CRD) qui permettent aux utilisateurs de créer de nouvelles types de ressources sans ajouter un autre serveur d’API.
Nous discuterons des avantages des CRD, comment ils sont utilisés dans Kubernetes et fournirons des exemples de code pour créer et gérer les CRD.
Travailler avec l’API de Kubernetes
L’API de Kubernetes est au cœur de sa gestion des opérations. Cette section expliquera comment l’API est structurée et comment elle peut être utilisée pour effectuer diverses tâches, de la création de pods à la mise à jour des services et à l’interrogation du statut du cluster.
Nous utiliserons des exemples de code pour montrer comment effectuer des appels d’API pour effectuer diverses tâches.
Kubernetes Federation
La fédération est une fonctionnalité avancée qui permet la gestion d’un cluster Kubernetes réparti sur plusieurs régions ou fournisseurs de cloud.
Cette section introduira le concept de fédération, expliquera quand et pourquoi elle est utilisée, et donnera des exemples d’application pour la mise en place d’une fédération de clusters Kubernetes.
Cette partie du chapitre aidera à comprendre comment Kubernetes peut être utilisé pour orchestrer des déploiements à grande échelle, transfrontaliers et multi-cloud.
Cas pratique : Déploiement d’une application microservices avec Kubernetes
Description du projet
Dans ce projet pratique, nous allons déployer une application basée sur une architecture microservices sur un cluster Kubernetes.
L’application sera composée de plusieurs services interagissant entre eux, incluant une base de données, une API, et une interface utilisateur front-end.
Mise en place de l’infrastructure Kubernetes
Pour mettre en place notre infrastructure, nous allons créer un cluster Kubernetes et configurer les différents namespaces pour séparer nos environnements de développement, de test et de production.
Nous installerons également les outils nécessaires tels que Helm pour la gestion des packages.
# Création d'un cluster Kubernetes
kind create cluster --name mon-projet
# Création des namespaces
kubectl create namespace dev
kubectl create namespace test
kubectl create namespace prod
Déploiement et gestion de l’application
Nous allons déployer chaque service de notre application dans le cluster Kubernetes en utilisant les charts Helm.
Nous allons également mettre en place l’équilibrage de charge, l’auto-scaling et les readiness probes pour assurer la disponibilité et la performance de notre application.
# Déploiement de la base de données
helm install mydb ./mydb-chart --namespace dev
# Déploiement de l'API
helm install myapi ./myapi-chart --namespace dev
# Déploiement du front-end
helm install myfrontend ./myfrontend-chart --namespace dev
Cette expérience pratique vous donnera une compréhension approfondie de la façon de déployer et de gérer des applications basées sur une architecture microservices dans un environnement Kubernetes.
Conclusion et perspectives d’avenir pour Kubernetes
Résumé des points clés
Nous avons voyagé à travers l’écosystème Kubernetes, depuis l’introduction de ses concepts fondamentaux jusqu’à l’application pratique de ces connaissances à travers le déploiement d’une application basée sur une architecture microservices.
Vous avez appris comment configurer et gérer les composants de Kubernetes, comment automatiser et orchestrer les applications, comment assurer la sécurité dans un environnement Kubernetes, comment surveiller et dépanner vos applications, et comment utiliser Helm pour la gestion des packages Kubernetes.
Tendances et évolutions futures de Kubernetes
Kubernetes continue d’évoluer et de mûrir, s’imposant comme le standard de facto pour l’orchestration des conteneurs.
Les futurs développements dans Kubernetes pourraient inclure des améliorations dans la gestion du réseau, une automatisation encore plus poussée, une meilleure intégration avec les environnements cloud et on-premise, et des améliorations dans la sécurité et la confidentialité des données.
apiVersion: apps/v1
kind: Deployment
metadata:
name: future-app
labels:
app: future
spec:
replicas: 3
selector:
matchLabels:
app: future
template:
metadata:
labels:
app: future
spec:
containers:
- name: future-app
image: my-org/future-app:1.0.0
ports:
- containerPort: 8080
Ressources pour continuer à apprendre
L’apprentissage de Kubernetes est un voyage continu.
Des ressources telles que la documentation officielle de Kubernetes, les cours en ligne, les tutoriels, les blogs, les livres, et les forums de la communauté sont d’excellents moyens de rester à jour avec les derniers développements et les meilleures pratiques dans le domaine de Kubernetes.
Continuez à apprendre, à expérimenter, et à contribuer à cette merveilleuse communauté.