为容器定义命令和参数
本页面展示了如何在 Pod 中运行容器时定义命令和参数。
准备开始
你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具与你的集群进行通信。建议在至少有两个非控制平面主机的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用这些 Kubernetes 游乐场之一
要检查版本,请输入kubectl version
。创建 Pod 时定义命令和参数
创建 Pod 时,可以为在 Pod 中运行的容器定义命令和参数。要定义命令,请在配置文件中包含 command
字段。要定义命令的参数,请在配置文件中包含 args
字段。定义命令和参数后,Pod 创建后将无法更改。
你在配置文件中定义的命令和参数会覆盖容器镜像提供的默认命令和参数。如果你定义了 args,但没有定义命令,则将使用你的新参数执行默认命令。
注意
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)"]
这意味着你可以使用定义环境变量的任何可用技术(包括 ConfigMap 和 Secrets)为 Pod 定义参数。
注意
环境变量出现在括号中,"$(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 PST:更新 define-command-argument-container.md (631e9a23e4)