Formation Kubernetes
Presented by : [Link]
13/11/2023
Plan
1. Introduction:
• C’est quoi kubernetes?
• Fonctionnalités de kubernetes
2. Architecture de kubernetes
• Cluster Architecture
• Master node
• Worker node
3. Les Concepts de Kubernetes
• Namespaces
• Resources, Limit Range & resource Quota
• Labels & Selectors
• Pods, deployments
• Services & Storage
• Ingress & Ingress Controller
Définition officielle de Kubernetes
Un outil d'orchestration de conteneurs open-source
Développé à l'origine par Google
Conçu pour aider à gérer des applications conteneurisées,
dans différents environnements de
déploiement
Fonctionnalités de
Kubernetes ?
Kubernetes résout plusieurs défis clés dans la gestion des
conteneurs :
Orchestration des Conteneurs : Il gère le
déploiement et la mise à jour des conteneurs à
grande échelle.
Équilibrage de Charge : Distribue
automatiquement le trafic réseau pour maintenir
la stabilité et la performance.
Automatisation : Automatise divers processus,
y compris le déploiement, la mise à l'échelle, et
la réparation des applications.
Gestion de la Configuration et des Secrets :
Gère de manière sécurisée les données
sensibles et la configuration des applications.
Architecture de Kubernetes
Master Components Worker Components
API Server Kubelet
Controller Manager Kube Proxy
Scheduler Container Runtime
Etcd
Fonctionnemen
t Kubelet
UI
ETCD Kube Proxy
Container Runtime
Controller
Manager
API
API Server Node 1
CLI Scheduler
Kubelet
Kube Proxy
Container Runtime
Authentication
Node 2
Authorization
Schema Validation
etc
Fonctionnemen
apiVersion: apps/v1
tKubectl create –f [Link] kind: Deployment
Kubelet
metadata:
UI
ETCD name: Kube Proxy
nginx-deployment
spec:
Container
replicas: 3 Runtime
Controller
Manager selector:
API matchLabels:
API Server app: nginx Node 1
template:
CLI 1 Scheduler metadata:
Kubelet
labels:
app: nginx
Kube Proxy
spec:
containers:
Container Runtime
- name: nginx
image: nginx:latest
ports:
Authentication
Node80
- containerPort: 2
Authorization
Schema Validation
etc
Fonctionnemen
tKubectl create –f [Link] Kubelet
UI
ETCD Kube Proxy 10
9 Container Runtime
4 3 8 Controller
6 Manager POD1 POD2
API
API Server Node 1
7
CLI 1 Scheduler
Kubelet
5
2 9 Kube Proxy 10
Container Runtime
[Link]/nginx creates POD3
Authentication
Node 2
Authorization
Schema Validation
etc
Namespace
Available Space
CPU: 140 Node-01 Node-02 Node-03 Node-04 Node-05 Node-06 Node-07
Memory: 280 GB
Node-08 Node-09 Node-10 Node-11 Node-12 Node-13 Node-14
Namespace
By Team
Frontend Backend Database
Namespace
By Env
Production Development Test
Namespace
By apps
Backend Monitoring
Front apps DB
apps Alerting / Logging
Resources
API Server
Controller Manager
Scheduler Cpu: milicores 1, 100m, 1000m
Memory: bytes 50M, 2Gib
100 CPU
128G Memory
2
Node-1 Node-2 Node-100
Resources
API Server
Controller Manager Resources:
Limits:
Scheduler cpu: 2000m
POD memory: 200Mi
Requests:
cpu: 1000m
memory: 100Mi
100 CPU
128G Memory
2
Node-1 Node-2 Node-100
Resources
API Server
Controller Manager Resources:
Limits:
Scheduler cpu: 250
POD memory: 200Gi
Requests:
cpu: 200
Pending memory: 100Gi
100 CPU
128G Memory
2
Node-1 Node-2 Node-100
Resources
API Server
Controller Manager Resources:
Limits:
Scheduler cpu: 100
POD memory: 20Gi
Requests:
cpu: 50
Pending memory: 10Gi
100 CPU
20 cpu
128G Memory
2
Node-1 Node-2 Node-100
Limit Ranges
Pour les Pods : La somme totale des ressources CPU et mémoire pour
tous les conteneurs dans un Pod ne peut pas dépasser 2 CPU et 1 Gi de
mémoire.
Pour les Conteneurs : Chaque conteneur individuel ne peut pas dépasser
1 CPU et 500 Mi de mémoire et doit demander au moins 100m CPU et
100 Mi de mémoire.
Resource
Quotas
pods: Limite le nombre total de Pods à 10 dans le namespace.
[Link] et [Link]: Limite la quantité totale de CPU et de mémoire que les
conteneurs peuvent réclamer à 4 CPU et 2 Gi de mémoire, respectivement.
[Link] et [Link]: Limite la quantité totale de CPU et de mémoire
demandée par tous les conteneurs à 2 CPU et 1 Gi de mémoire.
Labels and
Selectors
apiVersion: v1
Kind: Pod
metadata:
name: nginx
labels:
app: nginx
env: dev
Labels: Labels:
app: nginx app: nginx
env: prod env: dev
POD POD POD POD POD POD
Labels and
Selectors
apiVersion: v1
Kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
Labels: Labels:
app: nginx app: nginx
env: prod env: dev
POD POD POD POD POD POD
Labels and
Selectors
apiVersion: v1
Kind: Pod
metadata:
name: nginx
spec:
selector:
app: nginx
env: prod
Labels: Labels:
app: nginx app: nginx
env: prod env: dev
POD POD POD POD POD POD
Pods
Un Pod peut contenir un ou plusieurs conteneurs.
Les conteneurs dans un Pod partagent le même espace de noms réseau (ils ont
la même adresse IP et le même port).
Ils peuvent également partager des volumes de stockage, ce qui leur permet
d'échanger des données plus facilement.
Pods
apiVersion: v1 # Version de l'API Kubernetes utilisée
kind: Pod # Type d'objet à créer
metadata:
name: nginx-pod # Nom du Pod
labels: # Labels attribués au Pod
app: nginx
spec: # Spécification du Pod
containers: # Conteneurs à exécuter dans le Pod
- name: nginx # Nom du conteneur
image: nginx:1.17.1 # Image du conteneur à utiliser
ports:
- containerPort: 80 # Port que le conteneur doit exposer
Deployments
Un déploiement dans Kubernetes est un objet de niveau
supérieur qui gère les Pods et leurs réplicas (instances).
Mise à Jour
Automatique
Rollbacks
Mise à l'echelle
Auto-réparation
Deployments
v1 v2
Replica- Replica-
set set
POD POD POD POD
Deployments
apiVersion: apps/v1 # Version de l'API pour les déploiements
kind: Deployment # Type de l'objet
metadata:
name: nginx-deployment # Nom du déploiement
spec:
replicas: 3 # Nombre de réplicas (instances de Pod)
selector:
matchLabels:
app: nginx # Sélectionne les Pods avec ce label
template: # Template pour les Pods
metadata:
labels:
app: nginx # Label appliqué aux Pods
spec:
containers:
- name: nginx
image: nginx:1.17.1 # Image du conteneur
ports:
- containerPort: 80
Services
1 2
Service Discovery Service Discovery
Moyen pour connecter Moyen pour connecter
différentes services avec une différentes services avec une
seule Endpoint stable. seule Endpoint stable.
SVC
POD SVC POD POD POD POD
[Link]
Service
Types
apiVersion: v1
kind: Service
metadata:
Private 1 ClusterIP name: nginx-service
spec:
Public 2 NodePort type: NodePort
selector:
3 LoadBalancer app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30007
Storage
PV PVC
apiVersion: v1 apiVersion: v1
1 Volumes kind: PersistentVolume kind: PersistentVolumeClaim
metadata: metadata:
2 PersistantVolumes(PVs) name: pv-example name: pvc-example
spec: spec:
storageClassName: manual storageClassName: manual
3 PersistantVolumeClaims(PVCs)
capacity: accessModes:
storage: 5Gi - ReadWriteOnce
4 StorageClasses accessModes: resources:
- ReadWriteOnce requests:
hostPath: storage: 5Gi
path: "/mnt/data"
Ingress & Ingress
Conroller
LoadBalancer LoadBalancer LoadBalancer
Cluster Cluster
Ingress
Service Service Service Service
POD POD POD POD POD POD POD POD POD POD POD POD
Ingress & Ingress Controller
LoadBalancer
Cluster
Ingress Controller
Ingress Object
Service Service
POD POD POD POD POD POD
Ingress & Ingress Controller
apiVersion: [Link]/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: [Link]
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: web-service
port:
number: 80
- host: [Link]
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: api-service
port:
number: 80