Démystifier Kubernetes

désacraliser Kubernetes

 

Kubernetes est un système open-source à l’échelle de la production pour automatiser le déploiement, l’expansion et la gestion des applications conteneurisées. Cet article présente la gestion des conteneurs à l’aide de Kubernetes. « Conteneurs » est devenu l’un des derniers mots. Mais que signifie le mot? Généralement associés à Docker, les conteneurs sont définis comme des unités logicielles standardisées. Un conteneur contient un programme et l’environnement requis pour exécuter le programme dans une seule unité facilement transférable.

Les conteneurs sont des unités logicielles standard qui contiennent du code et toutes ses dépendances, de sorte que les applications peuvent migrer rapidement et en toute sécurité d’un environnement informatique à un autre. Le conteneur fait cela en créant une image appelée ISO. L’image du conteneur est un package exécutable autonome léger qui contient tout le nécessaire pour exécuter le code d’application, le runtime, les outils système, les bibliothèques système et les paramètres.

L’image de conteneur devient un conteneur lors de l’exécution et pour les conteneurs Docker, l’image devient un conteneur lorsqu’elle est exécutée sur un conteneur. Les conteneurs isolent le logiciel de l’environnement et garantissent son fonctionnement uniforme, quelles que soient les modifications apportées aux instances dans l’environnement.

Comment faire la gestion des conteneurs ?

La gestion des conteneurs est le processus d’organisation, d’ajout ou de remplacement d’un grand nombre de conteneurs logiciels. La gestion des conteneurs utilise un logiciel pour automatiser le processus de création, de déploiement et d’extension des conteneurs. Cela a conduit au besoin d’orchestration de conteneurs, un outil qui automatise le déploiement, la gestion, la mise à l’échelle, la mise en réseau et la disponibilité des applications basées sur des conteneurs.

Kubernetes est une plate-forme portable, extensible et open source pour la gestion des charges de travail et des services, et aide à la configuration et à l’automatisation. Il a été initialement développé par Google. Son écosystème est vaste et en croissance rapide. Les services, l’assistance et les outils de Kubernetes sont largement disponibles.

Google a publié le code source du projet Kubernetes en 2014. Kubernetes s’appuie sur 10 ans et demi d’expérience de Google en charge de production de masse et combine les meilleures idées et pratiques de la communauté avec l’utilisation de la syntaxe.

Voici quelques termes courants liés à l’écosystème Kubernetes. Pods: un pod est le thread de base d’une application Kubernetes. Il s’agit de l’unité la plus petite et la plus simple du modèle d’objet Kubernetes que vous créez ou déployez. Le volet représente les processus en cours d’exécution sur le cluster Kubernetes.

Un module contient des conteneurs en cours d’exécution, du stockage, des réseaux IP (uniques) et des commandes qui gèrent les opérations de conteneur. Il représente une seule unité de déploiement dans l’écosystème Kubernetes, est une instance unique d’une application et peut être composé d’un ou de plusieurs conteneurs fonctionnant étroitement et de ressources partagées.

Les gousses de troupeau Kubernetes peuvent être utilisées de deux manières principales. Le premier est un pod qui exécute un seul conteneur. Le modèle «un par module» est le cas d’utilisation le plus courant pour Kubernetes. La deuxième méthode consiste à exécuter des modules de plusieurs conteneurs qui doivent fonctionner ensemble.

Les pods peuvent contenir une application composée de plusieurs conteneurs de regroupement étroitement combinés et devant partager des ressources.

Réplique: le but de ReplicaSet est de maintenir un ensemble cohérent de modules de sauvegarde qui sont toujours en cours d’exécution. ReplicaSet contient des informations sur le nombre de répliques d’un conteneur particulier à exécuter. Pour créer plusieurs pods répondant aux conditions de ReplicaSet, Kubernetes utilise un modèle de pod. Le lien que ReplicaSet a dans sa boîte de réception passera par le champ metadata.ownerReferences, qui spécifie à quelle source appartient l’objet actuel.

