Docker Orchestra (Swarm | K8s) -- Kubernetes for beginners

Docker Orchestra (Swarm | K8s) -- Kubernetes for beginners

Kubernetes

What? (Definition)

English

Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. It provides a robust and flexible framework for managing distributed systems and abstracts away the complexity of managing individual containers, allowing developers to focus on building and shipping applications.

French

Kubernetes est une plateforme d'orchestration de conteneurs open-source qui automatise le déploiement, le dimensionnement et la gestion des applications conteneurisées. Elle offre un cadre robuste et flexible pour gérer les systèmes distribués et abstrait la complexité de la gestion des conteneurs individuels, permettant aux développeurs de se concentrer sur la construction et la livraison d'applications.

A brief history

English

Kubernetes, often abbreviated as K8s, emerged from the need to manage and orchestrate containerized applications at scale. It was originally developed by Google and open-sourced in 2014. The project quickly gained popularity and is now maintained by the Cloud Native Computing Foundation (CNCF), with contributions from a vibrant community of developers worldwide.

French

Kubernetes, souvent abrégé K8s, est né de la nécessité de gérer et d'orchestrer des applications conteneurisées à grande échelle. Il a été initialement développé par Google et publié en open source en 2014. Le projet a rapidement gagné en popularité et est maintenant maintenu par la Cloud Native Computing Foundation (CNCF), avec des contributions d'une communauté dynamique de développeurs du monde entier.

Architecture & Key Components

English

  • Master Node: The control plane of the Kubernetes cluster, responsible for managing and coordinating all activities within the cluster. It includes various components such as the API server, scheduler, and controller manager.
  • Worker Nodes: Also known as "Minions" or "Kubelets," these nodes are responsible for running the containers and executing the workloads. Each worker node runs the Kubernetes runtime (e.g., Docker) and communicates with the master node to receive instructions and report the status of the containers.
  • Pod: The basic unit of deployment in Kubernetes. A pod is a logical group of one or more containers that share network and storage resources. Containers within a pod can communicate with each other using localhost, making them co-located and tightly coupled.
  • Service: A Kubernetes service provides a stable endpoint for accessing a set of pods. It abstracts the underlying dynamic IP addresses of the pods and provides load balancing and service discovery capabilities.

French

  • Master Node : Le plan de contrôle du cluster Kubernetes, responsable de la gestion et de la coordination de toutes les activités au sein du cluster. Il comprend divers composants tels que le serveur API, le planificateur et le gestionnaire de contrôle.
  • Worker Nodes : Également appelés "Minions" ou "Kubelets", ces nœuds sont responsables de l'exécution des conteneurs et de l'exécution des charges de travail. Chaque nœud de travail exécute le runtime Kubernetes (par exemple, Docker) et communique avec le nœud maître pour recevoir des instructions et signaler l'état des conteneurs.
  • Pod : L'unité de base de déploiement dans Kubernetes. Un pod est un groupe logique d'un ou plusieurs conteneurs qui partagent des ressources réseau et de stockage. Les conteneurs à l'intérieur d'un pod peuvent communiquer entre eux en utilisant localhost, ce qui les rend co-localisés et étroitement couplés.
  • Service : Un service Kubernetes fournit un point de terminaison stable pour accéder à un ensemble de pods. Il abstrait les adresses IP dynamiques sous-jacentes des pods et offre des capacités d'équilibrage de charge et de découverte de services.

Kubernetes Components

Kubernetes Control Plane

English

The Control Plane as the brain of Kubernetes

Components of the Control Plane:

  • etcd: Distributed key-value store for storing cluster state
  • kube-apiserver: Exposes the Kubernetes API and handles API requests
  • kube-controller-manager: Manages various controllers for maintaining desired cluster state
  • kube-scheduler: Assigns Pods to available nodes based on resource requirements and constraints

French

Le Plan de Contrôle, en tant que cerveau de Kubernetes

