6.7. Exécuter des commandes à distance dans un conteneur OpenShift Container Platform

Vous pouvez utiliser le CLI pour exécuter des commandes à distance dans un conteneur OpenShift Container Platform.

6.7.1. Exécuter des commandes à distance dans des conteneurs

La prise en charge de l'exécution à distance des commandes de conteneurs est intégrée à la CLI.

Procédure

Pour exécuter une commande dans un conteneur :

$ oc exec <pod> [-c <container>] <command> [<arg_1> ... <arg_n>]

Par exemple :

$ oc exec mypod date

Exemple de sortie

Thu Apr  9 02:21:53 UTC 2015

Important

Pour des raisons de sécurité, la commande oc exec ne fonctionne pas lors de l'accès à des conteneurs privilégiés, sauf si la commande est exécutée par un utilisateur cluster-admin.

6.7.2. Protocole pour initier une commande à distance à partir d'un client

Les clients lancent l'exécution d'une commande à distance dans un conteneur en envoyant une demande au serveur API de Kubernetes :

/proxy/nodes/<node_name>/exec/<namespace>/<pod>/<container>?command=<command>

Dans l'URL ci-dessus :

  • <node_name> est le FQDN du nœud.
  • <namespace> est le projet du pod cible.
  • <pod> est le nom du module cible.
  • <container> est le nom du conteneur cible.
  • <command> est la commande à exécuter.

Par exemple :

/proxy/nodes/node123.openshift.com/exec/myns/mypod/mycontainer?command=date

En outre, le client peut ajouter des paramètres à la demande pour indiquer si :

  • le client doit envoyer des données à la commande du conteneur distant (stdin).
  • le terminal du client est un ATS.
  • la commande du conteneur distant doit envoyer la sortie de stdout au client.
  • la commande du conteneur distant doit envoyer la sortie de stderr au client.

Après avoir envoyé une demande exec au serveur API, le client met à niveau la connexion pour qu'elle prenne en charge les flux multiplexés ; la mise en œuvre actuelle utilise HTTP/2.

Le client crée un flux pour stdin, stdout et stderr. Pour distinguer les flux, le client définit l'en-tête streamType du flux sur l'une des valeurs suivantes : stdin, stdout ou stderr.

Le client ferme tous les flux, la connexion améliorée et la connexion sous-jacente lorsqu'il a terminé la demande d'exécution de la commande à distance.