Orchestration
Orchestration
Orchestration des conteneurs :
Automatiser …
l'organisation, la coordination et la gestion
… des conteneurs
Déploiement
Orchestrateurs
Docker Compose
Limité à une machine (host)
Définition en YAML
Healthcheck
Scaling
Restart policy
…
Simple et idéal pour un PoC, un test ou un développement
Docker Swarm
Cluster de machines (hosts)
Chaque machine est un node qui peut être soit
Manager : gère le cluster
Worker : exécute les conteneurs
CLI, pas de GUI intégrée
Docker Swarm

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
Kubernetes
K8s
Créé chez Google et offert à la CNCF (Cloud Native Computing Foundation)
Master et Nodes
CLI et GUI (Dashboard)
Kubernetes

OpenShift
Développé par Red Hat par dessus Kubernetes
Fonctionnalités de K8s +
Image registry
CI/CD intégré
Meilleur cloisonnement entre les projets
Open Source (OKD) et Enterprise
OpenShift

https://access.redhat.com/documentation/en-us/openshift_container_platform/4.7/html/about/oke-about
Alternatives
Nomad : par HashiCorp (Vagrant, Terraform, Vault, Consul, ...)
Mesos : par Apache
Rancher
Rancher est un orchestrateur de K8s
Evite le vendor lock-in
Rancher
Rancher
Kubernetes

Pod
Plus petite unité déployable de K8s
1 ou plusieurs conteneurs qui partagent
le réseau (localhost)
le stockage (volumes)
Phases : Pending, Running, Succeeded, Failed, Unknown
Restart policy : Always, OnFailure, Never
Probes (health check) : Startup (démarré), Readiness (prêt), Liveness (toujours en vie)
Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
Deployment
Défini un état souhaité des Pods
Crée un ReplicaSet pour chaque nouvel état
Rolling update : déploiement progressif
Rollback : retour à la version précédente
Scaling : augmentation ou diminution du nombre de Pods
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
Service
Reverse Proxy sur les Pods (Reverse Proxy)
Selector sur les Pods
Load Balancing entre les Pods
Service
https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/
Service
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app.kubernetes.io/name: proxy
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
name: http-web-svc
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app.kubernetes.io/name: proxy
ports:
- name: name-of-service-port
protocol: TCP
port: 80
targetPort: http-web-svc
Probes
Health check des Pods
Readiness Probe
Liveness Probe
Ingress
Abstraction qui définit un ensemble de Services
Connexion externe au cluster
Ingress
https://kubernetes.io/docs/concepts/services-networking/ingress/
Volume

https://vocon-it.com/2018/12/10/kubernetes-4-persistent-volumes-hello-world/
Configuration
Définition des ConfigMap et Secret globalement
Injection dans les Pods
Namespace

https://belowthemalt.com/2022/04/09/kubernetes-namespaces/
Isolation des ressources
Nom unique au sein d'un namespace
Configuration des ressources
Fichier YAML pour définir les ressources
kubectl apply -f deployment.yaml pour les déployer
Deployment
Service
Ingress
Volume
ConfigMap
Secret