Composants du Plan de Contrôle :

  • etcd : Base de donnees de clés-valeurs distribué pour stocker l'état du cluster
  • kube-apiserver : Expose l'API Kubernetes et gère les requêtes API
  • kube-controller-manager : Gère divers contrôleurs pour maintenir l'état souhaité du cluster
  • kube-scheduler : Attribue des Pods aux machines(nodes) disponibles en fonction des besoins en ressources et des contraintes

Kubernetes Nodes

English

Nodes as the worker machines in a Kubernetes cluster Components of a Node:

  • kubelet: Agent that runs on each Node and manages the Pods
  • kube-proxy: Handles network routing and load balancing for Services
  • Container runtime: Software responsible for running containers (e.g., Docker, containerd)

French

Machines de travail dans un cluster Kubernetes Composants d'un nœud :

  • kubelet : Agent qui s'exécute sur chaque nœud et gère les Pods
  • kube-proxy : Gère le routage réseau et l'équilibrage de charge pour les Services
  • Runtime de conteneurs : Logiciel responsable de l'exécution des conteneurs (par exemple, Docker, containerd)

Kubernetes Networking

English

Networking challenges in containerized environments Container-to-container communication within a Pod

Cluster networking:

  • Pod network: Network overlay for communication between Pods across nodes
  • Service network: Virtual IP addresses for load balancing and service discovery
  • Ingress: Routes external traffic to Services within the cluster

French:

Défis de mise en réseau dans les environnements conteneurisés Communication entre conteneurs au sein d'un Pod

Réseau du cluster : Réseau Pod : Superposition réseau pour la communication entre les Pods sur les différents nœuds Réseau Service : Adresses IP virtuelles pour l'équilibrage de charge et la découverte de services Ingress : Renvoie le trafic externe vers les Services à l'intérieur du cluster

Benefits of Kubernetes

English

Benefits of Kubernetes
graph LR
A[Benefits of Kubernetes]
A --> B[Scalability]
A --> C[High Availability]
A --> D[Automated Deployments]
A --> E[Load Balancing]
A --> F[Self-Healing]
A --> G[Portability]

style A fill:#f2f2f2, stroke:#333, stroke-width:2px;
style B fill:#80bfff, stroke:#333, stroke-width:2px;
style C fill:#80bfff, stroke:#333, stroke-width:2px;
style D fill:#80bfff, stroke:#333, stroke-width:2px;
style E fill:#80bfff, stroke:#333, stroke-width:2px;
style F fill:#80bfff, stroke:#333, stroke-width:2px;
style G fill:#80bfff, stroke:#333, stroke-width:2px;

  1. Scalability: Kubernetes allows applications to scale horizontally by adding or removing pods dynamically based on resource demand. It ensures that the workload is distributed evenly across the available resources, maintaining high availability and optimizing resource utilization.
  1. Service Discovery and Load Balancing: Kubernetes provides built-in mechanisms for service discovery and load balancing. Services abstract away the complexities of network configuration and enable seamless communication between microservices within the cluster.
  1. Self-healing and Auto-restart: Kubernetes monitors the health of applications and automatically restarts containers or reschedules pods if they fail or become unresponsive. This self-healing capability helps ensure that applications are highly available and resilient.
  1. Rolling Updates and Rollbacks: Kubernetes supports rolling updates, allowing you to update applications without downtime. It gradually replaces old containers with new ones, ensuring a smooth transition. In case of issues, Kubernetes facilitates easy rollbacks to the previous version.
  1. Resource Management: Kubernetes provides mechanisms for managing and allocating resources to applications, such as CPU and memory. It allows you to set resource limits and requests for individual containers, preventing resource contention and optimizing performance.
  1. Declarative Configuration: Kubernetes uses declarative configuration files (YAML or JSON) to define the desired state of the system. It continuously monitors and reconciles the actual state with the desired state, ensuring that the system remains in the desired state and automatically making any necessary adjustments.

French