Service: un service est une abstraction utilisée pour exposer les fonctionnalités d’un groupe de pods. Avec Kubernetes, vous n’avez pas besoin de modifier votre application pour utiliser des mécanismes de détection de service inconnus. Kubernetes fournit un ensemble d’adresses IP du pod et un nom DNS unique pour le pod, et peut charger les pods restants.

Le principal problème à résoudre par les services est l’intégration frontale des applications Web. Étant donné que Kubernetes fournit une adresse IP pour le pod en arrière-plan, lorsque le pod est supprimé et réactivé, l’adresse IP sera modifiée. Cela crée un problème majeur sur la face avant qui associe une adresse IP donnée à une adresse IP frontale correspondante. Ces services résolvent ce problème en fournissant des abstractions sur des leggings similaires aux équilibreurs de charge.

Quantités: Un certain nombre de Kubernetes ont une durée de vie claire, la même que les capsules qui le ferment. Par conséquent, le volume dépasse tout conteneur circulant à l’intérieur du module, et les données sont stockées à nouveau dans le conteneur. Bien sûr, lorsque le pod n’existe pas, ce volume n’existera pas non plus. Peut-être plus important encore, Kubernetes prend en charge plusieurs types de volumes, et un module peut utiliser n’importe quel nombre de volumes à la fois.

Fondamentalement, un volume n’est qu’un répertoire, qui peut contenir des données, et le conteneur du conteneur peut accéder au répertoire. La composition d’un réalisateur, les médias qui le soutiennent et son contenu dépendent du type de volume utilisé.

Pourquoi Kubernetes?

Les conteneurs sont un excellent moyen de créer et d’exécuter des applications. Dans un environnement de production, vous devez gérer les conteneurs exécutant vos applications et vous assurer qu’il n’y a pas de temps d’arrêt. Par exemple, si un conteneur tombe, l’autre doit être démarré. Ne serait-il pas formidable qu’il puisse être automatisé via le système? C’est là que Kubernetes vient à la rescousse! Il fournit un cadre pour exécuter un système de distribution régulier. Prend en charge les exigences étendues, les échecs, les modèles de déploiement, etc. Par exemple, Kubernetes peut facilement gérer le déploiement Canary du système.

Kubernetes offre aux utilisateurs:

1. Découverte de services et équilibrage de charge

2. Orchestration du stockage

3. Rouleaux d’automatisation et de support

4. Conteneur d’emballage automatique

5. Auto-guérison

6. Gestion et configuration confidentielles

Que peut faire Kubernetes?

Dans cette section, nous examinerons quelques exemples de code qui montrent comment utiliser Kubernetes lors de la création d’une application Web à partir de zéro. Nous utiliserons Flask en Python pour créer un simple serveur maître. Pour ceux qui souhaitent créer une application Web à partir de zéro, il existe des conditions préalables. Ce sont:
1. Compréhension de base des conteneurs Docker, des images Docker et Docker. Une actualisation rapide peut être trouvée sur https://www.docker.com/sites/default/files/Docker_CheatSheet_08.09.2016_0.pdf. 2. Docker doit être installé sur le système. 3. Kubernetes doit être installé sur le système. Vous trouverez des instructions sur la façon de procéder sur votre ordinateur local à l’adresse: https://kubernetes.io/docs/setup/learning-environment/minikube/. Créez maintenant un répertoire simple, comme indiqué dans l’extrait de code suivant:

mkdir flask-kubernetes/app && cd flask-kubernetes/app

Ensuite, dans ballon-kubernetes / app, créez un fichier nommé main.py, comme indiqué dans l’extrait de code suivant:

touch main.py

Dans le main.py nouvellement créé, collez le code suivant:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello from Kubernetes!"

if __name__ == "__main__":
app.run(host='0.0.0.0')

Installez Flask dans votre maison en utilisant la commande suivante

pip install Flask==0.10.1

Après avoir installé Flask, exécutez la commande suivante:

python app.py

