kubernetes, pourquoi et comment

Post on 09-Jan-2017

638 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

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