Avantages de Kubernetes
graph LR
A[Avantages de Kubernetes]
A --> B[Scalabilité]
A --> C[Haute disponibilité]
A --> D[Déploiements automatisés]
A --> E[Équilibrage de charge]
A --> F[Autoguérison]
A --> G[Portabilité]

style A fill:#f2f2f2, stroke:#333, stroke-width:2px;
style B fill:#80bfff, stroke:#333, stroke-width:2px;
style C fill:#80bfff, stroke:#333, stroke-width:2px;
style D fill:#80bfff, stroke:#333, stroke-width:2px;
style E fill:#80bfff, stroke:#333, stroke-width:2px;
style F fill:#80bfff, stroke:#333, stroke-width:2px;
style G fill:#80bfff, stroke:#333, stroke-width:2px;

  1. Scalabilité : Kubernetes permet aux applications de se dimensionner horizontalement en ajoutant ou en supprimant dynamiquement des pods en fonction de la demande en ressources. Il veille à ce que la charge de travail soit répartie de manière équilibrée sur les ressources disponibles, assurant ainsi une haute disponibilité et une utilisation optimale des ressources.
  1. Découverte de services et équilibrage de charge : Kubernetes offre des mécanismes intégrés de découverte de services et d'équilibrage de charge. Les services permettent de masquer les complexités de la configuration réseau et facilitent la communication transparente entre les microservices au sein du cluster.
  1. Autoréparation et redémarrage automatique : Kubernetes surveille l'état de santé des applications et redémarre automatiquement les conteneurs ou réordonnance les pods en cas de défaillance ou d'absence de réponse. Cette capacité d'autoréparation garantit une haute disponibilité et une résilience des applications.
  1. Mises à jour progressives et réversions : Kubernetes prend en charge les mises à jour progressives, vous permettant de mettre à jour les applications sans interruption de service. Il remplace progressivement les anciens conteneurs par les nouveaux, assurant une transition fluide. En cas de problème, Kubernetes facilite les réversions vers la version précédente.
  1. Gestion des ressources : Kubernetes propose des mécanismes pour gérer et allouer les ressources aux applications, telles que le CPU et la mémoire. Il vous permet de définir des limites et des demandes de ressources pour chaque conteneur, évitant les conflits de ressources et optimisant les performances.
  1. Configuration déclarative : Kubernetes utilise des fichiers de configuration déclaratifs (YAML ou JSON) pour définir l'état souhaité du système. Il surveille en permanence et concilie l'état réel avec l'état souhaité, garantissant ainsi que le système reste dans l'état souhaité et effectuant automatiquement les ajustements nécessaires.

Core Kubernetes Concepts

Nodes and cluster

Core Kubernetes Concepts
graph LR
A[Pod]
B[ReplicaSet]
C[Deployment]
D[Service]
E[Namespace]
F[Node]
G[PersistentVolume]
H[PersistentVolumeClaim]
I[ConfigMap]
J[Secret]

style A fill:#80bfff, stroke:#333, stroke-width:2px;
style B fill:#80bfff, stroke:#333, stroke-width:2px;
style C fill:#80bfff, stroke:#333, stroke-width:2px;
style D fill:#80bfff, stroke:#333, stroke-width:2px;
style E fill:#80bfff, stroke:#333, stroke-width:2px;
style F fill:#80bfff, stroke:#333, stroke-width:2px;
style G fill:#80bfff, stroke:#333, stroke-width:2px;
style H fill:#80bfff, stroke:#333, stroke-width:2px;
style I fill:#80bfff, stroke:#333, stroke-width:2px;
style J fill:#80bfff, stroke:#333, stroke-width:2px;

A --> B
B --> C
C --> D
C --> E
D --> F
E --> G
G --> H
C --> I
C --> J

English

In Kubernetes, a node is a physical or virtual machine that runs containers. It is a worker machine responsible for executing tasks and running the actual workloads. Each node within a Kubernetes cluster has the necessary components installed, such as the container runtime (e.g., Docker), kubelet (which interacts with the API server), and kube-proxy (for networking).

cluster is a group of nodes that work together to form a Kubernetes environment. Clusters enable high availability, load balancing, and scalability. They consist of a master node, which controls the cluster, and multiple worker nodes that host the containers.

French

Dans Kubernetes, un nœud est une machine physique ou virtuelle qui exécute des conteneurs. C'est une machine de travail chargée d'exécuter des tâches et d'exécuter les charges de travail réelles. Chaque nœud au sein d'un cluster Kubernetes dispose des composants nécessaires installés, tels que le runtime de conteneurs (par exemple, Docker), le kubelet (qui interagit avec le serveur API) et le kube-proxy (pour la mise en réseau).

Un cluster est un groupe de nœuds qui travaillent ensemble pour former un environnement Kubernetes. Les clusters permettent une haute disponibilité, l'équilibrage de charge et la scalabilité. Ils se composent d'un nœud maître, qui contrôle le cluster, et de plusieurs nœuds de travail qui hébergent les conteneurs.

Pods and Containers

English

A pod is the smallest deployable unit in Kubernetes. It represents a logical group of one or more containers that share the same network namespace, IP address, and storage resources. Containers within a pod are co-located and co-scheduled, allowing them to communicate with each other using localhost. Pods provide an isolated execution environment for applications, and they can be easily replicated and scaled. Containers, on the other hand, are lightweight, standalone executable packages that encapsulate application code, dependencies, and runtime environments. Containers are created from container images, which are read-only templates that contain everything needed to run an application. Kubernetes uses container runtimes (such as Docker) to start and manage containers within pods.

French

Un pod est l'unité de déploiement la plus petite dans Kubernetes. Il représente un groupe logique d'un ou plusieurs conteneurs qui partagent le même espace de réseau, la même adresse IP et les mêmes ressources de stockage. Les conteneurs à l'intérieur d'un pod sont co-localisés et co-planifiés, ce qui leur permet de communiquer entre eux en utilisant localhost. Les pods fournissent un environnement d'exécution isolé pour les applications et peuvent être facilement répliqués et mis à l'échelle. Les conteneurs, en revanche, sont des packages exécutables autonomes et légers qui encapsulent le code de l'application, les dépendances et les environnements d'exécution. Les conteneurs sont créés à partir d'images de conteneurs, qui sont des modèles en lecture seule contenant tout ce qui est nécessaire pour exécuter une application. Kubernetes utilise des runtimes de conteneurs (comme Docker) pour démarrer et gérer les conteneurs à l'intérieur des pods.

Deployments

English

Deployments are Kubernetes resources that enable the declarative management of pods and their associated replica sets. A deployment defines the desired state of the application, including the number of replicas (copies) of the pod that should be running.

French

Les déploiements sont des ressources Kubernetes qui permettent la gestion déclarative des pods et de leurs ensembles de réplicas associés. Un déploiement définit l'état souhaité de l'application, y compris le nombre de réplicas (copies) du pod qui doivent être en cours d'exécution.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Replicat set

English

Replica Sets ensure that the desired number of pod replicas is always maintained. They are responsible for creating and scaling pods based on the defined deployment configuration. Replica Sets monitor the health of pods and can automatically replace failed or terminated pods to maintain the desired state.

Deployments and Replica Sets provide important capabilities for managing application deployments, allowing for rolling updates, rollbacks, and scaling operations. They ensure high availability, fault tolerance, and easy management of application lifecycles.

French

Les Replica Sets garantissent que le nombre souhaité de répliques de pods est toujours maintenu. Ils sont responsables de la création et de la mise à l'échelle des pods en fonction de la configuration de déploiement définie. Les Replica Sets surveillent l'état de santé des pods et peuvent remplacer automatiquement les pods défaillants ou terminés pour maintenir l'état souhaité.

