7.7. Exécution de commandes distantes dans un conteneur dédié OpenShift
Le CLI permet d’exécuter des commandes distantes dans un conteneur dédié OpenShift.
7.7.1. Exécution de commandes distantes dans des conteneurs Copier lienLien copié sur presse-papiers!
La prise en charge de l’exécution de la commande de conteneur à distance est intégrée dans le CLI.
Procédure
Exécuter une commande dans un conteneur:
oc exec <pod> [-c <container>] -- <command> [<arg_1> ... <arg_n>]
$ oc exec <pod> [-c <container>] -- <command> [<arg_1> ... <arg_n>]
À titre d’exemple:
oc exec mypod date
$ oc exec mypod date
Exemple de sortie
Thu Apr 9 02:21:53 UTC 2015
Thu Apr 9 02:21:53 UTC 2015
À des fins de sécurité, la commande oc exec ne fonctionne pas lors de l’accès aux conteneurs privilégiés, sauf lorsque la commande est exécutée par un utilisateur cluster-admin.
7.7.2. Lancement d’une commande distante à partir d’un client Copier lienLien copié sur presse-papiers!
Les clients initient l’exécution d’une commande distante dans un conteneur en envoyant une demande au serveur API Kubernetes:
/proxy/nodes/<node_name>/exec/<namespace>/<pod>/<container>?command=<command>
/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 pod cible.
- <container> est le nom du conteneur cible.
- <command> est la commande souhaitée à exécuter.
À titre d’exemple:
/proxy/nodes/node123.openshift.com/exec/myns/mypod/mycontainer?command=date
/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 une entrée à la commande du conteneur distant (stdin).
- le terminal du client est un TTY.
- 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 requête exec au serveur API, le client met à niveau la connexion vers celui qui prend en charge les flux multiplexés; l’implémentation actuelle utilise HTTP/2.
Le client crée un flux chacun pour stdin, stdout et stderr. Afin de distinguer entre les flux, le client définit l’en-tête streamType sur le flux sur l’un de stdin, stdout ou stderr.
Le client ferme tous les flux, la connexion mise à niveau et la connexion sous-jacente lorsqu’elle est terminée avec la demande d’exécution de commande à distance.