为容器定义命令和参数
此页面介绍了在 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)"]
这意味着您可以使用可用于定义环境变量的任何技术来定义 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 PST:更新 define-command-argument-container.md (631e9a23e4)