Les déploiements et les Replica Sets offrent des fonctionnalités importantes pour la gestion des déploiements d'applications, permettant des mises à jour progressives, des réversions et des opérations de mise à l'échelle. Ils garantissent une haute disponibilité, une tolérance aux pannes et une gestion facile des cycles de vie des applications.

sample replicat set

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

Services

English

Services in Kubernetes provide a stable endpoint for accessing a set of pods. They enable service discovery and load balancing, allowing clients to access the application without needing to know the exact IP addresses or ports of individual pods.

French

Les services dans Kubernetes fournissent un point de terminaison stable pour accéder à un ensemble de pods. Ils permettent la découverte de services et l'équilibrage de charge, permettant aux clients d'accéder à l'application sans avoir besoin de connaître les adresses IP ou les ports exacts des pods individuels.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

Load Balancing

English

Load balancing ensures that client requests are distributed evenly across the available pods, improving the performance and availability of the application. It enables horizontal scaling of the application and seamless handling of traffic spikes.

Kubernetes offers different types of services, including ClusterIP, NodePort, and LoadBalancer. ClusterIP services provide internal network access within the cluster, while NodePort services expose the application on a static port on each node. LoadBalancer services are typically used in cloud environments to expose the application externally and automatically provision a load balancer.

French

L'équilibrage de charge garantit que les demandes des clients sont réparties de manière équitable entre les pods disponibles, améliorant ainsi les performances et la disponibilité de l'application. Il permet le dimensionnement horizontal de l'application et la gestion transparente des pics de trafic.

Kubernetes propose différents types de services, notamment ClusterIP, NodePort et LoadBalancer. Les services ClusterIP permettent un accès réseau interne au sein du cluster, tandis que les services NodePort exposent l'application sur un port statique sur chaque nœud. Les services LoadBalancer sont généralement utilisés dans les environnements cloud pour exposer l'application de manière externe et provisionner automatiquement un équilibrage de charge.

Ingress

English

Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.

French

Ingress expose les routes HTTP et HTTPS depuis l'extérieur du cluster vers les services à l'intérieur du cluster. La circulation est contrôlée par des règles définies sur la ressource Ingress.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

DEMO

Docker + Minikube
graph LR
A[Docker]
B[Image]
C[Container]
D[Minikube]
E[Virtual Machine]
F[Kubernetes Cluster]

style A fill:#80bfff, stroke:#333, stroke-width:2px;
style B fill:#80bfff, stroke:#333, stroke-width:2px;
style C fill:#80bfff, stroke:#333, stroke-width:2px;
style D fill:#80bfff, stroke:#333, stroke-width:2px;
style E fill:#80bfff, stroke:#333, stroke-width:2px;
style F fill:#80bfff, stroke:#333, stroke-width:2px;

A --> B
B --> C
D --> E
E --> F

Prerequite

1-Install-docker

2-Install minikube (For Mac OS only)

# install minikue
brew install minikube

# set docker as engine
minikube config set driver docker

# start minikube
minikube start --driver=docker

#+begin_example ==> Fetching minikube ==> Downloading https://ghcr.io/v2/homebrew/core/minikube/manifests/1.30.1 Already downloaded: /Users/chiefkemist/Library/Caches/Homebrew/downloads/81c9fce44a16655222dac1d280fb070da9f2d2f29e41bd8e8c6e06ee412ff62b--minikube-1.30.1.bottle_manifest.json ==> Downloading https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:d74c3581ec6420d173393cdffe19dd104cf65c49f6cf7a8b6161aa165d4f2085 Already downloaded: /Users/chiefkemist/Library/Caches/Homebrew/downloads/aaec261695ad4b0bfc49551f3637dd82dc32049ced3704ce747bda73becb65af--minikube--1.30.1.arm64_ventura.bottle.tar.gz ==> Pouring minikube--1.30.1.arm64_ventura.bottle.tar.gz

Join us on Discord

The Ubuntu TechHive on Discord

COME HANGOUT!
Join us on Discord