Kubernetes
Introduction
Kubernetes v1.22 11/2021
Projet
Aperçus
Que signifie « Kubernetes » ?
Greek for “pilot” or
“Helmsman of a ship”
Image Source
Qu'est-ce que Kubernetes ?
● Projet issu de Google en tant que plate-forme
d'orchestration de conteneurs open source.
● Construit à partir des leçons tirées des expériences de
développement et d'exécution de Borg et Omega de
Google.
● Conçu dès le départ comme un ensemble de
composants faiblement couplés centrés sur le
déploiement, la maintenance et la mise à l'échelle des
charges de travail.
Que fait Kubernetes ?
● Connu comme le noyau Linux des systèmes distribués.
● Supprime le matériel sous-jacent des nœuds et fournit
une interface uniforme pour que les charges de travail
soient à la fois déployées et consomment le pool de
ressources partagé.
● Fonctionne comme un moteur de résolution d'état en
faisant converger l'état réel et souhaité du système.
Découple l'infrastructure et la mise à
l'échelle
● Tous les services de Kubernetes sont nativement Load
Balanced.
● Peut évoluer vers le haut et vers le bas de manière
dynamique.
● Utilisé à la fois pour permettre l'auto-réparation et la mise à
niveau ou la restauration transparente des applications.
Comment ces environnements
fonctionnent-ils ?
Architecture
Aperçus
Architecture Aperçus
Control Plane
Composant
Control Plane Components
● kube-apiserver
● etcd
● kube-controller-manager
● kube-scheduler
kube-apiserver
● Composant sur le master qui expose l'API Kubernetes.
Il s'agit du front-end pour le plan de contrôle
Kubernetes.
● Il est conçu pour une mise à l'échelle horizontale, ce qui
veut dire qu'il met à l'échelle en déployant des instances
supplémentaires. Voir Construire des Clusters en Haute
Disponibilité.
etcd
● etcd agit comme la banque de données du cluster.
● L'objectif par rapport à Kubernetes est de fournir un
magasin clé-valeur solide, cohérent et hautement
disponible pour l'état de cluster persistant.
● Stocke les objets et les informations de configuration.
kube-controller-manager
● Sert de démon principal qui gère toutes les boucles de
contrôle des composants principaux.
● Surveille l'état du cluster via l'apiserver et oriente le cluster
vers l'état souhaité.
Ces contrôleurs incluent :
•Node Controller : Responsable de détecter et apporter une réponse lorsqu'un nœud tombe en
panne.
•Replication Controller : Responsable de maintenir le bon nombre de pods pour chaque objet
ReplicationController dans le système.
•Endpoints Controller : Remplit les objets Endpoints (c'est-à-dire joint les Services et Pods).
•Service Account & Token Controllers : Créent des comptes par défaut et des jetons d'accès à
l'API pour les nouveaux namespaces
kube-scheduler
● Composant sur le master qui surveille les pods nouvellement
créés qui ne sont pas assignés à un nœud et sélectionne un
nœud sur lequel ils vont s'exécuter.
● Les facteurs pris en compte pour les décisions de planification
(scheduling) comprennent les exigences individuelles et
collectives en ressources, les contraintes
matérielles/logicielles/politiques,
● les spécifications d'affinité et d'anti-affinité, la localité des
données, les interférences entre charges de travail et les dates
limites.
Architecture Aperçus
Node
Composant
Node Components
● kubelet
● kube-proxy
● Container Runtime Engine
kubelet
● Agit en tant qu'agent de nœud responsable de la
gestion du cycle de vie de chaque pod sur son hôte.
● Kubelet comprend les manifestes de conteneur YAML
qu'il peut lire à partir de plusieurs sources :
○ chemin du fichier
○ Point de terminaison HTTP
○ etcd watch agissant sur tout changement
○ Mode serveur HTTP acceptant les manifestes de conteneur via
une simple API.
kube-proxy
● Gère les règles du réseau sur chaque nœud.
● Effectue le transfert de connexion ou l'équilibrage de
charge pour les services de cluster Kubernetes.
● Modes proxy disponibles :
○ Userspace
○ iptables
○ ipvs (par défaut si pris en charge)
Container Runtime Engine
● Un runtime de conteneur est une application compatible
CRI (Container Runtime Interface) qui exécute et gère
les conteneurs.
○ Conteneur (docker)
○ Cri-o
○ Rkt
○ Kata (formerly clear et hyper)
○ Virtlet (environnement d'exécution compatible VM CRI)
Aperçus
Architecture au sein de
HUAWEI
Architecture HA
Aperçus
POD
POD installé
Composant installé
● AWX
● POSTGRESQL
● Dynamic NFS provisioning
Aperçus
Automatisation
Ansible
● Nous utilisons Ansible pour installer le socle Kuberntes
Helm
● Nous utilisons Helm
pour installer les
composants:
○ AWX
○ POSTGRESQL
○ Dynamic NFS
provisioning

présentation plateforme Kubernetes (K8S)

  • 1.
  • 2.
  • 3.
    Que signifie «Kubernetes » ? Greek for “pilot” or “Helmsman of a ship” Image Source
  • 4.
    Qu'est-ce que Kubernetes? ● Projet issu de Google en tant que plate-forme d'orchestration de conteneurs open source. ● Construit à partir des leçons tirées des expériences de développement et d'exécution de Borg et Omega de Google. ● Conçu dès le départ comme un ensemble de composants faiblement couplés centrés sur le déploiement, la maintenance et la mise à l'échelle des charges de travail.
  • 5.
    Que fait Kubernetes? ● Connu comme le noyau Linux des systèmes distribués. ● Supprime le matériel sous-jacent des nœuds et fournit une interface uniforme pour que les charges de travail soient à la fois déployées et consomment le pool de ressources partagé. ● Fonctionne comme un moteur de résolution d'état en faisant converger l'état réel et souhaité du système.
  • 6.
    Découple l'infrastructure etla mise à l'échelle ● Tous les services de Kubernetes sont nativement Load Balanced. ● Peut évoluer vers le haut et vers le bas de manière dynamique. ● Utilisé à la fois pour permettre l'auto-réparation et la mise à niveau ou la restauration transparente des applications.
  • 7.
  • 8.
  • 10.
  • 11.
    Control Plane Components ●kube-apiserver ● etcd ● kube-controller-manager ● kube-scheduler
  • 12.
    kube-apiserver ● Composant surle master qui expose l'API Kubernetes. Il s'agit du front-end pour le plan de contrôle Kubernetes. ● Il est conçu pour une mise à l'échelle horizontale, ce qui veut dire qu'il met à l'échelle en déployant des instances supplémentaires. Voir Construire des Clusters en Haute Disponibilité.
  • 13.
    etcd ● etcd agitcomme la banque de données du cluster. ● L'objectif par rapport à Kubernetes est de fournir un magasin clé-valeur solide, cohérent et hautement disponible pour l'état de cluster persistant. ● Stocke les objets et les informations de configuration.
  • 14.
    kube-controller-manager ● Sert dedémon principal qui gère toutes les boucles de contrôle des composants principaux. ● Surveille l'état du cluster via l'apiserver et oriente le cluster vers l'état souhaité. Ces contrôleurs incluent : •Node Controller : Responsable de détecter et apporter une réponse lorsqu'un nœud tombe en panne. •Replication Controller : Responsable de maintenir le bon nombre de pods pour chaque objet ReplicationController dans le système. •Endpoints Controller : Remplit les objets Endpoints (c'est-à-dire joint les Services et Pods). •Service Account & Token Controllers : Créent des comptes par défaut et des jetons d'accès à l'API pour les nouveaux namespaces
  • 15.
    kube-scheduler ● Composant surle master qui surveille les pods nouvellement créés qui ne sont pas assignés à un nœud et sélectionne un nœud sur lequel ils vont s'exécuter. ● Les facteurs pris en compte pour les décisions de planification (scheduling) comprennent les exigences individuelles et collectives en ressources, les contraintes matérielles/logicielles/politiques, ● les spécifications d'affinité et d'anti-affinité, la localité des données, les interférences entre charges de travail et les dates limites.
  • 16.
  • 17.
    Node Components ● kubelet ●kube-proxy ● Container Runtime Engine
  • 18.
    kubelet ● Agit entant qu'agent de nœud responsable de la gestion du cycle de vie de chaque pod sur son hôte. ● Kubelet comprend les manifestes de conteneur YAML qu'il peut lire à partir de plusieurs sources : ○ chemin du fichier ○ Point de terminaison HTTP ○ etcd watch agissant sur tout changement ○ Mode serveur HTTP acceptant les manifestes de conteneur via une simple API.
  • 19.
    kube-proxy ● Gère lesrègles du réseau sur chaque nœud. ● Effectue le transfert de connexion ou l'équilibrage de charge pour les services de cluster Kubernetes. ● Modes proxy disponibles : ○ Userspace ○ iptables ○ ipvs (par défaut si pris en charge)
  • 20.
    Container Runtime Engine ●Un runtime de conteneur est une application compatible CRI (Container Runtime Interface) qui exécute et gère les conteneurs. ○ Conteneur (docker) ○ Cri-o ○ Rkt ○ Kata (formerly clear et hyper) ○ Virtlet (environnement d'exécution compatible VM CRI)
  • 22.
  • 23.
  • 24.
  • 25.
    POD installé Composant installé ●AWX ● POSTGRESQL ● Dynamic NFS provisioning
  • 26.
  • 27.
    Ansible ● Nous utilisonsAnsible pour installer le socle Kuberntes
  • 28.
    Helm ● Nous utilisonsHelm pour installer les composants: ○ AWX ○ POSTGRESQL ○ Dynamic NFS provisioning

Notes de l'éditeur

  • #3 Quick overview of the project and what Kubernetes it Note: This is currently for v1.12
  • #4 The first question always asked There is also the abbreviation of K8s -- K, eight letters, s
  • #5 There’s a phrase called Google-scale. This was developed out of a need to scale large container applications across Google-scale infrastructure borg is the man behind the curtain managing everything in google Kubernetes is loosely coupled, meaning that all the components have little knowledge of each other and function independently. This makes them easy to replace and integrate with a wide variety of systems
  • #6 linux kernel of distributed systems Sort of like a hypervisors, in that it abstracts away the underlying host resources and shares them in a normalized way. the underlying substrate or platform to build your applications and tools on top of Think of Kubernetes like a higher-level language for your application architecture. you describe what you need and it tries to resolve it with that in mind, it acts as an engine to resolve state using the abstracted resources to deploy and manage your application. It is declarative, and not imperative. You tell it or “declare” what you want, and it figures out the rest. imperative you tell something every step you want it to do declarative you tell it what you want it to be, and it figures it out e.g. ‘I want 5 instances of x’ and it just does it, if something dies, it brings it back to get to 5
  • #7 A lot of key components are batteries-included
  • #8 A lot of key components are batteries-included
  • #9 Get right into the meat of the internals.
  • #10 General High Level Architecture Overview There is 1-n number of masters or control plane servers, usually deployed in 1,3,5,7 configurations Up to 5000 “worker nodes” This is what it’s certified to and E2E tests are built for
  • #12 Kube-apiserver Gate keeper for everything in kubernetes EVERYTHING interacts with kubernetes through the apiserver Etcd Distributed storage back end for kubernetes The apiserver is the only thing that talks to it Kube-controller-manager The home of the core controllers kube-scheduler handes placement
  • #13 provides forward facing REST interface into k8s itself everything, ALL components interact with each other through the api-server handles authn, authz, request validation, mutation and admission control and serves as a generic front end to the backing datastore
  • #14 is the backing datastore extremely durable and highly available key-value store was developed originally by coreos now redhat however it is in the process of being donated to the CNCF
  • #15 Its the director behind the scenes The thing that says “hey I need a few more pods spun up” Does NOT handle scheduling, just decides what the desired state of the cluster should look like e.g. receives request for a deployment, produces replicaset, then produces pods
  • #16 scheduler decides which nodes should run which pods updates pod with a node assignment, nodes poll checking which pods have their matching assignment takes into account variety of reqs, affinity, anti-affinity, hw resources etc possible to actually run more than one scheduler example: kube-batch is a gang scheduler based off LSF/Symphony from IBM
  • #18 Kubelet Agent running on every node, including the control plane Kube-proxy The network ‘plumber’ for Kubernetes services Enables in-cluster load-balancing and service discovery Container Runtime Engine The containerizer itself - typically docker
  • #19 the single host daemon required for a being a part of a kubernetes cluster can read pod manifests from several different locations workers: poll kube-apiserver looking for what they should run masters: run the master services as static manifests found locally on the host
  • #20 kube-proxy is the plumber creates the rules on the host to map and expose services uses a combination of ipvs and iptables to manage networking/loadbalancing ipvs is more performant and opens the door to a wider feature set (port ranges, better lb rules etc)
  • #21 Kubernetes functions with multiple different containerizers Interacts with them through the CRI - container runtime interface CRI creates a ‘shim’ to talk between kubelet and the container runtime cri-o is a cool one that allows you to run any oci compatible image/runtime in Kubernetes kata is a super lightweight KVM wrapper
  • #22 The complete picture
  • #24 Kubernetes functions with multiple different containerizers Interacts with them through the CRI - container runtime interface CRI creates a ‘shim’ to talk between kubelet and the container runtime cri-o is a cool one that allows you to run any oci compatible image/runtime in Kubernetes kata is a super lightweight KVM wrapper
  • #26 Kubernetes functions with multiple different containerizers Interacts with them through the CRI - container runtime interface CRI creates a ‘shim’ to talk between kubelet and the container runtime cri-o is a cool one that allows you to run any oci compatible image/runtime in Kubernetes kata is a super lightweight KVM wrapper
  • #28 Kubernetes functions with multiple different containerizers Interacts with them through the CRI - container runtime interface CRI creates a ‘shim’ to talk between kubelet and the container runtime cri-o is a cool one that allows you to run any oci compatible image/runtime in Kubernetes kata is a super lightweight KVM wrapper
  • #29 Kubernetes functions with multiple different containerizers Interacts with them through the CRI - container runtime interface CRI creates a ‘shim’ to talk between kubelet and the container runtime cri-o is a cool one that allows you to run any oci compatible image/runtime in Kubernetes kata is a super lightweight KVM wrapper