Cela devrait exécuter le serveur Flask localement sur le port 5000 de l’application Flask par défaut, et vous pouvez voir « Bonjour de Kubernetes! ». http: // localhost: 5000. Une fois le serveur exécuté localement, nous créerons une image Docker pour Kubernetes. Créez un fichier nommé Dockerfile et collez-y l’extrait de code suivant:

FROM python:3.7

RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt

EXPOSE 5000
CMD ("python", "/app/main.py")

Les instructions sur le Dockerfile sont les suivantes: 1. Docker restaurera l’image Python 3.7 à partir de l’éditeur Docker. 2. Il créera un répertoire d’images d’application. 3. Il déploiera une application, comme un répertoire de travail. 4. Copiez le contenu du répertoire d’application sur l’hôte dans le répertoire d’application d’image. 5. Le port 5000 est exposé. 6. Enfin, il exécutera la commande pour démarrer le serveur Flask. Dans l’étape suivante, nous utiliserons la commande suivante pour créer une image Docker:

docker build -f Dockerfile -t flask-kubernetes:latest .

Après avoir créé l’image Docker, nous pouvons exécuter l’image localement pour la tester avec la commande suivante:

docker run -p 5001:5000 flask-kubernetes

Après avoir terminé l’opération de répétition locale en exécutant le conteneur, nous devons le placer dans Kubernetes. Nous allons d’abord vérifier que Kubernetes est utilisé avec les commandes kubectl. S’il n’y a pas d’erreurs, elles peuvent être utilisées. S’il y a des erreurs, veuillez vous référer à https://kubernetes.io/docs/setup/learning-environment/minikube/. Ensuite, créez un fichier de dépôt. Il s’agit d’un fichier Yaml avec des instructions sur la façon dont Kubernetes crée des pods et des services de manière déclarative. Étant donné que nous possédons l’application Web Flask, nous allons créer un fichier deployment.yaml en utilisant la revendication de pod et les services qu’elle contient. Créez un fichier nommé deployment.yaml et ajoutez les éléments suivants avant d’enregistrer:

apiVersion: v1
kind: Service
metadata:
name: flask-kubernetes -service
spec:
selector:
app: flask-kubernetes
ports:
- protocol: "TCP"
port: 6000
targetPort: 5000
type: LoadBalancer


---
apiVersion: apps/v1
kind: Deployment
metadata:
name: flask-kubernetes
spec:
replicas: 4
template:
metadata:
labels:
app: flask-kubernetes
spec:
containers:
- name: flask-kubernetes
image: flask-kubernetes:latest
imagePullPolicy: Never
ports:
- containerPort: 5000

Envoyez Kumbectl pour exécuter Kubernetes en exécutant la commande suivante:

kubectl apply -f deployment.yaml

Si vous exécutez la commande suivante, vous pouvez voir que le pod fonctionne correctement:

kubectl get pods

Naviguez maintenant vers http: // localhost: 6000 et vous devriez voir le message « Hub de Kubernetes! ». Voilà! L’application fonctionne maintenant sur Kubernetes! Ce que Kubernetes ne peut pas faire

KUbernetes n’est pas un système PaaS (Platform as a Service) traditionnel et complet. Étant donné que Kubernetes s’exécute au niveau du conteneur plutôt qu’au niveau du matériel, il fournit certaines fonctionnalités généralement applicables aux produits PaaS, telles que le déploiement, la mise à l’échelle, l’équilibrage de charge, la journalisation et la surveillance. . Kubernetes fournit les éléments constitutifs d’une plate-forme de développement, mais conserve le choix et la flexibilité de l’utilisateur (le cas échéant).

  • Kubernetes ne limite pas les types d’applications prises en charge. Si l’application peut s’exécuter dans un conteneur, elle doit s’exécuter sur Kubernetes. Il ne configure pas et ne génère pas de code source. Il n’indique pas de solutions de journalisation, de surveillance ou d’avertissement. Il ne fournit ni n’impose l’utilisation d’un langage / système de configuration. Il fournit une API déclarative que tout le monde peut utiliser. Il ne fournit ni n’approuve aucun système complet de configuration, de maintenance, de gestion ou d’auto-réparation des machines.

 

Laisser un commentaire