Maison  >  Article  >  interface Web  >  CKA Journée complète de cours Multi Container Pod Kubernetes - Sidecar vs Init Container

CKA Journée complète de cours Multi Container Pod Kubernetes - Sidecar vs Init Container

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 01:17:28536parcourir

CKA Full Course Day Multi Container Pod Kubernetes - Sidecar vs Init Container

Un mot de ma part

Dans ce projet, je voulais appliquer les concepts de Kubernetes tels que les conteneurs d'initialisation et les conteneurs side-car, mais je ne voulais pas simplement suivre un tutoriel.

Mon objectif était de construire quelque chose de mémorable.

Après quelques réflexions, je vous présente la Get Me App !


Que fait l'application Get Me

L'Get Me App est conçue pour récupérer et afficher dynamiquement le contenu de divers référentiels GitHub. L'application s'exécute dans un pod Kubernetes et comprend deux composants principaux :

  1. Conteneur Nginx : il sert d'application principale, hébergeant le contenu récupéré dynamiquement. Il est léger et efficace, ce qui le rend idéal pour diffuser des pages Web statiques.

  2. Conteneur Sidecar : il s'exécute parallèlement au conteneur nginx principal. Il est chargé d'actualiser le contenu toutes les 5 secondes en récupérant le dernier code HTML à partir d'une page GitHub sélectionnée au hasard. Cela garantit que le contenu servi par Nginx est toujours à jour.

  3. Init Container : Ceci initialise l'environnement avant le démarrage des conteneurs principaux. Il vérifie la disponibilité du service Get Me App en résolvant son entrée DNS. Cette étape garantit que l'application est prête à interagir avec le service une fois son exécution démarrée. Lire la suite ici (je devais)

Le conteneur nginx sert ensuite la page Web HTML mise à jour, la rendant accessible via un navigateur via un service NodePort.


Conditions préalables

Avant de commencer, assurez-vous de disposer d'un fichier de configuration pour créer le cluster Kubernetes. Reportez-vous au guide de démarrage rapide Kind pour obtenir des instructions détaillées sur la configuration de votre cluster Kind.

Configuration du cluster (config.yml)

Créez un fichier nommé config.yml avec le contenu suivant pour définir votre cluster Kind :

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cka-cluster  
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30001  # Change this to match the NodePort
    hostPort: 30001
    listenAddress: "0.0.0.0" 
    protocol: tcp
- role: worker  
- role: worker 

Exécutez la commande suivante pour créer le cluster :

kind create cluster --name kind-cka-cluster --config config.yml

Utilisez la commande suivante pour définir le contexte du nouveau cluster :

kubectl config use-context kind-kind-cka-cluster

Étape 1 : Créer le répertoire et le fichier du projet

Tout d'abord, configurez la structure des répertoires et des fichiers du projet.

mkdir get-me-app
cd get-me-app
nano get-me-app.yml

Étape 2 : Définir la spécification du pod Kubernetes

Dans le fichier get-me-app.yml, nous définirons un pod Kubernetes qui inclut le conteneur nginx, un conteneur side-car pour l'actualisation du contenu et un conteneur init pour la récupération initiale des données.

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cka-cluster  
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30001  # Change this to match the NodePort
    hostPort: 30001
    listenAddress: "0.0.0.0" 
    protocol: tcp
- role: worker  
- role: worker 

Ce que fait chaque partie de cette spécification de pod

  1. conteneur nginx : il s'agit du conteneur principal, servant du contenu sur le port 80. Le volumeMount rend le répertoire /usr/share/nginx/html disponible dans le volume workdir du pod.

  2. Conteneur side-car (content-refresher) : ce conteneur exécute une boucle while true, téléchargeant la dernière version de la page Web toutes les 5 secondes. Cela garantit que le contenu du volume workdir reste à jour.

  3. Conteneur d'initialisation (init-myservice) : ceci attend que le service get-me-app-devienne disponible en effectuant en permanence une recherche DNS. Il ne s'exécute qu'une seule fois lors de l'initialisation et ne redémarre pas une fois terminé.

  4. Volumes : le volume workdir (un type emptyDir) est partagé entre les conteneurs, permettant au conteneur d'initialisation, au side-car et à nginx d'accéder et de servir le même contenu.


Étape 3 : tester localement avec NodePort (facultatif)

Pour rendre l'application accessible via un navigateur sur votre ordinateur local, configurez un service NodePort pour exposer le port 80 du pod.

Ajoutez cette définition de service dans get-me-app-service.yml :

kind create cluster --name kind-cka-cluster --config config.yml

Déployez la configuration avec :

kubectl config use-context kind-kind-cka-cluster

Accédez-y en visitant http://localhost:30001 dans votre navigateur, et vous devriez accéder à la page github. Actualisez la page après 5 secondes et vous devriez voir une autre page github.


Points clés à retenir

Ce projet m'a aidé à comprendre comment les conteneurs d'initialisation peuvent initialiser des ressources partagées et comment les conteneurs side-car maintiennent ces ressources à jour pour l'application principale. C'est une manière intéressante d'expérimenter et d'en apprendre davantage sur la gestion des données en temps réel dans Kubernetes.


Voici le contenu formaté de la section que vous avez fournie :


Balises et mentions

  • @piyushsachdeva
  • Jour 8 : Tutoriel vidéo

Notes de fin : N'oubliez pas que ce projet ne fait pas partie des didacticiels vidéo. Je voulais construire quelque chose par moi-même en utilisant les concepts du tutoriel comme guide général.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn