Ranger des cubes dans des boites

Une balade de Docker à Rancher

Crée par Baptiste Leduc pour Weglot

1. Containers

On les utilise déjà tous, mais c'est quoi en vrai ?

Grossièrement ...

C'est un mélange de:

chroot,namespaces & cgroups.

Des process qui permettent d'isoler un environnement au sein d'un système linux.

&

Utilisé en production depuis plus de 15 ans par Google via LXC (et l'utilisation de chroot)

Mais le papier R&D est sorti ~8 ans après, pour éviter la concurrence

2013

Création de Docker par Solomon Hykes

Au début basé sur LXC puis lâché pour un système de gestion du container interne: libcontainer

Une idée en tête: simplifier la création d’image via les Dockerfile et supprimer la lourdeur des VMs !

~20 milliards

de containers par semaine

Et gérer des containers en production, c'est loin d'être simple, surtout à cette échelle, il faut une solution !

2. Kubernetes

Gérer quelques containers avec un peu d'automatisation

Création de Borg en interne pour gérer ces soucis de gestion des containers

2014

Création du "Project Seven" par une partie du groupe ayant géré Borg

Google le rends open-source pour étendre son usage via Google Cloud

2015

Don de la gestion du projet à la Cloud Native Computing Fundation (CNCF)

Elle met en place ces règles de gestions pour que le projet puisse servir à tous et rends le lien avec Google plus faible

Un objectif simple

Gérer des centaines de milliers de serveurs en production de façon automatique, flexible, scalable et fiable

Aujourd’hui ~20k nodes max par cluster, encore trop faible comparés aux ~2m serveurs de Google

Et l'open-source, ça fonctionne ?

Un des projets les plus actif sur Github ! 100 a 250 commits / jour (32 000 PR depuis 2014)

Des entreprises comme Amazon ou Microsoft qui ont des ingénieurs travaillant sur le projet

Dialoguer avec Kubernetes

Comment ça marche ?

Simple Pod


							apiVersion: v1
							kind: Pod
							metadata:
							  name: nginx
							spec:
							  containers:
							  - name: nginx
							    image: nginx:1.7.9
							    ports:
							    - containerPort: 8080
						

Deployment


							apiVersion: apps/v1beta2
							kind: Deployment
							metadata:
							  name: nginx-deployment
							  labels:
							    app: nginx
							spec:
							  replicas: 3
							  selector:
							    matchLabels:
							      app: nginx
							  template:
							    metadata:
							      labels:
							        app: nginx
							    specs:
							      containers:
							      - name: nginx
							        image: nginx:1.7.9
							        ports:
							        - containerPort: 8080
						

Service


							apiVersion: v1
							kind: Service
							metadata:
							  name: nginx-svc
						    spec:
						      selector:
							    app: nginx
							  ports:
							  - protocol: TCP
							    port: 80
							    targetPort: 8080
						

Ingress


							apiVersion: extensions/v1beta1
							kind: Ingress
							metadata:
							  name: nginx-ingress
							  annotations:
							    nginx.ingress.kubernetes.io/rewrite-target: /
							spec:
							  rules:
							  - http:
							      paths:
							      - path: /
							        backend:
							          serviceName: nginx-svc
							          servicePort: 80
						

CronJob


							apiVersion: batch/v1beta1
							kind: CronJob
							metadata:
							  name: hello
							spec:
							  schedule: "*/1 * * * *"
							  jobTemplate:
							    spec:
							      template:
							        spec:
							          containers:
							          - name: hello
							            image: busybox
							            args:
							            - /bin/sh
							            - -c
							            - date; echo Hello world
							          restartPolicy: OnFailure
						
  • etcd: key/value storage
  • API Server: communication avec etcd
  • Controller Manager (logique des objets)
  • Scheduler: répartition des pods
  • kubelet: scheduler interne au serveur
  • kube-proxy: networking interne au serveur
  • pods: les containers :)

Qui utilise ça ?

Un exemple récent: Pokemon Go

Utilisation de Google Kubernetes Engine à une échelle planétaire !

Plus gros déploiement (hors Google) fait sur la plateforme !

3. Rancher

Mais bon, Kubernetes c'est compliqué !

C'est quoi ?

2014: Rancher Labs est fondé et crée Rancher !

Permet l'abstraction d'un service comme Kubernetes pour la plupart des providers populaires (Google / Amazon / Microsoft).

Et ainsi l'utilisation des services, du network, du load balancing, du monitoring et d'un recovery

Installation

Rien de plus simple ! Pour la production:


						$ docker run -d --restart=unless-stopped -p 80:80 -p 443:443 \
						rancher/rancher:latest --acme-domain admin.rancher.com
					

Et en plus, on auto-génère un certificat SSL avec certbot (via le service Let’s Encrypt)

Et à l'usage ?

  • Version haut niveau, donc pas autant de possibilités qu'un Kubernetes classique, mais toutes les fonctions de base sont là !
  • Mais un accès complet à kubectl pour pouvoir utiliser Kubernetes en direct
  • Ajout du layer "Projet" qui permet de mieux structurer les applications

Mais aussi:

  • Gestion complète des droits et login via github qui simplifie l'auth.
  • Gestion des storages abstraites / automatisés (Persistant Volume / Storage Classes)
  • Gestion de pipelines avec synchronisation Github
  • Monitoring via des alertes (Slack / Email / WebHook)

4. Fin

Links