Comment changer rapidement de contexte Kubernetes avec Kubectx et Kubens
Agence web » Actualités du digital » Comment exécuter des commandes dans des conteneurs de pod Kubernetes

Comment exécuter des commandes dans des conteneurs de pod Kubernetes

Les applications exécutées dans Kubernetes sont normalement des services de longue durée avec lesquels vous n’avez pas besoin d’interagir. Parfois, vous voudrez peut-être exécuter manuellement une commande à l’intérieur d’un conteneur, peut-être pour une opération de maintenance ponctuelle ou pour assister une procédure de débogage.

Dans cet article, nous montrerons comment exécuter des commandes et obtenir des sessions shell interactives dans des conteneurs Kubernetes. Cela vous permettra de démarrer des processus dans le conteneur à l’aide de votre terminal local. Il est entièrement intégré à Kubernetes et à sa CLI Kubectl, vous n’avez donc pas à polluer vos images de conteneur avec un démon SSH pour permettre l’accès à distance.

Utilisation de Kubectl Exec

kubectl exec exécute une commande dans un conteneur en cours d’exécution. Il a la syntaxe de base suivante :

$ kubectl exec demo-pod -- demo-command

Cela fonctionnera demo-command à l’intérieur du premier récipient du demo-pod Cosse. La commande est exécutée avec les privilèges root.

Des indicateurs supplémentaires sont nécessaires pour configurer une session de terminal interactif :

  • --stdin (-i) – Passez le flux d’entrée standard de votre terminal dans le conteneur.
  • --tty (-t) – Marquez le flux d’entrée standard comme TTY, ce qui le rend interactif.

Voici un exemple d’obtention d’un shell dans le premier conteneur d’un pod :

$ kubectl exec -it demo-pod -- /bin/sh

Tout après le -- fait partie de la commande exécutée à l’intérieur du conteneur. kubectl exec ignore le point d’entrée par défaut du conteneur et lance à la place un nouveau processus avec la commande que vous spécifiez. Vous ne devez pas entourer la commande de guillemets ("/bin/sh") à moins que vous ne les utilisiez normalement lors de l’exécution de la commande localement.

Choisir un autre contenant

kubectl exec se connecte au conteneur par défaut du pod lorsqu’aucun autre argument n’est fourni. Le conteneur par défaut est celui avec le kubectl.kubernetes.io/default-container annotation. Ce sera le premier conteneur du pod si vous n’avez ajouté manuellement l’annotation à aucun autre.

Voici un pod qui exécute deux conteneurs :

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: app-container
      image: nginx:latest
    - name: sidecar-container
      image: busybox:latest

Vous pouvez exécuter une commande à l’intérieur du sidecar-container en ajoutant le -c signaler à kubectl exec:

$ kubectl exec --it demo-pod -c sidecar-container -- /bin/sh

En attente de l’exécution des pods

Kubectl attendra une minute que le Pod soit Running si ses conteneurs n’ont pas déjà démarré lorsque vous exécutez le exec commande. Cette valeur de temporisation peut être modifiée avec le --pod-running-timeout drapeau. C’est utile lorsque vous souhaitez exécuter une commande juste après la création d’un nouveau pod, alors qu’il n’a peut-être pas été planifié sur un nœud.

$ kubectl exec --pod-running-timeout=5m demo-pod -- demo-command

Quand dois-je l’utiliser ?

kubectl exec est mieux réservé aux situations spécialisées où vous devez interagir directement avec le système de fichiers d’un conteneur. Vous pouvez l’utiliser pour accéder aux journaux ou aux caches après un problème ou pour exécuter un script de maintenance peu utilisé fourni dans une image de conteneur.

Bien que kubectl exec vous permet d’exécuter n’importe quelle commande, vous devez éviter de modifier radicalement l’environnement du conteneur. Cela pourrait faire dériver le conteneur de l’état attendu. Les conteneurs ne devraient normalement pas nécessiter d’intervention, donc l’utilisation de kubectl exec à l’intérieur des environnements de production signale généralement que quelque chose ne va pas.

N’utilisez pas cette commande pour installer des packages ou appliquer des mises à jour à l’intérieur du conteneur. Ce type d’opération doit être géré en créant une nouvelle image de conteneur qui inclut les modifications, puis en remplaçant vos pods Kubernetes par ceux qui exécutent la version révisée. Le respect de ce principe garantit que vos modifications ne seront pas perdues lorsque le pod redémarre et revient au système de fichiers de son image de conteneur. Garder vos conteneurs immuables garantit également qu’ils peuvent être reproduits de manière fiable à partir de leurs images, ce qui améliore la fiabilité et la facilité de débogage.

Sommaire

L’exécution d’une commande unique dans un conteneur Kubernetes vous permet de déboguer les problèmes, d’effectuer des tâches de maintenance et d’inspecter le système de fichiers du conteneur. Dans chacune de ces situations, vous pouvez utiliser kubectl exec pour obtenir une connexion à un conteneur.

Ajout de la -it La combinaison d’indicateurs transmettra le flux d’entrée standard de votre terminal en tant que TTY, fournissant une session shell interactive. Cela ne sera pas toujours nécessaire en fonction de la commande que vous souhaitez utiliser : si elle ne produit qu’une sortie, sans nécessiter d’entrée, vous pouvez omettre les drapeaux en toute sécurité.

★★★★★