Skip to content

Kubernetes

Cours en ligne Udacity: Scalable Microservices with Kubernetes

Documentation/Concepts

Bénéfices

  • Réseau de containers spanné sur plusieurs nodes, mais avec abstraction de façon à ne voir qu'une seule machine logique.
  • Note: En mode docker normal, utilisation du docker bridge sur le host + mapping sur eth0 à l'intérieur du container = seuls les containers sur la même machine et sur le même bridge peuvent se voir.

Architecture

Kubernetes dispose d'une architecture modulable. Permet la création de distributions Kubernetes. On peut rapprocher Kubernetes d'un OS pour containers.

  • CRI: Container Runtime Interface
  • CNI: Container Network Interface
  • CSI: Container Storage Interface

Kubernetes est un système API-centric avec des resources telles que les deployments, pod, nodes etc. Le client CLI, les nodes dialoguent avec le serveur d'API (situé sur le master).

La persistance est gérée par un moteur clé-valeur (etcd).

On peut query n'importe quelle instance de resource en utilisant un système de labels et selectors.

Schémas

Concepts

Kubernetes engine:

Installation de Kubernetes: GKE, EKS... Une fois l'engine crée, il faut encore créer le ou les clusters qui seront à l'intérieur

Cluster

  • on doit spécifier le nombre de nodes du cluster kubernetes

Master

  • contient l'API Server + le Replication Controller + le Scheduler
  • Scheduler: tente de répondre à la spécification de l'architecture du cluster à tout moment (nombre de nodes etc)
  • 1 master gouverne plusieurs workers/nodes

Deployment

kubectl run nginx --image=nginx:1.0.0 crée un deployment

Replica set

Résultat d'une query (labels + sleectors) pour savoir quelles resources vont être scale.

Node

Appelé worker ou minion (ancien borg name)

VM ou machine physique

  • un node accueille plusieurs pods
  • chaque node run aussi: Kubelet, kube-proxy, et le container runtime (Docker par ex)

Pod

Groupement logique de containers et volumes (process inter-dépendants, resources partagées etc). On peut le voir comme la représentation interne des containers dans Kubernetes.

1
kubectl get pods
  • possède 1 seule adresse IP qui change au restart
  • de base, accessible depuis l'intérieur du cluster
  • tous les container sur un même pod se connaissent au niveau network et storage
  • contient plusieurs containers et volumes
  • pod template = conf pour créer des réplicas de pod
  • HPA: Horizontal Pod Autoscaling, policy pour faire du scaling auto
  • Manifest: fichier de configuration du pod

Labels: permet de grouper des pods et des les sélectionner pour faire des opérations dessus (ex: app=myapp tier=backend)

Service

Resource qui permet la feature de service discovery: route le trafic vers les bons pods (qui changent tout le temps d'IP), peu importe où ils soient. On peut le voir comme la représentation "externe" des applications déployées dans Kubernetes

Expose une IP (+ DNS endpoint optionnel) fixe par service.

Obtenu lorsque l'on expose un deployment

1
kubectl expose deployment nginx --port 80 --type LoadBalancer

Kubelet

Agent

Kube-proxy

Etcd

Manifest:

Tools

Minikube: single-node kubernetes en mode local = environnement de dev. Ce machin possède un dashboard.

MicroK8s: pareil

Kubectl: outil officiel cli

Helm: outil officiel de gestion de package

  • Package: une application qui contient des charts et des templates
  • Chart: chart.yml, équivalent d'un docker-compose
  • Template: autres fichiers de config