为容器定义命令和参数
本页面展示了如何在 Pod 中运行容器时定义命令和参数。
准备工作
你需要一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用这些 Kubernetes 试验平台之一。
要检查版本,请输入 kubectl version。
创建 Pod 时定义命令和参数
创建 Pod 时,你可以为在 Pod 中运行的容器定义命令和参数。要定义命令,请在配置文件中包含 command 字段。要为命令定义参数,请在配置文件中包含 args 字段。定义的命令和参数在 Pod 创建后无法更改。
你在配置文件中定义的命令和参数会覆盖容器镜像提供的默认命令和参数。如果你定义了 args,但没有定义 command,则默认命令将与你的新参数一起使用。
注意
command 字段对应于某些容器运行时的 ENTRYPOINT,而 args 字段对应于 CMD。在此练习中,你将创建一个运行一个容器的 Pod。Pod 的配置文件定义了一个命令和两个参数。
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
根据 YAML 配置文件创建 Pod
kubectl apply -f https://k8s.io/examples/pods/commands.yaml列出正在运行的 Pod
kubectl get pods输出显示在 command-demo Pod 中运行的容器已完成。
要查看在容器中运行的命令的输出,请查看 Pod 的日志
kubectl logs command-demo输出显示了 HOSTNAME 和 KUBERNETES_PORT 环境变量的值
command-demo tcp://10.3.240.1:443
使用环境变量定义参数
在前面的示例中,你通过直接提供字符串来定义参数。作为直接提供字符串的替代方案,你可以使用环境变量来定义参数
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
这意味着你可以使用任何可用于定义环境变量的技术来为 Pod 定义参数,包括 ConfigMaps 和 Secrets。
注意
环境变量显示在括号中,"$(VAR)"。这是在 command 或 args 字段中展开变量所必需的。在 shell 中运行命令
在某些情况下,你需要你的命令在 shell 中运行。例如,你的命令可能由几个管道连接的命令组成,或者它可能是一个 shell 脚本。要在 shell 中运行你的命令,请这样包装它
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
下一步
- 了解更多关于配置 Pod 和容器的信息。
- 了解更多关于在容器中运行命令的信息。
- 参阅容器。
上次修改时间:2024 年 4 月 17 日,太平洋标准时间晚上 8:20:更新 define-command-argument-container.md (631e9a23e4)