Kubernetes

de la théorie à la pratique

Rémi Cailletaud
CNRS/OSUG

Avertissement

Contexte

L'OSUG

  • 6 unités de recherche, 5 équipes de recherche associées et 2 unités de service ;
  • 28 SNO ;
  • Soutien aux labo et aux SNO ;
  • ASR / Dev.

Gestion de configuration

  • Peu de pratiques communes ;
  • Trop de tâches d'administration pour les dev.

Des demandes pour hébergement de conteneurs

gestion ?

sécurité ?

Pourquoi Kubernetes ?

  • CoreOS et Rancher Labs adoptent Kubernetes ;
  • Seul véritable concurrent : Docker Swarm ;
  • Modularité, intégration et gouvernance.

Présentation

Historique

  • Google Borg, en Java ;
  • Version 1.0 en 2015 ;
  • Pilotage par Google, puis par la Cloud Native Computing Foundation.
We must treat the datacenter itself as one massive warehouse-scale computer.

in The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines
Luiz André Barroso
Jimmy Clidaras
Urs Hölzle

Objectifs

  • Abstraction du matériel et des OS ;
  • Couplage faible des composants ;
  • Overhead minimal ;
  • Fonctionnement sur bare-metal et cloud : l'OS du cloud.

Concepts

API déclarative

On définit des "contrats" pour nos applications.

Autoréparation

avant
après
  • Moi : « Lance-moi une instance d'InfluxDB. »
  • Kubernetes : « OK, je m'en occupe. »
  • Kubernetes: « Tiens, Jonathan a encore lancé une monstro-requête. Je redémarre l'instance. »

Immutabilité

Tests, passage à l'échelle, mise à jour et rollback...

Architecture

Objets de base

Namespace


              apiVersion: v1
              kind: Namespace
              metadata:
                name: grafana
              
Un numéro de version le type de l'objet et un nom...

Pod: unité de base de l'ordonnancement


                apiVersion: v1
                kind: Pod
                metadata:
                  name: pod-example
                spec:
                  containers:
                  - name: nginx
                    image: nginx:stable-alpine
                    ports:
                    - containerPort: 80    
                    resources:
                      requests:
                        memory: "64Mi"
                        cpu: "250m"
                      limits:
                        memory: "128Mi"
                        cpu: "500m"
              
L'image du conteneur, Le port exposé, Les ressources demandées et limites.

Deployment


              apiVersion: apps/v1
              kind: Deployment
              metadata:
                name: redis
              spec:
                replicas: 1
                selector:
                  matchLabels:
                    app: redis
                template:
                  metadata:
                    labels:
                      app: redis
                  spec:
                    containers:
                    - image: redis
                      name: redis
              
Une template de Pod Le nombre de replicas

StatefulSets

Applications statefull : réseau, nom d'hôte et stockage sont persistents.

DaemonSets

Un pod par nœud. Monitoring, log, stockage...

Service


                apiVersion: v1
                kind: Service
                metadata:
                  name: redis
                spec:
                  ports:
                    - port: 6379
                      targetPort: 6379
                  selector:
                    app: redis
              
  • Ressource durable qui permet d'exposer les pod ;
  • adresse IP et nom DNS statiques
servicename.namespace.svc.cluster.local
Sélection par label

Mais aussi...

  • Job, CronJob
  • Volume, PersistentVolume, PersistentVolumeClaim
  • ConfigMap, Secret
  • Ingress

Nos choix

Déploiement

  • Provisionnement des nœuds avec Salt Cloud ;
  • Configuration des nœuds avec SaltStack ;
  • Provisonnement du cluster avec Rancher Kubernetes Engine.

Configuration déclarative, peut être versionnée

L'infrastructure

Les services

  • Canal pour le réseau (L3 VXLAN et NetworkPolicy) ;
  • Metallb : Load Balancing L2 (ARP);
  • Traefik : Reverse Proxy et HA/Load Balancing L7;
  • vsphere-cloud-provider et nfs-provider ;
  • Prometheus : monitoring et alertes ;
  • Stash : sauvegarde.

Futur

  • Montée en charge ;
  • Pratiques GitOps ;
  • Intégration dans l'ACI ?
  • Travail d'évangélisation des avec les développeurs.

Conclusion

Stable, robuste, complet et pas si complexe ;

De nouveaux paradigmes, un ecosystème très (très) dynamique...

https://huit.re/sari-k8s