×

您可以使用 CLI 在 OpenShift Container Platform 容器中执行远程命令。

在容器中执行远程命令

CLI 内置对远程容器命令执行的支持。

步骤

要在容器中运行命令

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

例如

$ oc exec mypod date
示例输出
Thu Apr  9 02:21:53 UTC 2015

出于安全考虑,当访问特权容器时,oc exec 命令不起作用,除非该命令由 cluster-admin 用户执行。

从客户端启动远程命令的协议

客户端通过向 Kubernetes API 服务器发出请求来启动在容器中执行远程命令。

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

在上方的 URL 中

  • <node_name> 是节点的 FQDN。

  • <namespace> 是目标 Pod 的项目。

  • <pod> 是目标 Pod 的名称。

  • <container> 是目标容器的名称。

  • <command> 是要执行的所需命令。

例如

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

此外,客户端可以向请求添加参数以指示是否

  • 客户端应向远程容器的命令发送输入 (stdin)。

  • 客户端的终端是 TTY。

  • 远程容器的命令应将 stdout 的输出发送到客户端。

  • 远程容器的命令应将 stderr 的输出发送到客户端。

向 API 服务器发送 exec 请求后,客户端会将连接升级到支持多路复用流的连接;当前实现使用 **HTTP/2**。

客户端为 stdin、stdout 和 stderr 各创建一个流。为了区分这些流,客户端将流上的 streamType 标头设置为 stdinstdoutstderr 之一。

客户端在完成远程命令执行请求后,会关闭所有流、升级的连接和底层连接。