kubernetes, pourquoi et comment
Post on 09-Jan-2017
638 Views
Preview:
TRANSCRIPT
KubernetesPourquoi et comment ?
Qui sommes nous ?
2
@geromeegron@jbclaramonte
Agenda
Pourquoi ?
Orchestration, scheduler, cluster management …
Comment ?
Concepts
Spécificités
Cas Pratique
3
4
Orchestration, Scheduler,
Cluster management, … ?
5
Cela reste intuitif
Containers sur une machine
Apache Tomcat Postgres
6
Mais quand on passe à plusieurs serveurs on comprend vite qu’il faut un outil pour pouvoir garder le contrôle
Containers sur plusieurs machines
Apache
Tomcat
Tomcat
Postgres
Redis
Tomcat
Redis
Et si ...
… un container s’arrête … ?
… on veut scaler facilement … ?
Comment nos applications connaissent les endpoints des
services appellés ?
Comment se passe la persistance des données de certains de mes containers
12
En fait ...
13
Vous avez besoin d’un …Orchestrateur
(de containers)
14
Orchestration=
Cluster Management+
Container Scheduling
15
Cluster Management ?
16
Cluster Management
ClusterManager
17
Cluster Management
A
ClusterManager
18
Cluster Management
ClusterManager
AA
j’ai un nouveau serveur dans mon cluster
19
Container Scheduling ?
20
Container Scheduling
B
A
C
Scheduler
21
Deploy
22
Container Scheduling
B
A
C
Scheduler
deploy
23
Container Scheduling
B
A
C
Scheduler
deploy
24
Scale
25
Container Scheduling
B
A
C
Scheduler
scale
26
Container Scheduling
B
A
C
Scheduler
scale
27
Health check
28
Container Scheduling
B
A
C
Scheduler
29
Container Scheduling
B
A
C
Scheduler
30
Scheduler Classification
Monolithic
un cluster manager
+
un scheduler
Google Borg
31
Two Level
un cluster manager
+
plusieurs scheduler
Mesos Marathon
Shared State
plusieurs schedulers ”autonomes”
Omega, Kubernetes
Historique
Kubernetes
33
2004 : Google Borg
2006 : Google release les cgroups dans linux
2009 ? : Google Omega
2011 : Mesos
2014 : Google “open source” Kubernetes
2015 : Kubernetes V1.0
34
Concepts
Kubernetes
36
Master
Node
Node
ClusterKubelet
Kubelet
37
Node
Kubelet
Docker
Pod Pod Pod
38
Pod
● Plus petite unité logique du cluster
● Englobe un ou plusieurs conteneur(s) partageant un même
contexte (adresse IP, volumes)
● Unité pouvant être répliquée
● Lié à un node
● Existence temporaire
Replication controller
● Superviseur des pods à travers le cluster
● Se base sur un template de pod
● Son rôle est de s’assurer qu’un certain nombre de pods sont
actuellement en vie
● Ce n’est pas un load balancer!
39
Service
● Point d’accès à un pod ou à un ensemble de pods
● N’est pas lié au Replication Controller
● Load balancer
40
{ "kind": "Service", "apiVersion": "v1", "metadata": { "name": "my-service" }, "spec": { "selector": { "app": "MyApp" }, "ports": [ { "protocol": "TCP", "port": 80, "targetPort": 9376 } ] }}
41
Service [name=my-service]{
selector: MyApp}
Pod 1{
label: MyApp}
Pod 2{
label: MyApp}
En résumé
● Node / Master● Pods● Replication Controller● Service
42
Spécificités
Kubernetes
Appel du service intra-cluster
$client = new redis_client([ 'scheme' => 'tcp', 'host' => 'my-service', 'port' => 80, ]);
44
Et de l’extérieur?
45
Lors de la configuration d’un service, un champ type est à configurer:
● cluster IP (par défaut et non accéssible de l’extérieur)
● node port
● load balancer
Node
Node
8888
8888
Pod
Pod
46
Composition du master
● Expose une API REST
● Replication controller
● Scheduler
● etcd
● Node controller
47
48
Node controller
● S’occupe de vérifier le statut des nodes
● N’est pas capable de provisionner les nodes
● Ajoute les nodes qui sont configurés au cluster
● Supporte jusqu’à 100 noeuds (objectifs: 1000 pour 2016)
Configuration d’un node
● Kubelet
● Kube-proxy
● Docker
● Flannel (ou autre surcouche réseau)
49
Health checking
Trois types:
● HTTP Health checks
● Container exec
● TCP Socket
50
Volume
● Cycle de vie lié à celui du pod le contenant, selon le type● Un pod peut être lié à plusieurs volumes● Plusieurs types de volumes sont disponibles:
○ emptyDir○ gcePersistentDisk○ awsElasticBlockStore○ nfs○ gitRepo○ secret○ etc ...
51
Comment déployer un cluster?
● En local○ Vagrant○ Docker○ Cluster en local
● Solution hôte○ Google Container Engine
● Solution Cloud○ GCE○ AWS○ Azure
● Autres
52
Cas pratique
Kubernetes
Comment déployer mon application ?
Nous allons déployer une application constitué de:
● Un master redis
● Deux slaves redis
● Trois frontends accessibles de l’extérieur
54
55
Redis Master
Redis Slave
Frontend
Frontend
Frontend
Load Balancer
Redis Slave
56
Pod Redis Master
Replication Controller
57
Pod Redis Master
Replication Controller
Service Redis Master
58
Pod Redis Master
Replication Controller
Service Redis Master
Pod Redis Slave
Pod Redis Slave
Replication Controller
59
Pod Redis Master
Replication Controller
Service Redis Master
Service Redis Slave
Pod Redis Slave
Pod Redis Slave
Replication Controller
60
Pod Redis Master
Replication Controller
Service Redis Master
Service Redis Slave
Pod Redis Slave
Pod Redis Slave
Replication Controller
Pod Frontend
Pod Frontend
Pod Frontend
Replication Controller
61
Pod Redis Master
Replication Controller
Service Redis Master
Service Redis Slave
Pod Redis Slave
Pod Redis Slave
Replication Controller
Pod Frontend
Pod Frontend
Pod Frontend
Replication Controller
Service Frontend en mode load balancer
Comment puis-je monitorer mon cluster?
62
Master
Node
PodPod
Node
Heapster
Kubelet
Kubelet
cAdvisor
cAdvisor
Storage Backend
Conclusion
Kubernetes
Conclusion
● Un projet stabilisé pour la V1
● Amélioration de la documentation, mais peut encore mieux
faire
● Beaucoup de choses à venir○ provisionning de node
○ migration de pod
● Cherche à être totalement adaptable
64
Questions / Réponses
Kubernetes
Merci
Kubernetes
top related