Kubernetes
de la théorie à la pratique
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...