Aller au contenu principal

Orchestration

Objectifs

  • Expliquer ce qu'est l'orchestration
  • Comparer les différents orchestrateurs
  • Décrire les concepts de base de Kubernetes

Cours

Orchestration

DevOps

Orchestration

  • Orchestration des conteneurs :

  • Automatiser

  • l'organisation, la coordination et la gestion

  • … des conteneurs

Déploiement

https://kubernetes.io/docs/concepts/overview/

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

https://commons.wikimedia.org/wiki/File:Kubernetes.png

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

https://ranchermanager.docs.rancher.com/reference-guides/rancher-manager-architecture/architecture-recommendations

Rancher

https://www.rancher.com/why-rancher

Kubernetes

https://www.cncf.io/blog/2019/08/19/how-kubernetes-works/

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

https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes

Liveness Probe

https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes

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

F pour passer en plein écran ou O pour afficher la vue d'ensemble.
Versions sans animation, plein écran, imprimable.

Références